Le code de ce site s'épuise rapidement. Nous devons investir dans des chaînes renouvelables. Vous devez donc écrire un programme qui prend une chaîne et la convertit en moulin à vent.
Le défi
Prenons l'exemple d'une simple chaîne d'éoliennes. Prenez la ficelle abc
. Le pivot est le caractère central, dans ce cas b
. Étant donné que la chaîne est longue de 3 caractères, chaque sortie aura exactement trois lignes de haut et trois caractères de large. Voici votre sortie à l'étape 1. (Notez les espaces)
abc
Pour passer à l'étape suivante, faites pivoter chaque caractère autour du pivot dans le sens horaire. Voici l'étape 2:
une b c
Voici les étapes 3 à 8:
une b c
une b c
cba
c b une
c b une
c b une
Et à la neuvième étape, il fait le tour complet de la chaîne d'origine:
abc
Notez que le b
reste au même endroit tout le temps. C'est parce que b
c'est le caractère pivot. Vous devez écrire un programme ou une fonction qui prend une chaîne en entrée et imprime à plusieurs reprises cette séquence jusqu'à la fermeture du programme.
Clarifications
Toutes les chaînes d'entrée auront un nombre impair de caractères. (Pour que chaque moulin à vent ait un pivot)
Pour garder le défi simple, toutes les chaînes ne contiendront que des caractères alphabétiques en majuscules et minuscules.
La sortie doit être
len(input_string)
large et haute.Peu importe à quelle étape de la séquence vous commencez, tant que vous continuez à tourner et à boucler pour toujours.
Plus Test IO:
Puisque le message est déjà assez long, voici un lien vers la sortie pour "moulin à vent":
Sidenote:
Comme il s'agit d'un moulin à vent, ce serait génial si vous incluez du code passe-partout pour l'animer avec un petit délai ou une entrée utilisateur entre chaque étape. Cependant, comme certaines langues n'ont pas de temps intégré, ce n'est pas obligatoire. La partie concurrente de votre soumission peut simplement imprimer la séquence le plus rapidement possible.
Réponses:
MATL ,
353321 octetsCe qui suit animera le moulin à vent ( 26 octets )
Démo en ligne
Dans cette version, le
Xx
spécifie d'effacer l'affichage et le1Y.
est une pause de 1 seconde.Explication
L'idée de base est que nous voulons créer deux versions de l'entrée. Une version "orthogonale"
Et une version "diagonale"
Nous poussons ces deux versions sur la pile. Chaque fois dans la boucle, nous changeons l'ordre de la pile et tournons celle du haut dans le sens des aiguilles d'une montre.
la source
JavaScript (ES6), 291 octets
la source
05AB1E ,
8853 octetsCode:
Essayez-le en ligne! . Assurez-vous d'appuyer sur le bouton kill juste après l'avoir exécuté, car il va dans une boucle infinie.
la source
Rubis,
122119 octetsVersion non golfée avec sommeil, dans le programme de test
La rotation n'est pas très convaincante à pleine hauteur de console. Mais si vous réduisez la hauteur à la longueur de la chaîne d'entrée, la rotation est beaucoup plus convaincante.
la source
MATL ,
4744 octetsEssayez-le en ligne! (mais tuez-le immédiatement, boucle infinie)
Avec pause d'une seconde: 56 octets
Essayez-le en ligne! (encore une fois, boucle infinie)
la source
Python 3 , 193 octets
Non golfé
Récursif, 177 octets
(crash après quelques secondes)
Non golfé
Une autre solution, 268 octets
Non golfé
la source
Pyth, 48 octets
Essayez-le en ligne! (Remarque: il s'agit d'une version qui ne boucle pas indéfiniment, car cela ferait planter l'interpréteur.)
Traduit sans vergogne de la solution Python 3 par @ByHH .
Comment ça fonctionne:
la source