Écrivez un programme ou une fonction qui, une fois donné n
, imprimera une spirale n
composée de l'alphabet latin ABCDEFGHIJKLMNOPQRSTUVWXYZ
répété au besoin. Cette spirale ne doit parcourir l'alphabet que vers l'avant.
Lié à la spirale alphabétique , bien que la spirale traverse l'alphabet vers l'avant et vers l'arrière, et la spirale est constante.
Cas de test
4 AB
DC
40 UVWXYZ
TGHIJA
NSFABKB
MREDCLC
LQPONMD
KJIHGFE
0
10 GHIJ
FAB
EDC
1000 UVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
TGHIJKLMNOPQRSTUVWXYZABCDEFGHIJA
SFABCDEFGHIJKLMNOPQRSTUVWXYZABKB
REZCDEFGHIJKLMNOPQRSTUVWXYZABCLC
QDYBMNOPQRSTUVWXYZABCDEFGHIJCDMD
PCXALEFGHIJKLMNOPQRSTUVWXYZKDENE
OBWZKDEFGHIJKLMNOPQRSTUVWXALEFOF
NAVYJCDMNOPQRSTUVWXYZABCDYBMFGPG
MZUXIBCLCDEFGHIJKLMNOPQREZCNGHQH
LYTWHABKBABCDEFGHIJKLMNSFADOHIRI
KXSVGZAJAZGHIJKLMNOPQROTGBEPIJSJ
JWRUFYZIZYFUVWXYZABCDSPUHCFQJKTK
IVQTEXYHYXETQRSTUVWXETQVIDGRKLUL
HUPSDWXGXWDSPUVWXYZYFURWJEHSLMVM
GTORCVWFWVCROTGHIJAZGVSXKFITMNWN
FSNQBUVEVUBQNSFABKBAHWTYLGJUNOXO
ERMPATUDUTAPMREDCLCBIXUZMHKVOPYP
DQLOZSTCTSZOLQPONMDCJYVANILWPQZQ
CPKNYRSBSRYNKJIHGFEDKZWBOJMXQRAR
BOJMXQRARQXMLKJIHGFELAXCPKNYRSBS
ANILWPQZQPWVUTSRQPONMBYDQLOZSTCT
ZMHKVOPYPONMLKJIHGFEDCZERMPATUDU
YLGJUNOXONMLKJIHGFEDCBAFSNQBUVEV
XKFITMNWVUTSRQPONMLKJIHGTORCVWFW
WJEHSLMLKJIHGFEDCBAZYXWVUPSDWXGX
VIDGRKJIHGFEDCBAZYXWVUTSRQTEXYHY
UHCFQPONMLKJIHGFEDCBAZYXWVUFYZIZ
TGBEDCBAZYXWVUTSRQPONMLKJIHGZAJA
SFAZYXWVUTSRQPONMLKJIHGFEDCBABKB
REDCBAZYXWVUTSRQPONMLKJIHGFEDCLC
QPONMLKJIHGFEDCBAZYXWVUTSRQPONMD
LKJIHGFE
Règles
- Votre entrée sera un entier non négatif
0 <= n <= 1000
, mais votre code devrait théoriquement gérer tout entier non négatif. - Votre format de sortie peut être dans n'importe quel format sain, avec des délimiteurs si nécessaire.
- Les rotations et les réflexions sont équivalentes.
- Votre alphabet peut être en majuscule ou en minuscule.
- Les espaces vides de votre spirale peuvent être remplis par les valeurs non alphabétiques que vous jugez appropriées.
- La spirale elle-même peut avoir la forme que vous jugerez appropriée. Les spirales rectangulaires fonctionnent mieux avec les solutions ASCII, mais les solutions graphiques peuvent être plus courtes avec les spirales circulaires.
- Les espaces de début et de fin et les nouvelles lignes sont autorisés.
- C'est le golf de code. La réponse la plus courte en octets (ou équivalent) l'emporte.
Comme toujours, si quelque chose n'est pas clair ou incorrect, faites-le moi savoir dans les commentaires. Bonne chance et bon golf!
Réponses:
Logo,
12987 octetsSolution graphique, implémentée en fonction
Cela a été construit sur l'interpréteur de logo de Calormen.com . La
S
fonction prend le nombre de caractères comme paramètre et les dessine en spirale.La. J'ai décidé qu'il semblait plus agréable (et joué 42 octets ) de ne pas corriger l'orientation des lettres. J'ai également resserré l'espacement qui n'a pas changé le nombre d'octets. Si vous deviez enrouler un alphabet, cela ressemblerait de toute façon à ceci.T
fonction sort les lettres en position verticale pour les empêcher de tourner avec la spirale.Version mise à jour (rouleau de lettres)
Invocation
Appelez comme suit:
S
itérationsExemple de sortie
Ancienne version (lettres toujours droites)
Ancienne sortie supprimée pour économiser de l'espace. Voyez-le ici .
la source
95
changera l'étanchéité de la spirale, et15
changera ajustera l'espacement linéaire des lettres.Javascript (ES6),
203201 octetsDémo
La démonstration ci-dessous doit être exécutée de préférence en pleine page.
Afficher l'extrait de code
la source
R, 46 ou 51 octets, selon l'espacement
(version mise à jour de l'intrigue: la spirale grise n'est pas tracée par défaut mais je l'ai ajoutée après pour montrer que les lettres reposent bien sur une spirale.)
La spirale n'est pas à espacement constant, donc j'espère que ça va. Si un espacement constant est requis, commencez par à la
s=(1:scan())^.5
place et ajoutez 5 octets au total. Ensuite, la sortie est comme ci-dessous (n = 150):la source
Python 3,5,
180157152147141 octets-6 en raison de Sherlock9
-5 en raison de Kap.
Solution révisée, python 3.x:
Solution précédente:
Explication
r
est une liste de listes qui contient la spirale. L'idée de base est que de nouvelles lettres sont ajoutées à la ligne inférieure de la spirale (r[-1].append(chr(x%26+65))
). Lorsque la rangée du bas est remplie, la spirale pivote de 90 dans le sens des aiguilles d'une montre et une nouvelle rangée vide est ajoutée en bas (r = list(zip(*r[::-1]))+[[]]
).L'astuce consiste à déterminer quand faire tourner la spirale. Dans la première solution, le générateur
(j<1for i in R(n)for j in R(i//2+1))
produit une séquence de valeurs Vrai / Faux qui indiquent quand faire tourner la spirale. Dans la solution révisée, j'ai changé la façon dontr
est initialisé. Maintenant, lorsque la longueur de la rangée inférieure est égale à la longueur de la rangée supérieure, la spirale doit être tournée.la source
if len(r[-1])==len(r[0]):r=list(zip(*r[::-1]))+[[]]
parif len(r[-1])==len(r[0]):r=[*zip(*r[::-1]),[]]
pour économiser 5 octets.range
qu'une seule fois, vous pouvez le supprimerR
pour économiser des octets. Vous pouvez également économiser des octets en convertissant votre réponse en un programme complet, mais pour conserver l'utilisation de[*zip(*r[::-1]),[]]
, vous devrez utiliserrange(int(input()))
.for x in range(int(input())):r=len(r[-1])<len(r[0])and r or[*zip(*r[::-1]),[]];r[-1]+=[chr(x%26+65)]
puisque vous vérifiez quand la dernière ligne est égale ou supérieure à la première ligne.n
dans cette version. Vous devezint(input())
soit utiliser, soit envelopper dans une fonction.for
boucle:for x in range(int(input())):r=len(r[-1])<len(r[0])and r or[*zip(*r[::-1]),[]];r[-1]+=[chr(x%26+65)]
MATL ,
2118 octetsL'entrée se
0
termine avec une erreur (ce qui est autorisé par défaut ).Essayez-le en ligne!
Explication
la source
Python 2,
8482 octetsJ'utilise à nouveau Turtle. C'est tellement amusant! :RÉ
Essayez-le en ligne
Malheureusement, Trinket.io a une toile horriblement petite. J'ai changé
9+i
à9+i/9
et ajusté le point de départ de la tortue dans le but de l' écran de capture cette image, de sorte que plus de la sortie cadrerait:la source
from turtle import*
et un autre de passer dewhile
àfor i in range(input())
Pyth, 32 octets
Un programme qui imprime une spirale ASCII rectangulaire en minuscules. Selon l'entrée, une ligne ou une colonne d'espaces blancs de début ou de fin peut être présente.
Essayez-le en ligne
Comment ça marche
la source
TSQL,
386362358306 octetsVeuillez noter que TSQL n'a aucun moyen de faire pivoter le texte. Ce script part de A et calcule dans quelle direction la prochaine lettre doit être placée. (droite, bas, gauche, gauche, gauche, haut, haut, droite ...)
Le script peut gérer un maximum de 7744 lettres.
Golfé:
Non golfé:
Violon
la source
Python 2, 243 octets
Ideone it!
la source
PHP , 219 octets
Essayez-le en ligne!
PHP, 260 octets
Ancienne version
la source