Celui-ci est inspiré du récent défi de la table de multiplication de Calvin's Hobbies .
Écrivez une fonction ou un programme qui prend un entier N
en entrée et imprime ou renvoie une spirale de multiplication unique N par N. Le code doit (en théorie) fonctionner pour N entre 0 et 1000 (la sortie peut cependant être difficile). La sortie doit être équivalente au tableau produit par la procédure suivante:
Remplissez un tableau de multiplication N par N. Par exemple pour N = 3:
1 2 3 2 4 6 3 6 9
Suivez une spirale dans le sens horaire à partir du coin supérieur gauche, en notant les chiffres que vous visitez. Lorsque vous visitez un numéro que vous avez déjà visité, remplacez-le par 0.
Quelques exemples pourraient le rendre plus clair:
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
Les chiffres se trouvent comme ceci:
Tout format de sortie raisonnable est accepté, mais il doit s'agir d'une matrice N par N, il ne peut pas s'agir simplement d'une liste. Les formats tels que ceux ci-dessous sont acceptés, car il y a N colonnes 1 par N facilement distinguables, ou N par 1 lignes:
[[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
Le code le plus court en octets gagne.
n=0
où il n'y a pas de zéro dans les tables de multiplication. Je peux comprendre n=1
que la sortie 1, mais pourquoi inclure zéro?
n=0
devrait être une matrice 0 par 0, sinon la question serait incohérente.