Este está inspirado en el reciente desafío de la tabla de multiplicar de Hobbies de Calvin .
Escriba una función o programa que tome un número entero N
como entrada e imprima o devuelva una espiral de multiplicación única N-por-N. El código debe (en teoría) funcionar para N entre 0 y 1000 (sin embargo, generar esto puede ser difícil). El resultado debe ser equivalente a la tabla producida por el siguiente procedimiento:
Completa una tabla de multiplicación N-por-N. Por ejemplo, para N = 3:
1 2 3 2 4 6 3 6 9
Siga una espiral en el sentido de las agujas del reloj desde la esquina superior izquierda, anotando los números que visita. Cuando visite un número que ya ha visitado, reemplácelo por 0.
Algunos ejemplos pueden dejarlo más claro:
n = 0:
0
n = 1:
1
n = 2: // Spiral order:
1 2 // 1 2
0 4 // 4 3
n = 3:
1 2 3 // 1 2 3
0 4 6 // 8 9 4
0 0 9 // 7 6 5
n = 4:
1 2 3 4 // 1 2 3 4
0 0 6 8 // 12 13 14 5
0 0 9 12 // 11 16 15 6
0 0 0 16 // 10 9 8 7
n = 5:
1 2 3 4 5
0 0 6 8 10
0 0 9 12 15
0 0 0 16 20
0 0 0 0 25
n = 10:
1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 12 14 16 18 20
0 0 0 0 15 0 21 24 27 30
0 0 0 0 0 0 28 32 36 40
0 0 0 0 25 0 35 0 45 50
0 0 0 0 0 0 42 48 54 60
0 0 0 0 0 0 49 56 63 70
0 0 0 0 0 0 0 64 72 80
0 0 0 0 0 0 0 0 81 90
0 0 0 0 0 0 0 0 0 100
Los números se encuentran así:
Se acepta cualquier formato de salida razonable, pero debe ser una matriz N por N, no puede ser solo una lista. Se aceptan formatos como los siguientes, ya que hay N columnas fácilmente distinguibles de 1 por N o filas de N por 1:
[[1 2 3][0 4 6][0 0 9]] <-- OK
[[1 0 0][2 4 0][3 6 9]] <-- OK
ans = <-- OK
1 2 3
0 4 6
0 0 9
El código más corto en bytes gana.
n=0
donde no hay cero en las tablas de multiplicar? Puedo entender que n=1
saldría 1, pero ¿por qué incluir cero?
n=0
debe ser una matriz 0 por 0 o la pregunta sería inconsistente.