Pourquoi 6 avait peur de 7? Parce que 7 8 9!
Étant donné une chaîne, appliquez les transformations suivantes:
- S'il y a un 6 à côté d'un 7 enlevez le 6 (6 a peur de 7)
- Si la séquence "789" apparaît, retirez le 8 et le 9 (7 a mangé 9)
(Si je ne me trompe pas, l'ordre dans lequel vous effectuez les transformations n'a pas d'importance)
Continuez à appliquer ces transformations jusqu'à ce que vous n'en puissiez plus.
Exemple:
78966
Nous voyons d’abord "789", donc la chaîne devient "766". Ensuite, nous voyons "76", nous retirons donc le 6 et la chaîne devient "76". Ensuite, nous voyons à nouveau "76", il ne nous reste donc que "7".
Cas de test:
987
=>987
(Pas dans le bon ordre. Ne fait rien.)6 7
=>6 7
(Les espaces blancs jouent le rôle de tampon entre 6 et 7. Rien ne se passe)676
=>7
7896789
=>77
7689
=>7
abcd
=>abcd
68978966897896
=>68977
Réponses:
Rétine , 12
Traduction de la réponse sed:
Essayez-le en ligne
la source
Javascript ES6, 29 octets
Tester:
la source
Java,
126816658 octetsMerci à @GamrCorps d'avoir fourni la version lambda de ce code!
Merci à @ user902383 pour avoir signalé une astuce de sélection automatique!
...Ouaip.
C'est en fait plus long que prévu - Java remplace les éléments des chaînes avec
replaceAll()
une correspondance par correspondance, pas de manière répétée jusqu'à ce que les modifications soient arrêtées. J'ai donc dû utiliser une fantaisie pour la boucle.Forme lambda:
Forme de fonction:
Code non-golfable testable:
la source
.equals
à!=
, qui ne fait pas la même chose.==
(ou!=
) compare par l'emplacement hexadécimal de l'objet et non par sa valeur. C'est la même longueur sinon.while()
est 7 octets,for(;;)
est 7 octets.GNU Sed, 17
Le score inclut +1 pour l'
-r
option.la source
67789
devrait revenir,77
mais il revient à la place677
s/67|7(6|89)/7/
au lieu des/6?7(6|89)/7/
s///g
?Perl 6 ,
1918 octets(Notez que
[6|89]
c'est la version sans capture(6|89)
qui est orthographiée comme(?:6|89)
dans Perl 5. Voici<[6|89]>
comment vous écririez ce qui est orthographié comme[6|89]
dans Perl 5)usage:
la source
6*
et le[6|89]*
ne correspondent à rien, qu'est-ce qui empêche d'7
être remplacé à l'7
infini?7
avec7
puis recommence à la position suivante et continue jusqu'à la fin.:g
est court pour:global
pasrepeat until it doesn't match anymore
.s/67|76|789/7/
à travailler,667
je devrais l'écrire comme suit :while s/67|76|789/7/ {}
ce qui, bien sûr, ne s'arrêterait jamais si vous l'écriviezwhile s/6*7[6|89]*/7/ {}
comme vous le souhaitiez. En outre, la fin du commentaire précédent peut sembler de mauvaise humeur , ce n'est pas ainsi qu'il a été conçu[]
en changer()
? Vous ne voulez pas faire correspondre les tuyaux ou79999
.[]
est la version de Perl 6 sans capture()
, ce à quoi vous pensez est orthographié comme<[6|89]>
dans Perl 6.Pyth, 17 octets
Essayez-le ici.
Leaky Nun a dépassé ce chiffre d'un octet dans les commentaires.
la source
Perl 5 , 17 octets
usage:
la source
Mathematica, 52 octets
Explication:
la source
Rouille, 96 octets
Désespérément long, comme d'habitude pour Rust ...
Ungolfed:
la source
Emacs Lisp, 59 octets
Cela devient un peu plus clair avec des espaces:
la source
Ruby, 27 octets
Cette solution est issue de commentaires, crédit à Brad Gilbert b2gills .
Ruby, 37 octets
(ancienne solution)
Cette solution utilise le fait que vous n'aurez jamais besoin de remplacer plus de fois que de caractères dans la chaîne.
la source
chars
au lieu desize.times
pour enregistrer quelques octets.sub()
et desgsub()
méthodes pour remplacer tout ou premier. Donc global est juste un caractère plus long.->s{s.gsub /6*7(6|89)*/,'7'}
et laisseraisgsub
tout le travail en boucle.gsub /6*7(6|89)*/,?7
rendra utilisableruby -pe "gsub /6*7(6|89)*/,?7"
pour un total de 20 + 1 octetsJapt , 15 octets
Solution simple RegEx
Essayez-le en ligne
la source
PowerShell, 27 octets
Faire usage de:
-replace
fait un remplacement global par défaut dans PowerShell-regex
opérateur appliquera l' opérateur au tableau$args
en l'appliquant individuellement à tous les éléments; il n'y a qu'un seul élément ici, car il n'y a qu'un seul paramètre de script. Cela fonctionne donc bien et nous pouvons éviter d'avoir à indexer un élément[0]
.La nouvelle tentative précédente avant de réaliser un remplacement global le ferait; 74 octets de construction d'une chaîne de "-replace -replace -replace" en utilisant la multiplication de chaîne, autant de fois que la longueur de la chaîne, puis en évaluant celle-ci:
(Avec un peu de substitution de chaîne pour réduire le nombre de remplacements).
la source
CJam,
7064 octetsMerci à Peter Taylor pour avoir coupé
{"789":I}{"76:":I}?
à"789""76"?:I
"67":Iq:A{AI#:B){AB<7+A{BI,+}~>+s:A];}{"76"I={"789":I}{"76":I}?];}?}/A"67":Iq:A{AI#:B){AB<7+A{BI,+}~>+s:A];}{"76"I="789""76"?:I];}?}/A
Je sais que cela pourrait probablement être joué beaucoup plus loin et votre aide serait grandement appréciée, mais franchement, je suis simplement heureuse d’avoir réussi à obtenir la réponse. Ce fut ma première tentative d'écriture de CJam.
Explication:
la source
/
et*
. Notez également que penser en termes de pile quand on est habitué aux langages de type C demande une certaine adaptation. Par exemple,{"789":I}{"76":I}?
peut retirer la tâche à accomplir"789""76"?:I
, ce qui peut encore être joué78976`3/?:I
.78976`3/
donne un tableau["789" "76"]
; alors plutôt que d’utiliser?
vous auriez besoin d’utiliser=
pour indexer; mais comme il est orienté vers le haut, il faudrait donc que l’index soit inversé pour perdre l’avantage.MATL , 17 octets
Exemple
EDIT : Essayez-le en ligne!
Explication
Cela fonctionne en appliquant un remplacement d'expression régulier autant de fois qu'il y a de caractères dans la chaîne d'origine . Cela suffit, car chaque substitution réduit le nombre de caractères.
la source
Sérieusement, 29 octets
Prend les entrées sous forme de chaîne entre guillemets, comme
"6789"
. Essayez-le en ligne (vous aurez besoin de citer manuellement l'entrée).Explication:
la source
Jeudi , 26 octets
y compris une fin de ligne.
L'entrée est ajoutée au programme avant de le démarrer.
La sortie est lue dans l'état du programme quand il se termine, de la même manière qu'une machine de Turing.
(Thue fait avoir un flux de sortie, mais il est difficile d'utiliser correctement, donc je ne suis pas sûr que ce soit une méthode de sortie acceptable)
la source
Bash,
1028267 (+7)? octetsversion extglob
Ceci est destiné à être placé dans un fichier et appelé avec par exemple
bash -O extglob 789.sh 6567678989689789656
. Le (+7)? octets est pour si l'option extglob compte pour les octets.Merci à @BinaryZebra pour avoir signalé les fonctionnalités d'extglob!
Version non-extglob (82 octets)
Ceci est destiné à être placé dans un fichier et appelé avec par exemple
./789.sh 65678989656
.Il utilise l'expansion des paramètres pour rechercher et remplacer dans une boucle. J'ai eu recours à une série d'expansions pour effectuer le remplacement car je ne connaissais pas le moyen de chaîner plus efficacement les expansions.
la source
@()
syntaxe. Je savais qu'il devait y avoir un moyen de les combiner. Et @ Mego, merci pour l'accueil!R, 35 octets
Je ne savais pas que je pourrais utiliser
gsub
cette façon, un grand merci pour chaque réponse ici qui m'a fait apprendre quelque chose de nouveau.la source
PHP 51 caractères
Cas de test écrit à la main
Cela fait la comparaison de chaîne et la chaîne remplace les deux dans la condition while. Si tant que la condition est remplie, la main gauche de la comparaison est mise à jour avec le résultat. Faites-moi savoir de toutes les améliorations.
la source
Jolf , 15 octets
Essayez-le ici! Dois-je vraiment expliquer?
la source
PHP, 36 octets
solution regex, prend $ une chaîne et remplace via l'expression.
la source
$argv
ou STDIN.Clojure, 71 octets
Clojure n’est pas idéal pour jouer au golf en raison de sa nature verbeuse - mais c’est quand même un exercice intéressant:
Version golfée, utilisant Java interop:
Version non-golfée, utilisant Java interop:
Version "pure Clojure" sans jeu:
la source
/// , 19 octets (non concurrents)
Vous ne pouvez pas réellement entrer d’entrée dans cette langue, l’entrée supposée va donc à la droite du code.
la source
Python 3, 46 octets
la source
Japt v2.0a0, 12 octets
Essayez-le en ligne!
Comment ça fonctionne
String.e
est la fonction de remplacement récursive. Japt 2 a une nouvelle syntaxe regex et l'auto-complétion des parenthèses dans regex, qui enregistre un octet ici. (Dans Japt 1.x, nous devions passer des chaînes à la place des regexes, ce qui était un peu maladroit.)la source
Dyalog APL , 17 octets
'6*
un nombre quelconque de six7
suivi d'un sept(
…)*'
suivi de zéro ou plusieurs séquences de…6|89
un six ou huit-neuf⎕R
R EPlacez que ,'7'
un septla source
05AB1E , 12 octets
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source