Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

158
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda