Un FizzBuzz simple utilisant des chaînes.
Donné
- 1 mot ou expression (chaîne)
- 2 personnages uniques
Production
Le mot ou la phrase avec chaque occurrence du premier caractère remplacé par fizz et chacun du deuxième caractère remplacé par buzz
Règles
- La première lettre de Fizz et Buzz doit rester en majuscule
- Pour le reste des mots fizz et buzz, vous devez faire correspondre la casse du caractère remplacé (si aucun cas, gardez les minuscules)
- Si les caractères donnés ne sont pas dans la phrase, sortez la phrase d'origine
Cas de test
Given: Hello, h, l
Output: FIZZeBuzzBuzzo
Given: test, a, b
Output: test
Given: PCG rocks!, , !
PCGFizzrocksBuzz
Given: This
Is
SPARTA!,
, S
Output: ThiBuzzFizzIBuzzFizzBUZZPARTA!
Given: FizzBuzz, a, b
Output: FizzBUZZuzz
C'est du code-golf donc le code le plus court, en octets, gagne!
Remarque
La gestion technique du boîtier de nouvelle ligne (This Is SPARTA!) Fait partie du défi. Cependant, je n'annulerai pas une réponse pour ne pas l'avoir incluse, car elle est très difficile voire impossible dans certaines langues.
you must match the case of the replaced character
etInput is not case sensitive
semblent se contredire.ThiBuzzFizzIBuzzFizzBUZZPARTA
il manque un dernier point d'exclamation.aa, a, f
? Quelle serait la sortie attendue?BUZZizzBUZZizz
,,FizzFizz
ou les deux autorisés à notre gré?FizzFizz
.Réponses:
Gelée , 34 octets
Essayez-le en ligne!
Comment?
la source
Python 3 ,
180174 174168160152 octetsCeci est juste une version plus golfée de la réponse de Stephen , en Python 3. Cela ébrèche 42% de ses octets. Python 2 économiserait un octet sur l'impression, mais tel est le prix de la progression. Cela gère correctement les retours à la ligne.
Merci à Blckknight pour avoir économisé 8 octets en entrée.
la source
fileinput
servent les modules?from sys import*
ets,a,b=J(stdin).split(', ')
pour enregistrer quelques caractères?Python, 109 octets
Essayez-le en ligne!
Prend les deux caractères comme une seule chaîne
Edit: Ajout d'un cas de test au lien TIO, la nouvelle ligne fonctionne aussi
la source
Python 2 ,
271, 261 octetsEssayez-le en ligne!
Wow celui-ci était un doozie! Il s'avère que python n'acceptera pas les entrées multilignes et
fileinput
doit donc être utilisé.modifier: devrait passer tous les cas maintenant :)
la source
import fileinput as f
...for m in f.input():
MATLAB / Octave ,
106102111 octetsCela pourrait probablement être optimisé davantage.
Il utilise un simple remplacement Regex. Cependant, une étape intermédiaire est requise en remplaçant d'abord les caractères saisis par des nombres. C'est ainsi que si la deuxième lettre de remplacement d'entrée était contenue dans
Fizz
le, elleFizz
n'est pas remplacée lors de la prochaine expression régulière.Cela suppose bien sûr qu'il n'y a pas de chiffres dans l'entrée. Cependant, étant donné que la question dit que l'entrée est un mot ou une phrase, je pense que c'est une hypothèse acceptable.
Le code gérera correctement les nouvelles lignes dans l'entrée.
Vous pouvez l' essayer en ligne!
la source
Bash 4,4 + GNU sed,
70228222227 octetsApparemment,
alias e=echo
jette une erreur si elle est référencée dans Bash 4.3 ou inférieur, la version TIO est apparemment en train d'utiliser. Par conséquent, le code Bash 4.3 plus long et équivalent est donné dans la suite de tests TIO ci-dessous à des fins de test. Cela passe tous les cas de test, donc c'est bien.Essayez-le en ligne!
la source
JavaScript (ES6), 92 octets
Prend l'entrée sous la forme d'une chaîne et d'un tableau de deux caractères. Prend en charge les nouvelles lignes.
Cas de test
Afficher l'extrait de code
la source
Pyth - 25 octets
Suite de tests .
la source
"Hl", Hello
ne met pas correctement la sortie en majuscule et"hL", Hello
ne remplace pas lel
s.GNU sed , 135 + 1 (drapeau r) = 136 octets
Par défaut, un script sed est exécuté autant de fois qu'il y a de lignes d'entrée. Pour gérer l'entrée multi-lignes, j'utilise une boucle pour ajouter toutes les lignes restantes possibles à la première, sans démarrer un nouveau cycle.
Essayez-le en ligne!
Le tableau de remplacement utilisé à la ligne 4 doit être dans cet ordre exact, c'est-à-dire «Fizz» et «Buzz» après leurs formes majuscules. C'est parce que le regex sed
.*
, utilisé lors de la recherche de table, est gourmand. Si le caractère actuel devant être remplacé n'est pas une lettre (pas de casse), alors la chaîne en minuscules est nécessaire (mise en correspondance en dernier).Puisque sed n'a pas de types de données, j'utilise un délimiteur de caractères pour itérer une chaîne. Il marquera ma position actuelle et dans une boucle je la décale de gauche à droite. Heureusement, je peux l'utiliser
,
pour cela, car il s'agit du délimiteur de données d'entrée.Explication:
la source
Haskell, 114 octets
r
prend les caractères fizz et buzz comme une liste de 2 éléments comme premier argument et la chaîne d'entrée comme deuxième argument. Les retours à la ligne et l'unicode doivent être traités de manière appropriée, bien que la fonction ne soit malheureusement pas totale (permettant des entrées non valides enregistrées 5 octets).la source
u=Data.Char.toUpper
ne fonctionne que dans ghci pour autant que je sache. Dans Haskell standard, vous avez besoin duimport
. Cependant, vous devriez pouvoir enregistrer certains octets en utilisant=<<
au lieu deconcatMap
.Mathematica, 94 octets
Fonction anonyme. Prend deux chaînes en entrée et renvoie une fonction qui prend une chaîne en entrée et renvoie une chaîne en sortie en sortie. Il doit être appelé au format
prog["c1", "c2"]["s"]
, où"s"
est la chaîne cible et"c1"
et"c2"
sont les deux caractères. Pourrait probablement être joué plus loin.la source