Questo è ispirato alla recente sfida della tabella di moltiplicazione di Calvin's Hobbies .
Scrivi una funzione o un programma che accetta un numero intero N
come input e stampa o restituisce una spirale di moltiplicazione unica N-per-N. Il codice deve (in teoria) funzionare per N tra 0 e 1000 (emetterlo però può essere difficile). L'output dovrebbe essere equivalente alla tabella prodotta con la seguente procedura:
Compila una tabella di moltiplicazione N per N. Ad esempio per N = 3:
1 2 3 2 4 6 3 6 9
Segui una spirale in senso orario dall'angolo in alto a sinistra, notando i numeri che visiti. Quando visiti un numero che hai già visitato, sostituiscilo con 0.
Alcuni esempi potrebbero rendere più chiaro:
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
I numeri si trovano così:
È accettato qualsiasi formato di output ragionevole, ma deve essere una matrice N-by-N, non può essere solo un elenco. Sono accettati formati come quelli indicati di seguito, in quanto vi sono N colonne 1 per N facilmente distinguibili o righe N per 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
Il codice più corto in byte vince.
n=0
cui non c'è zero nelle tabelle di moltiplicazione. Posso capire n=1
sarebbe l'output 1, ma perché includere zero?
n=0
dovrebbe essere una matrice 0 per 0, altrimenti la domanda sarebbe incoerente.