Écrivez un programme ou une fonction qui accepte une chaîne non vide de caractères ascii imprimables, sans espace:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Vous pouvez supposer que l'entrée est valide.
Sur la base de l'entrée, dessinez une nouvelle chaîne disposée sur une grille textuelle d'espaces et de nouvelles lignes suivant les règles graphiques de la tortue où la tortue occupe toujours un espace de grille et ne peut faire face qu'aux directions cardinales.
Imprimez le premier caractère de la chaîne d'entrée dans la grille de texte. La tortue commence ici face à droite. Itérer sur le reste des caractères de la chaîne d'entrée (arrêt uniquement si la tortue est coincée), en répétant ce processus:
Si les 4 espaces de grille directement voisins de la tortue sont tous remplis (c'est-à-dire qu'aucun d'entre eux n'est un espace), arrêtez d'itérer. La tortue est coincée et la grille est aussi complète que possible.
Regardez le caractère actuel dans l'entrée par rapport au caractère précédent:
Si le personnage actuel est lexicalement avant le précédent, tournez la tortue d'un quart de tour à gauche.
Si le personnage actuel est lexicalement après le précédent, tournez la tortue d'un quart de tour à droite.
Si le caractère actuel est égal au précédent, ne faites pas tourner la tortue.
Si l'espace de grille auquel la tortue fait face n'est pas vide (c'est-à-dire pas un espace), tournez la tortue de façon répétée d'un quart de tour vers la gauche jusqu'à ce qu'elle soit face à un espace de grille vide.
Déplacez la tortue d'un pas de grille vers l'avant dans la direction dans laquelle elle se trouve et imprimez le personnage actuel sur la grille dans le nouvel emplacement de la tortue.
Imprimez ou renvoyez la chaîne de grille de texte résultante sans lignes ou colonnes superflues superflues. Les lignes peuvent avoir des espaces de fin jusqu'à la colonne la plus à droite avec un non-espace, mais pas au-delà. Une seule nouvelle ligne de fin est éventuellement autorisée.
Le code le plus court en octets gagne.
Exemple
Voici toutes les étapes de l'entrée spattuuxze
. Les ^V<>
caractères indiquent la direction dans laquelle la tortue fait face, ils ne font pas partie de l'entrée ou de la sortie.
s>
^
p
s
<ap
s
^
t
ap
s
^
t
t
ap
s
tu>
t
ap
s
tuu>
t
ap
s
tuu
t x
apV
s
tuu
<zx
ap
s
À ce stade, la tortue est bloquée, elle n'est donc e
jamais imprimée et le résultat final est:
tuu
tzx
ap
s
Ce qui suit est une sortie similaire mais non valide car elle a une première colonne inutile d'espaces blancs:
tuu
tzx
ap
s
Cas de test
spattuuxze
tuu
tzx
ap
s
spattuuxxze
tuu
t x
apx
sze
1111111
1111111
ABCDEFGHIJKLMNOP
PEFG
ODAH
NCBI
MLKJ
`_^]\[ZYXWVUTSR
^_RS
\]`UT
[ZWV
YX
Woo!
W
o
o!
woo!
!o
o
w
Wheeee
W
heeee
banana
a
an
an
b
Turtle
T
ure
tl
turTle
e
tTl
ur
(Dites-moi tout de suite si l'un de ces éléments semble incorrect.)
PONMLKJIHGFEDCBA
, car le résultat n'est pas juste un carré et contraste avecABCDEFGHIJKLMNOP
pour mettre en évidence l'asymétrie dans les règles.Réponses:
Groovy (357 octets)
Aucune bibliothèque externe de tortues n'a été utilisée et aucune tortue n'a été blessée.
Essayez-le ici: https://groovyconsole.appspot.com/edit/5115774872059904
Tentatives précédentes
Groovy (397 octets)
https://groovyconsole.appspot.com/script/5179465747398656
la source
Java,
408406 octetsLa fonction obtient l'entrée en tant que chaîne et renvoie le résultat en tant que chaîne.
En interne, il utilise un tableau de caractères 2D pour stocker les lettres et conserve les colonnes et lignes min et max utilisées afin de renvoyer le sous-tableau utilisé.
Ainsi, dans le résultat String, il n'y a pas de colonnes de début d'espaces blancs mais il y a des espaces blancs de fin jusqu'à la colonne la plus à droite avec un caractère non-espace. Une nouvelle ligne est ajoutée à la fin.
Toutes les suggestions pour jouer au golf sont les bienvenues :-)
la source
%
est le reste en java et il peut être négatif ce qui n'est pas souhaité. Merci pour les suggestions :-)Python3,
419414 octetsla source