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

114
Vistas
Resolviendo el problema de la espiral usando patrones en lugar de algoritmos

Tuve este problema de programación que estoy tratando de resolver y como se me está acabando la paciencia, en lugar de codificar el script para que siga un algoritmo (que no pude codificar perfectamente), recurrí a resolverlo usando el patrón I ver en el problema.

Funciona, no me malinterpreten, pero me pregunto si generalmente está bien resolver un problema (que creo que tiene la intención de entrenar su cerebro para crear un algoritmo general a partir de una serie de patrones) con una solución que se deriva de cómo funciona el patrón.

Y el patrón que vi es que ya que el patrón de cómo se hace la espiral es este:

 N (1s to the right) N-1 (1s downwards) N-1 (1s to the right) N-3 (1s upwards) N-3 (1s to the left) .. and so on and so forth.

Hasta que sea el segundo nx donde la diferencia es 2, o el último nx donde la diferencia es 1, sigo imprimiendo 1 según el patrón anterior en la dirección en la que también estoy haciendo un bucle.

Lo resolví hasta el intento y es capaz de enviar, pero sentí que hice trampa en el problema.

No estoy pidiendo el mejor algoritmo para el problema, sino sus pensamientos sobre cómo resolví este problema. ¿Era una buena alternativa? Mientras funcione, ¿es un algoritmo?

No sé dónde más puedo hacer esta pregunta y esto es un poco amplio, pero espero poder obtener algunas ideas aquí. Gracias.

(JavaScript agregado ya que hice mi solución allí y la que tengo más experiencia)

EDITAR:

  • Agregar solución para una comprensión más clara del patrón que noté.
 function spiralize (n) { var output = Array(n).fill(0).map(_ => Array(n).fill(0)); var i = 0, j = -1, max = n; while(true) { if([[0,1], [1,0], [0,-1], [-1, 0]].find(([x, y], index) => { [output, i, j, max] = traverseArray(output, i, j, max, x, y, n); if((index % 2 == 0 && max == 2) || (index % 2 == 1 && max == 1)) return true; })) return output; } } function traverseArray(output, i, j, max, iter1, iter2, n) { iter1 ? max == n ? max-- : max -= 2 : max; temp = max; while(temp-- > 0) output[i += iter1][j += iter2] = 1; return [output, i, j, max]; }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El diseño de algoritmos, y en gran medida las matemáticas generales, es el arte de encontrar patrones y regularidades. Esto le permite crear soluciones automatizadas generadas por cálculos en lugar de datos explícitos y exhaustivos.

No hay "moralidad" en la programación: si funciona y funciona bien, no hay razón para rechazar una forma de codificar. (A menos que necesite ser entendido por otros).


Si tuviera que programar esto, y suponiendo que se permite almacenar toda la matriz, probablemente dejaría que la espiral funcionara por sí sola: comenzando horizontalmente desde la esquina superior izquierda, rellene con O, hasta que se alcance el borde o un cero. (si es cero, retroceda una posición). Luego gire a la derecha un cuarto de vuelta. En algún momento, no son posibles más movimientos. El patrón se puede resumir como "avanzar hasta chocar con una pared y girar a la derecha".

Probablemente también extendería la matriz y llenaría el contorno con ceros, para que no tenga que distinguir entre golpear el borde o ver un cero.

about 4 years ago · Juan Pablo Isaza 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