Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

112
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!