Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

157
Visualizações
Arreglos de búsqueda y corte

Dada la cadena nums que contiene solo dígitos y la matriz de números predefinedNumbers , tengo que construir una nueva cadena, basada en nums pero donde cada número entre dos puntos tiene que ser un número válido de predefinedNumbers y devolver todas las posibilidades.

Ejemplo de entrada:

 nums = "143163421154143" predefinedNumbers = ["21154", "143", "21154143", "1634", "163421154"]

Salida deseada:

 [ ":143:1634:21154:143:", ":143:163421154:143:", ":143:1634:21154143:" ]

Hasta ahora probé este código, pero no es el resultado que necesito y estoy atascado tratando de entender cómo revisarlo de forma recursiva:

 let nums = "143163421154143"; predefinedNumbers = ["21154", "143", "21154143", "1634", "163421154"]; let newArray=[]; function makeNumSentences (nums, predefinedNumbers) { predefinedNumbers.map(item => { if (nums.includes(item)) { newArray.push(item) } }) console.log(newArray.join(':')); }; makeNumSentences("143163421154143",["21154", "143", "21154143", "1634", "163421154"])

Cualquier pista es muy apreciada.

about 4 years ago · Santiago Gelvez
2 Respostas
Responde à pergunta

0

Tenga en cuenta que los bucles nunca terminarán en caso de que los nums no estén compuestos únicamente por predefinedNumbers .

 const nums = "143163421154143"; const predefinedNumbers = ["21154", "143", "21154143", "1634", "163421154"]; const result = []; function makeNumSentences(nums) { check([], nums); console.log(result); }; function check(array, nums) { predefinedNumbers.forEach(e => { if (nums.startsWith(e)) { const newArray = array.concat(e); const newNums = nums.slice(e.length); if (newNums) { check(newArray, newNums); } else { result.push(newArray.join(':')); } } }); } makeNumSentences(nums);

about 4 years ago · Santiago Gelvez Relatório

0

Primero, lea ¿Cómo hago y respondo preguntas sobre la tarea? .

Sin embargo, dado que ya hay una respuesta aceptada, solo mostraré una técnica alternativa. El hecho de que los elementos sean dígitos no tiene sentido. Esta misma técnica funcionará para cualquier cadena. (Existen técnicas matemáticas para encontrar el valor correcto, pero desbordarían rápidamente los números normales y, dado que la salida debe ser una cadena en cualquier caso, parece que no hay necesidad de buscarlas).

Pensando en esto recursivamente, podemos dividirlo en dos partes. ¿Cuáles de mis valores predefinidos aparecen al comienzo de mi cadena de destino? Y para cada uno de ellos, ¿cómo realizo la misma operación en el resto de la cadena? Una recursión necesita un caso base, y podemos decir que si la cadena de destino está vacía, entonces podemos devolver una sola cadena vacía.

Podemos implementarlo así:

 const make = (target, sources) => target .length == 0 ? [[]] : sources .filter (s => target .startsWith (s)) .flatMap (s => make (target .slice (s .length), sources) .map (r => [s, ...r])) const makeNumSentences = (target, parts) => make (target, parts) .map (r => `:${r.join(':')}:`) const nums = "143163421154143" const predefinedNumbers = ["21154", "143", "21154143", "1634", "163421154"] console .log (makeNumSentences (nums, predefinedNumbers))

Observe el desglose en una función recursiva principal, que devuelve una matriz de matrices de elementos de nuestras fuentes ( [["143", "1634", "21154", "143"], ["143", "1634", "21154143"], ["143", "163421154", "143"]] ) y un contenedor que los combina en el formato de salida. ( [":143:1634:21154:143:", ":143:1634:21154143:", ":143:163421154:143:"] ). En mi opinión, este es el desglose adecuado de la obra. Es agradable trabajar con matrices y podemos hacer mucho más con ellas. Pero este no es el único camino a seguir. Podemos modificar esto para devolver las cadenas directamente:

 const make = (target, sources) => target .length == 0 ? [''] : sources .filter (s => target .startsWith (s)) .flatMap (s => make (target .slice (s .length), sources) .map (r => `:${s}${r}` + (r ? '' : ':'))) const nums = "143163421154143" const predefinedNumbers = ["21154", "143", "21154143", "1634", "163421154"] console .log (make (nums, predefinedNumbers))

Tenga en cuenta que hay cierta complejidad adicional aquí en la construcción de las cadenas. Esto se debe al final " : ". Queremos agregar eso solo en el primer paso cuando la cadena existente está vacía. (Siempre añadimos el primero.)

about 4 years ago · Santiago Gelvez Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda