Los números deben imprimirse con ceros a la izquierda en un campo con longitud = (número de dígitos de N ^ 2).
Entrada (N):
4
Salida:
01 12 11 10
02 13 16 09
03 14 15 08
04 05 06 07
Estoy interesado en el algoritmo y la limpieza de la implementación. Entonces, el espacio en blanco no cuenta y el límite superior para N es 42.
atomic-code-golf
Hristo Hristov
fuente
fuente
L = floor(log10(N^2)) + 1
¿Es esto correcto?N
?Respuestas:
Pitón
Otras pruebas
fuente
En rubí:
Prueba:
Otra solución usando cálculos desde aquí :
Prueba:
fuente
En Python3:
Salida de muestra para 7:
editar: una solución recursiva - 263 bytes
fuente
Solución Java
salida de muestra para la entrada 10
fuente
Perl, 178 caracteres
Utiliza Math :: Complex y mantiene la dirección actual en una variable compleja (1 / i / -1 / .i). Corre con:
Poner
N
en$l
.fuente
C
fuente
Python 2.7:
fuente
PHP, 272 caracteres incluyendo comentarios
Versión recursiva basada en funciones, más interesante para mí, ya que expresa mejor la intención. También funciona para distintos anchos y alturas.
Salida:
fuente
C #, golf 380-ish
No me molesté en pegar en la versión de golf ya que estaba bastante seguro de que esto no iba a romper ningún récord. Pero quería intentarlo pensando un poco diferente. En lugar de escribir cada línea o posición a medida que avanzo, muevo el cursor a su posición, escribo el número central inicial y salgo en espiral desde allí (lo que ilustra un patrón interesante de posiciones para moverse por cambio de dirección )
Hay una gran cantidad de espacio de caracteres desperdiciado haciendo que el búfer de la consola acepte los valores más grandes, así como calculando la posición de la esquina superior izquierda (que estoy seguro se puede mejorar).
En cualquier caso, fue un ejercicio interesante.
fuente
Rubí
Esta no es una solución golfa particularmente buena, pero podría ser de interés algorítmico.
Siempre me ha fascinado un problema similar , a saber, encontrar la ruta espiral en sentido horario a través de una matriz NxM. Una forma realmente intuitiva de resolver ese problema es seguir girando la matriz en sentido antihorario y pelarla como una naranja. Utilizo un método similar, aunque no tan elegante, para hacer lo contrario:
fuente
Raqueta
Solo quería probarlo con una solución que usara memoria cercana a 0. Sin arreglo, sin nada. El valor se puede generar para cualquier posición en cualquier momento. Podríamos pedir una espiral de cualquier tamaño (si lo que recibe el flujo de salida puede manejarlo). Con la esperanza de que alguien necesite espirales gigantescas.
Aquí está el código
Prueba con esto
Resultados en salida
Bastante intensivo en CPU en comparación con las matrices precalculadas si necesita toda la espiral, pero podría ser útil. ¡Quién sabe! P.ej:
No jugué al golf ... Es bastante pequeño a pesar de la apariencia. Usé nombres largos y comentarios.
fuente
Python 2 , 800 bytes
Pruébalo en línea!
Hace unos años, a un amigo mío se le hizo esta pregunta en una entrevista. Me lo contaron en la cena de Acción de Gracias de nuestra familia, así que pienso en esto como el "problema de Acción de Gracias".
fuente
PHP,
172171+ 1 bytes, 24 operacionescrea una matriz que recorre los índices a través de una espiral; luego imprime el resultado.
Ejecutar como tubería
-nR
o probarlo en línea .Agregue una asignación para guardar cinco bytes: reemplace el bucle final con
fuente
Código de muestra: esto funciona para 4x5 pero falla 3x5
while (k <m && l <n) {/ * Imprime la primera fila de las filas restantes * / para (i = l; i <n; ++ i) {printf ("% d", a [k] [ yo]); } k ++;
fuente