Défi:
Contribution:
Vous prenez deux entrées:
- Une chaîne contenant uniquement de l'ASCII imprimable (à l'exclusion des espaces, des tabulations ou des nouvelles lignes)
- Un caractère ASCII imprimable
Sortie:
La première ligne contiendra l'entrée de chaîne. Chaque i
première occurrence de -modulo-3 de ce personnage se déplacera dans une direction sud-est; chaque i
occurrence de -modulo-3 se déplacera dans une direction sud; et chaque i
troisième occurrence de -modulo-3 se déplacera dans une direction sud-ouest. Vous continuerez jusqu'à ce que les caractères soient sur le point d'être à leur position de départ initiale (ce qui signifie qu'il s'enroulera d'un côté à l'autre si nécessaire), puis vous imprimerez à nouveau la dernière ligne avec l'entrée de chaîne dans Terminez-le. (Notez que tous les cas de test se retrouveront à leur entrée initiale après au plus des length(input)
lignes, y compris la ligne contenant l'entrée de fin. Cela peut être plus tôt cependant, comme on le voit dans ce premier cas de test ci-dessous, avec une longueur de 14, mais se terminant après 9.)
Tout cela peut être assez vague, alors voici un exemple:
Cas de test 1:
Entrée chaîne: Entrée "This_is_a_test"
caractère:'s'
Sortie:
This_is_a_test
s s s
ss s
s s
sss
sss
s s
ss s
s s s
This_is_a_test
Voici le même cas de test avec les chemins colorés des trois s
:
où le premier 's'
suit la voie verte dans une direction sud-est; le second 's'
suit le chemin jaune en direction du sud; et le troisième 's'
suit le chemin bleu clair dans une direction sud-ouest. (S'il y en avait un quatrième, 's'
il irait à nouveau dans une direction sud-est, comme on peut le voir dans certains des autres cas de test ci-dessous.)
Règles du défi:
- Les entrées ne contiendront que de l'ASCII imprimable (à l'exclusion des espaces, des tabulations et des nouvelles lignes)
- Les formats d'E / S sont flexibles. Peut être une chaîne délimitée par une nouvelle ligne, une matrice de caractères, etc. Votre appel.
- Il est possible que le caractère donné ne soit pas présent dans la chaîne, auquel cas vous êtes autorisé à sortir la chaîne d'entrée une ou deux fois (c'est
"test", 'a'
-à- dire que vous pouvez avoir l'une ou l'autre de ces sorties comme sortie possible:"test\ntest"
/"test"
). - Les espaces de tête sont obligatoires; les espaces de fin sont facultatifs. Une ou plusieurs nouvelles lignes de début / fin sont autorisées.
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 autres que le golf 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, fonctions / méthode 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 / autres exemples:
Cas de test 2:
Entrée chaîne: Entrée "abcabcabcabcabc"
caractère:'b'
Sortie:
abcabcabcabcabc
b b b b b
bbb bb
b b
bbb bb
b b b b b
b b b b
b b b b b
bb b bb
b b b
bb bbb
b b bbb
b b b b
b bb bb
b b bb b
abcabcabcabcabc
Voici le même cas de test avec les chemins colorés des cinq a
:
Cas de test 3:
Entrée chaîne: Entrée "only_two_paths?"
caractère:'o'
Sortie:
only_two_paths?
o o
o o
o o
o o
o o
oo
o
oo
o o
o o
o o
o o
o o
o o
only_two_paths?
Voici le même cas de test avec les chemins colorés des deux o
:
Cas de test 4:
Entrée de chaîne: "lollollollollol"
entrée de caractères:'l'
Sortie:
lollollollollol
lll ll ll
ll ll ll
l ll ll ll ll
lll l ll l ll
llllll ll ll
l l ll ll
ll lll ll
l l l lll ll l
ll l ll l l
l l l l llll l
ll lll lll
l l l ll
ll lll lllll
l l l ll l ll
lollollollollol
Voici le même cas de test avec les chemins colorés des dix l
:
Cas de test 5:
Entrée de chaîne: "AbCdEeDcBaAbCdEeDcBa_CCCCC"
entrée de caractères:'C'
Sortie:
AbCdEeDcBaAbCdEeDcBa_CCCCC
C C C C C
C C C C CCC
C C C C C C C
C C C C C C C
C C C C C C C
C C C C C C C
C C C C C C C
C C C CC C C
C C CC C C
C C CC C C
C C CC C
CC CC C C
CC CC C C
C C CC C C
C C CC C C C
C C C C C C
C C CC C C C
C C C C C C C
C C C C C C C
C C C C C CC
C C C C C C
C C C C CCC
C C C CCCC
C C C C
C C CCCCC
AbCdEeDcBaAbCdEeDcBa_CCCCC
Voici le même cas de test avec les chemins colorés des sept C
:
Cas de test 6:
Entrée de chaîne: "XyX"
entrée de caractères:'X'
Sortie:
XyX
XX
X
XyX
Voici le même cas de test avec les chemins colorés des deux X
:
Cas de test 7:
Entrée de chaîne: "aaaa"
entrée de caractères:'a'
Sortie:
aaaa
aa
aaa
aaa
aaaa
Voici le même cas de test avec les chemins colorés des quatre a
:
length(input)
tout correspond à nouveau, mais cela peut être plus tôt, comme le prouve le premier cas de test. Mais il semble que vous ayez bien raison sur le multiple de 3 parties (même si je ne suis pas sûr à 100%).Réponses:
Stax , 24 octets
Exécutez-le et déboguez-le en ligne
Il s'agit de la représentation ascii du même programme.
Il obtient les indices de tous les caractères, puis les mute jusqu'à ce qu'ils soient égaux aux indices d'origine. Pour chaque changement, sortez une chaîne avec le caractère à ces indices.
la source
Perl 5 ,
-plF
10110099989796 octetsRemplacez le
\0
par un littéral 0 octet pour obtenir 96. Notez que le lien Try It Online contient 97 octets car il ne semble pas possible d'y saisir un caractère littéral 0.Le surligneur de golf perl code pense
#
commencer un commentaire. Quelle naïveté 😈Essayez-le en ligne!
Comment ça marche
$l
est un compteur pour quelle ligne après la première nous sommes (il compte cependant, donc par exemple -3 pour 3 lignes en dessous de la chaîne du haut). Après avoir imprimé la chaîne initiale une fois, il fait à plusieurs reprises ce qui suit.Recherchez dans la première chaîne les occurrences du caractère cible et calculez à quel décalage il doit apparaître:
(++$#$l%3*$l-$l+"@-")%@F
quelle est la position actuelle plus le nombre de lignes (négatif) fois-1, 0, 1
(cyclique). Construisez une chaîne avec ce nombre de fois\0
suivi du caractère cible etor
cela dans un accumulateur$$l
(c'est-à-dire un accumulateur différent pour chacun$l
et la raison$l
décompte au lieu d'augmenter, car$1
,$2
etc. sont en lecture seule). Fait simultanément$#$l
référence à un tableau différent à chaque fois dans la boucle. Le résultat est la$l
e ligne mais avec\0
au lieu d'espaces.Les caractères cibles de la première chaîne sont remplacés par de
\0
sorte que vous vous retrouvez avec la chaîne d'origine avec des "trous" (avec\0
) aux positions d'origine du caractère cible. Si vousxor
avec l'accumulateur, les trous sont remplis si et seulement si l'accumulateur a les caractères cibles dans les positions d'origine, le résultat sera donc la chaîne d'origine. Cela est utilisé pour terminer la boucle. Si la boucle n'est pas terminée, imprimez l'accumulateur avec\0
remplacé par l'espace.Lorsque la boucle se termine, l'
-p
option imprime à nouveau la première chaîne et le programme est terminé.Le personnage cible est capté d'une manière assez délicate. Le
${\<>}
convertit une ligne lue depuis STDIN en une référence qui est ensuite immédiatement déréférencée et substituée dans l'expression régulière. Le\Q
préfixe échappe à tous les caractères spéciaux dans une expression régulière (comme.
et*
). Le\E
est implicite. Leo
modificateur fait que la partie de recherche n'est plus jamais évaluée mais simplement répétée dans toutes les correspondances suivantes (ce qui est bien car il n'y a plus rien sur STDIN).la source
Python 2 ,
199193191 191 octetsEssayez-le en ligne!
Si la boucle peut sortir via une exception:
Python 2 , 187 octets
Essayez-le en ligne!
la source
(j[i]-i%3+1)%l
pour deux octets.C (gcc) , 261 octets
Essayez-le en ligne!
la source
JavaScript (Node.js) ,
197194 octetsEssayez-le en ligne!
Prend des entrées dans la syntaxe de curry, c.-à-d
f(s)(c)
.Pas parfait du tout, mais j'ai besoin de JS. Beaucoup de fonctions en fonction.
la source
Rubis ,
18917617115650150146144137octetsEssayez-le en ligne!
la source
Gelée , 33 octets
Essayez-le en ligne!
Appelez en fonction. (lien dyadique)
J'ai trouvé quelques 33 octets alternatives , mais pas d' amélioration réelle.
la source