Les nombres doivent être imprimés avec des zéros en tête dans un champ de longueur = (nombre de chiffres de N ^ 2).
Entrée (N):
4
Production:
01 12 11 10
02 13 16 09
03 14 15 08
04 05 06 07
Je m'intéresse à l'algorithme et à la propreté de l'implémentation. Ainsi, l'espace blanc ne compte pas et la limite supérieure pour N est 42.
atomic-code-golf
Hristo Hristov
la source
la source
L = floor(log10(N^2)) + 1
Est-ce correct?N
?Réponses:
Python
Autres tests
la source
En rubis:
Tester:
Une autre solution utilisant des calculs d' ici :
Tester:
la source
En Python3:
Exemple de sortie pour 7:
edit: Une solution récursive - 263 octets
la source
Solution Java
exemple de sortie pour l'entrée 10
la source
Perl, 178 caractères
Utilise Math :: Complex et maintient la direction actuelle dans une variable complexe (1 / i / -1 / .i). Courir avec:
Mettre
N
en$l
.la source
C
la source
Python 2.7:
la source
PHP, 272 caractères avec commentaire
Version récursive basée sur Func - plus intéressante pour moi car elle exprime mieux l'intention. Il fonctionne également pour une largeur et une hauteur distinctes.
Production:
la source
C #, 380 ish golfé
Je n'ai pas pris la peine de coller dans la version golfée car j'étais assez confiant que cela n'allait pas battre de records. Mais je voulais lui donner une idée en y réfléchissant un peu différemment. Plutôt que d'écrire chaque ligne ou position au fur et à mesure que j'y arrive, je déplace le curseur en position, j'écris le numéro du centre de départ et je spirale à partir de là (ce qui illustre un modèle intéressant de positions à déplacer par changement de direction) ).
Il y a une bonne quantité d'espace de caractères gaspillé pour que le tampon de la console accepte les valeurs plus grandes et calcule également la position du coin supérieur gauche (qui, j'en suis sûr, peut être améliorée).
En tout cas, ce fut un exercice intéressant.
la source
Rubis
Ce n'est pas une solution golfable particulièrement bonne, mais elle pourrait présenter un intérêt algorithmique.
J'ai toujours été fasciné par un problème similaire , à savoir trouver le chemin en spirale dans le sens horaire à travers une matrice NxM. Une façon vraiment intuitive de résoudre ce problème est de continuer à tourner la matrice dans le sens antihoraire et de la décoller comme une orange. J'utilise une méthode similaire - mais pas aussi élégante - pour faire l'inverse:
la source
Raquette
Je voulais juste l'essayer avec une solution utilisant près de 0 mémoire. Pas de tableau, rien du tout. La valeur peut être générée à tout moment pour n'importe quelle position. Nous pourrions demander une spirale de n'importe quelle taille (si ce qui reçoit le flux de sortie peut le gérer). Dans l'espoir que quelqu'un ait besoin de gigantesques spirales.
Voici le code
Tester avec ceci
Résultats en sortie
Assez intensif en CPU par rapport aux matrices précalculées si vous avez besoin de toute la spirale, mais cela pourrait être utile. Qui sait! Par exemple:
Je n'ai pas joué au golf ... C'est assez petit malgré l'apparence. J'ai utilisé des noms longs et des commentaires.
la source
Python 2 , 800 octets
Essayez-le en ligne!
Il y a quelques années, une de mes amies a posé cette question lors d'une interview. Ils m'en ont parlé lors du dîner de Thanksgiving de notre famille, donc je pense que c'est le "problème de Thanksgiving".
la source
PHP,
172171 + 1 octets, 24 opérationscrée un tableau parcourant les index à travers une spirale; imprime ensuite le résultat.
Exécuter en tant que pipe avec
-nR
ou essayer en ligne .Ajoutez une affectation pour économiser cinq octets: remplacez la boucle finale par
la source
Exemple de code: cela fonctionne pour 4x5 mais à défaut 3x5
while (k <m && l <n) {/ * Imprime la première ligne à partir des lignes restantes * / for (i = l; i <n; ++ i) {printf ("% d", a [k] [ je]); } k ++;
la source