Étant donné une chaîne carrée, produisez toutes les sorties de la chaîne à chaque étape du déroulement.
La chaîne doit se dérouler dans le sens horaire un quart de tour à la fois.
Exemples
Entrée :
A
Sortie :
A
Remarque : J'accepte également l'entrée dupliquée pour ce cas de test particulier uniquement si cela permet de réduire le nombre d'octets.
Entrée :
DC
AB
Sortie :
DC
AB
D
ABC
ABCD
Entrée :
GFE
HID
ABC
Sortie :
GFE
HID
ABC
HG
IF
ABCDE
IH
ABCDEFG
I
ABCDEFGH
ABCDEFGHI
Entrée :
JIHG
KPOF
LMNE
ABCD
Sortie :
JIHG
KPOF
LMNE
ABCD
LKJ
MPI
NOH
ABCDEFG
NML
OPK
ABCDEFGHIJ
ON
PM
ABCDEFGHIJKL
PO
ABCDEFGHIJKLMN
P
ABCDEFGHIJKLMNO
ABCDEFGHIJKLMNOP
Règles
Il s'agit de code-golf, donc le code le plus court en octets l'emporte.
- Tout format raisonnable peut être utilisé pour les E / S en supposant qu'il soit cohérent.
- Des espaces doivent être utilisés pour remplir les lignes supérieures de la sortie.
- Doit être capable de gérer la saisie de tous les caractères imprimables (y compris l'espace:
\x20
-\x7e
):
! "# $% & '() * +, -. / 0123456789:;? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _` abcdefghijklmnopqrstuvwxyz {|} ~
- Les espaces blancs avant / arrière sont autorisés.
- Vous pouvez supposer que la chaîne sera toujours un carré.
- Toutes les failles standard sont interdites.
Inspiration: Écrivez un programme carré qui affiche le nombre de fois qu'il a été «déroulé» .
["A","A"]
pour"A"
, comme mon programme le fait (au lieu de["A"]
)? Cela me semble raisonnable car ce ne sont que les positions de départ et de fin, et vous n'essayez de le déployer qu'une seule fois.Réponses:
SOGL V0.12 ,
2120191817 octetsEssayez-le ici! (
→
ajouté car cela attend une entrée sur la pile)Explication:
la source
Python 2 ,
209 207 205 203 203 202 201 200196 octets-4 octets grâce à @Quelklef !
Essayez-le en ligne!
Python 2 ,
219 217 215 213 212 212 211207 octetsEssayez-le en ligne!
Le premier sort sous forme de liste de chaînes, le second sort sous forme ASCII.
la source
[::-1][1:]
possible[-2::-1]
, comme dans la réponse de Lynn.Fusain ,
4235 octetsEssayez-le en ligne! Le lien est vers la version détaillée du code. Edit: 7 octets enregistrés principalement en passant des tableaux de caractères aux chaînes. Explication:
Lisez le carré d'entrée comme un tableau de chaînes dans la variable
q
.Alors que la dernière chaîne du tableau n'est pas vide, supprimez-la.
Imprimez le reste du tableau.
Faites pivoter le reste du tableau en parcourant chaque caractère de la dernière chaîne et en joignant le
l
e caractère de chaque chaîne restante du tableau inversé.Ajoutez la dernière chaîne précédemment supprimée à
u
, qui contient la valeur déployée, et imprimez-la.Générez le résultat, puis effacez le canevas prêt pour la prochaine itération.
Notez que cette version affiche le déroulement final sur une ligne distincte, si cela n'est pas souhaitable, alors pour 38 octets:
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
←E⁺⟦⪫υω⟧⮌θ⮌κ
inverse le tableau actuel, ajoute la ligne déployée, inverse les caractères de chaque ligne, puis imprime tout à l'envers, produisant ainsi le résultat souhaité.la source
Rotate
etTrim
laissent le curseur ...Haskell ,
127120 octetsEssayez-le en ligne!
L' entrée est une liste de lignes, par exemple
["DC","AB"]
pour le second scénario de test, la sortie est une liste de listes de lignes:[["DC","AB"],[" D","ABC"],["ABCD"]]
. UtilisezmapM (putStrLn . unlines)
pour imprimer le résultat.Edit: économisé 7 octets en notant que le plus court
transpose
j'en ai trouvé pendant qu'un go est pratique car il peut être modifié pour inverser directement chaque transposé.la source
05AB1E , 18 octets
Essayez-le en ligne!
Explication
la source
J, 62 octets
Essayez-le en ligne!
Je suis sûr que cela peut être joué beaucoup. Cela imprime des espaces supplémentaires, mais uniquement en raison de la façon dont J met en forme les tableaux contenus dans le tableau en sortie pour qu'ils aient la même forme.
Je pense qu'une fois que j'entrerai et commenterai exactement ce que je fais, je pourrais avoir une meilleure idée de comment jouer au golf (après l'avoir fait maintenant, je ne sais pas vraiment ...). Aux fins du golf, il convient de noter que
Explication
En dégoûtant cela, je diviserai la fonction principale en trois.
Nous allons travailler avec le deuxième cas de test.
unfurl_reversed
Cela donne une chaîne déroulée une fois, mais en sens inverse. Tout cela se fait en sens inverse et dans un ordre spécifique afin que la façon dont J remplit automatiquement les chaînes avec des espaces pour correspondre à la forme du tableau dans lequel elles se trouvent donnera le bon espacement.
|:@}:
est la transposition de la restriction de l'entrée|.@{:
est l'inverse de la queue de l'entréeJe pense que vous pouvez voir ce que nous voulons faire: nous voulons ajouter le revers de la queue à la dernière partie de la transposition de la queue (c'est une bouchée, mais essentiellement attacher
CBA
à la fin deED
). Cela nous donnera une étape de déploiement, inversée.(}:@],{:@],[)
fait juste cela.Il s'ajoute
CBA
àED
, puis rejoint cela avec le reste du tableau. Notre production est doncwhitespace_filter
Fondamentalement, cela teste pour voir si une ligne est complètement vide et la supprime si elle l'est. Il ne fait rien pour la première itération du cas de test.
C'est nécessaire (au moins jusqu'à ce que je trouve une alternative) car sinon, nous finirons par déployer des espaces dans notre chaîne de sortie.
déployer
Unfurl rassemble essentiellement les autres fonctions et les cas spéciaux à un seul caractère.
Lorsque la puissance de verb (
^:
) est donnée à la case vide (a:
), elle applique une fonction sur une entrée jusqu'à ce qu'elle converge et recueille les résultats dans un tableau.(1 < #)
vérifie que les lignes sont toujours supérieures à 1 (dans le cas spécial 1 entrée de ligne).|."1
inverse chaque ligne, donc il inverse les résultats dewhitespace_filter @: unfurl
.la source
Python 2 ,
143132 octetsEssayez-le en ligne!
Dans chaque itération,
b
est la «tête» de la chaîne (premières n − 1 lignes), tournée de 90 degrés: sia
est[" NML", " OPK", "ABCDEFGHIJ"]
alorsb
est["ON", "PM", "KL"]
.Pour dérouler une chaîne une fois, nous ajoutons la dernière ligne de
b
àa[-1]
(donnant"ABCDEFGHIJKL"
), puis recalculonsa[:-1]
en ajoutant des espaces au reste des chaînes dansb
.Nous terminons en essayant de sortir de
b
quand il est vide.Python 2 , 132 octets
Essayez-le en ligne!
Même idée, écrite différemment. Nous terminons en essayant de
a.pop(-2)
quanda
n'a qu'un seul élément.la source
Perl 5 , 155 octets
Essayez-le en ligne!
Enregistré quelques octets sans vraiment modifier la logique. Le flux ci-dessous est toujours fondamentalement correct.
# Perl 5 , 163 octetsEssayez-le en ligne!
Comment?
la source