Regardez la chaîne suivante. Vous remarquez un motif?
ABEFNOPEFGH DC GQI MHRJ LKJI SK DTL SPERME BAZYXWV N EO DP CQ BAZYXWVUTSR
Comme certains l'ont peut-être remarqué, il s'agit essentiellement d'une spirale de l'alphabet, où les distances entre les lignes / colonnes augmentent progressivement de 1 espace / nouvelle ligne.
Définition rigoureuse
- Ayons un compteur c , qui est initialement 0.
- Nous écrivons le premier c + 1 lettres de l'alphabet de gauche à droite:
A
. Puis, de haut en bas suivant (c + 1) (c + 2) / 2 lettres (add
B
):AB
.De gauche à droite, le suivant (c + 1) (c + 2) / 2 (ajouter
C
):AB C
Et de bas en haut, les c + 1 lettres suivantes (ajouter
D
):AB DC
Atteint la fin du cycle. Par conséquent, incrémentons c (qui devient 1). Puis, il commence à revenir de la première étape, la seule différence étant qu'au lieu d'utiliser le premier c + 1 lettres de l'alphabet, nous utilisons le suivant c + 1 lettres, à partir du dernier élément de ce cycle (
D
dans ce cas, nous continuons donc avecEFG...
). Une foisZ
atteint, il revient deA
.
Tâche
Étant donné un entier N (qui est positif pour l'indexation 1 ou non négatif pour l'indexation 0), sortez les N premiers cycles de la spirale.
Règles
Vous pouvez utiliser l'alphabet en minuscules ou en majuscules, mais votre choix doit être cohérent (utilisez uniquement l'un d'eux, le mélange n'est pas autorisé).
Vous pouvez prendre des entrées et fournir des sorties via l'une des méthodes standard , dans n'importe quel langage de programmation , tout en notant que ces failles sont interdites par défaut.
Formats de sortie acceptables: chaîne multiligne, une liste de chaînes représentant des lignes, une liste contenant plusieurs listes de caractères, chacune représentant une ligne, ou tout autre élément que vous jugez approprié. Dans le cas où vous ne choisissez pas le premier format, ce serait bien d'inclure une jolie version imprimée de votre code.
C'est le code-golf , donc le code le plus court en octets (dans chaque langue) qui remplit les conditions gagne!
Cas de test
L'entier en entrée sera séparé par sa sortie correspondante via une nouvelle ligne, et les tests seront séparés en utilisant des tirets. Notez que ceux-ci sont indexés 1.
1 UN B DC -------- 2 ABEF DC G MH LKJI -------- 3 ABEFNOP DC GQ MHR LKJI S DT CU BAZYXWV ------- 4 ABEFNOPEFGH DC GQI MHRJ LKJI SK DTL SPERME BAZYXWV N EO DP CQ BAZYXWVUTSR ------- 5 ABEFNOPEFGHFGHIJ DC GQIK MHRJL LKJI SKM DTLN CUMO BAZYXWV NP EOQ DPR CQS BAZYXWVUTSR T RU QV PW BŒUF NMLKJIHGFEDCBAZY ------ 6 ABEFNOPEFGHFGHIJSTUVWX DC GQIKY MHRJLZ LKJI SKMA DTLNB CUMOC BAZYXWV NPD EOQE DPRF CQSG BAZYXWVUTSR TH RUI QVJ PWK OXL NMLKJIHGFEDCBAZY M SN RO QP PQ OU NMLKJIHGFEDCBAZYXWVUTS