Contribution:
Un string
Production:
1) D'abord, nous prenons le caractère de suppression à la fin de la chaîne d'entrée jusqu'à ce qu'il nous reste une longueur qui est un carré (c'est-à-dire 1, 4, 9, 16, 25, 36, etc.)
Donc abcdefghijklmnopqrstuvwxyz
(la longueur 26) devient abcdefghijklmnopqrstuvwxy
( longueur 25).
2) Ensuite, nous mettons cela dans un carré, une ligne à la fois, de gauche à droite:
abcde
fghij
klmno
pqrst
uvwxy
3) Nous le plions dans les quatre directions, comme ceci (nous continuons à déplier jusqu'à ce que le `` bloc '' plié extérieur n'ait plus de caractères intérieurs à déplier):
m
qrs
l n
ghi
abcde
ihgf jihg
mn lk on lm
srqp tsrq
uvwxy
qrs
l n
ghi
m
Certaines choses à noter, lorsque nous nous replions vers l'extérieur, nous reflétons essentiellement comme ceci (les chiffres ajoutés à titre de clarification, qui représentent les `` index '' dans ces exemples):
Lorsque nous déplions le côté gauche:
123 to: 321 123
fghij ihgf j
Lorsque nous replions le côté droit:
123 to: 123 321
fghij f jihg
Lorsque nous nous replions vers le haut:
3q
2l
1g
b to: b
1g 1
2l 2
3q 3
v v
Lorsque nous nous replions vers le bas:
b b
1g 1
2l 2
3q 3
v to: v
3q
2l
1g
Règles du défi:
- Vous pouvez supposer que l'entrée aura toujours au moins 1 caractère (qui sera également la sortie).
- Le format de sortie est flexible, vous pouvez donc imprimer sur STDOUT ou STDERR; renvoyer sous forme de tableau / liste de chaînes ou de tableau 2D de caractères; chaîne unique avec des nouvelles lignes; etc.
- L'entrée ne contiendra que des caractères alphanumériques (
a-zA-Z0-9
) - Vous pouvez également utiliser un caractère non alphanumérique pour remplir les espaces dans et / ou autour de la sortie ASCII-art, comme un point
.
. - Les espaces de fin et une seule nouvelle ligne de fin sont facultatifs.
- Nous continuons à déplier jusqu'à ce que le «bloc» plié extérieur n'ait plus de centres à déplier.
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues non-golfeur de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code.
- Veuillez également ajouter une explication si nécessaire.
Cas de test:
Input: abcdefghijklmnopqrstuvwxy
Output:
m
qrs
l n
ghi
abcde
ihgf jihg
mn lk on lm
srqp tsrq
uvwxy
qrs
l n
ghi
m
Input: A
Ouput:
A
Input: ThisIsATest
Output:
I
Thi
Is sI
ATe
I
Input: HowAboutAVeryLongExampleWhichIsAlsoAnEvenSquareInsteadOfOddOneAndExceeds64Chars
Output:
An
ch
xamp
i I
o E
quar
steadO
S e
s v
h s
E l
VeryLo
HowAbout
oLyreVA noLyreV
xampl Eg el Examp
hci Is hW As hi Ihc
nAo Ev sl ev so EnA
quare Sn Ie Squar
Odaetsn fOdaets
OddOneAn
steadO
S e
s v
h s
E l
VeryLo
xamp
i I
o E
quar
An
ch
Input: Lenght7
Output:
Le
ng
Input: abc
Output:
a
Réponses:
SOGL V0.12 , 75 octets
Essayez-le ici!
Cela attend l'entrée sur la pile, donc pour la facilité d'utilisation, j'ai ajouté
,
au début. Cela peut causer des problèmes si l'entrée ne contient que des chiffres, voici donc une suite de tests pour cela.70 octets
√lH»{ā;l⁾:A∫Ba{bIwFIWhFbž;FIbI@ž}};}¹K⁴{ē2\⌡±e{@Κ};⁴┼┼};0E{ē2\⌡№:h++}╚
fonctionnent aussi, mais comme je ne l'ai implémenté que√
sur des chaînes et que la documentation ne mentionne pas que cela couvrirait la longueur, je ne le compterai pas.Explication:
la source
√
ne fonctionnait que sur les chiffres. La raison pour laquelle je ne compte pas la version 75 octets est parce que j'ai l'impression qu'elle relève de la faille de l'ajout d'un intégré juste pour un défiCharbon de bois ,
120109 octetsEssayez-le en ligne! Notez que ce dernier
A
a été remplacé par≔
et le lien le reflète. Explication:Calcule
h = int(sqrt(len(q)))
. (Floor
devait encore être mis en œuvre ...)Extrait les
h
tranches de longueurh
de l'entrée. (En fait, je ne prends pas la peine de tronquer les tranches sur la longueurh
.) J'utilise unefor
boucle plutôt qu'un,Map
car j'ai besoinAssign
du résultat deMap
quelque part et ce n'est pas anodin lorsque l'on traite unSlice
.Le dépliage se produit 4 fois, une fois pour chaque direction (bas, droite, haut, gauche comme codé). La variable de boucle pour cette boucle est
i
.Prenez une copie de la chaîne tranchée.
Revenez à l'origine du canevas pour que chaque
h
dépliage commence par le -par-h
carré au même endroit.Répétez
(h+1)/2
fois; une fois pour chaque dépli, plus une fois pour le carré d'origine. La variable de boucle pour cette boucle estk
.Répétez 4 fois, une fois de chaque côté du carré déplié. (Je n'utilise pas la variable de boucle
l
.)Imprimez un côté du carré déplié. Puisqu'il s'agit du
k
troisième déplié, le côté du carré l'esth-2k
etk
éloigne les personnages du bord du carré d'origine.Pivot prêt à imprimer le côté suivant du carré.
Faites pivoter la chaîne tranchée. (Oui, c'est un
ξ
. Je ne l'utilise pas souvent!)Eη
Fonctionnerait également pour l'extérieurMap
. La rotation a également pour effet secondaire pratique de tronquer la largeur du tableau àh
.Après avoir imprimé le côté, le curseur se déplace hors du bord du carré. L'impression d'un caractère de moins échoue pour les carrés du côté 1 et est moins golfique de toute façon. Après avoir pivoté précédemment, l'impression d'une nouvelle ligne déplace commodément le curseur dans le coin.
Retournez le carré verticalement ou horizontalement selon le cas.
Calculez le déplacement vers le dépliage suivant.
Déplacez-vous horizontalement ou verticalement vers le dépliage suivant, selon le cas.
Voici un lien vers la version 97 octets obtenue en utilisant toutes les dernières fonctionnalités de charbon de bois, y compris
Floor
: Essayez-le en ligne! Le lien est vers la version détaillée du code.la source