Ein einfacher FizzBuzz mit Strings.
Gegeben
- 1 Wort oder Satz (Zeichenfolge)
- 2 einzigartige Charaktere
Ausgabe
Das Wort oder die Phrase, bei der jedes Vorkommen des ersten Zeichens durch Fizz und jedes des zweiten Zeichens durch Buzz ersetzt wird
Regeln
- Der erste Buchstabe in Fizz und Buzz muss groß geschrieben bleiben
- Für den Rest der Wörter "Fizz" und "Buzz" müssen Sie die Groß- und Kleinschreibung des ersetzten Zeichens berücksichtigen.
- Wenn die angegebenen Zeichen nicht in der Phrase enthalten sind, geben Sie die ursprüngliche Phrase aus
Testfälle
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
Das ist Code-Golf, also gewinnt der kürzeste Code in Bytes!
Hinweis
Die technische Abwicklung des Newline-Falls (This Is SPARTA!) Ist Teil der Herausforderung. Ich werde jedoch keine Antwort für ungültig erklären, da dies in einigen Sprachen sehr herausfordernd oder sogar unmöglich ist.
you must match the case of the replaced character
undInput is not case sensitive
scheinen sich zu widersprechen.ThiBuzzFizzIBuzzFizzBUZZPARTA
fehlt ein abschließendes Ausrufezeichen.aa, a, f
? Was wäre der erwartete Output?BUZZizzBUZZizz
,,FizzFizz
oder beides nach unserer Wahl erlaubt?FizzFizz
.Antworten:
Jelly , 34 Bytes
Probieren Sie es online!
Wie?
quelle
Python 3 ,
180174168160152 BytesDies ist nur eine gelungenere Version von Stephens Antwort in Python 3. Dadurch werden 42% seiner Bytes entfernt. Python 2 würde ein Byte im Druck sparen, aber das ist der Preis für den Fortschritt. Dies behandelt Zeilenumbrüche richtig.
Vielen Dank an Blckknight für das Speichern von 8 Bytes bei der Eingabe.
quelle
fileinput
Module verwendet?from sys import*
unds,a,b=J(stdin).split(', ')
ein paar Zeichen zu speichern?Python, 109 Bytes
Probieren Sie es online!
Nimmt die beiden Zeichen als einzelne Zeichenfolge
Bearbeiten: Testfall zu TIO-Link hinzugefügt, Newline funktioniert auch
quelle
Python 2 ,
271, 261 BytesProbieren Sie es online!
Wow, das war ein Trottel! Es stellt sich heraus, dass Python keine mehrzeiligen Eingaben akzeptiert und daher
fileinput
verwendet werden muss.edit: sollte jetzt alle fälle bestehen :)
quelle
import fileinput as f
...for m in f.input():
MATLAB / Octave ,
106102111 BytesDies könnte wahrscheinlich weiter optimiert werden.
Es wird ein einfacher Regex-Ersatz verwendet. Ein Zwischenschritt ist jedoch erforderlich, indem die eingegebenen Zeichen zuerst durch Zahlen ersetzt werden. Dies ist so, dass, wenn die zweite Eingabe einen Ersetzungsbuchstaben enthielt
Fizz
, derFizz
nicht dann ersetzt werden , wenn die nächsten regex durchgeführt wird.Dies setzt natürlich voraus, dass die Eingabe keine Zahlen enthält. In Anbetracht der Frage, dass die Eingabe ein Wort oder eine Phrase ist, halte ich dies für eine akzeptable Annahme.
Der Code behandelt neue Zeilen in der Eingabe korrekt.
Sie können es online ausprobieren!
quelle
Bash 4.4 + GNU sed,
70228222227 BytesOffenbar
alias e=echo
ein Fehler ausgelöst, wenn in Bash 4.3 oder niedriger verwiesen wird, der anscheinend von der Version TIO verwendet wird. Aus diesem Grund wird der längere und äquivalente Bash 4.3-Code in der folgenden TIO-Testsuite zum Testen angegeben. Damit sind alle Testfälle bestanden, das ist schön.Probieren Sie es online!
quelle
JavaScript (ES6), 92 Byte
Übernimmt die Eingabe als Zeichenfolge und als Array mit zwei Zeichen. Unterstützt Zeilenumbrüche.
Testfälle
Code-Snippet anzeigen
quelle
Pyth - 25 Bytes
Test Suite .
quelle
"Hl", Hello
aktiviert die Ausgabe nicht richtig und ersetzt"hL", Hello
nicht dasl
s.GNU sed , 135 + 1 (r Flag) = 136 Bytes
Standardmäßig wird ein sed-Skript so oft ausgeführt, wie Eingabezeilen vorhanden sind. Um die mehrzeilige Eingabe zu handhaben, setze ich eine Schleife ein, um alle möglichen verbleibenden Zeilen an die erste anzuhängen, ohne einen neuen Zyklus zu starten.
Probieren Sie es online!
Die in Zeile 4 verwendete Ersetzungstabelle muss genau in dieser Reihenfolge vorliegen, dh "Fizz" und "Buzz" nach ihren Großbuchstaben. Das liegt am sed regex
.*
, dass der bei der Tabellensuche verwendete gierig ist. Wenn das aktuelle Zeichen, das ersetzt werden muss, kein Buchstabe ist (keine Groß- / Kleinschreibung), wird die Zeichenfolge in Kleinbuchstaben benötigt (zuletzt abgeglichen).Da sed keine Datentypen hat, verwende ich ein Zeichentrennzeichen, um eine Zeichenfolge zu iterieren. Es markiert meine aktuelle Position und ich verschiebe sie in einer Schleife von links nach rechts. Zum Glück kann ich
,
dafür verwenden, da es das Eingabedaten-Trennzeichen ist.Erläuterung:
quelle
Haskell, 114 Bytes
r
Nimmt die Fizz- und Buzz-Zeichen als 2-Element-Liste als erstes Argument und die Eingabezeichenfolge als zweites Argument. Zeilenumbrüche und Unicode sollten angemessen behandelt werden, obwohl die Funktion leider nicht vollständig ist (bei ungültigen Eingaben werden 5 Byte gespart).quelle
u=Data.Char.toUpper
funktioniert meines wissens nur in ghci. In Standard Haskell benötigen Sie dieimport
. Sie sollten jedoch in der Lage sein, einige Bytes zu speichern, indem Sie=<<
anstelle von verwendenconcatMap
.Mathematica, 94 Bytes
Anonyme Funktion. Nimmt zwei Zeichenfolgen als Eingabe und gibt eine Funktion zurück, die eine Zeichenfolge als Eingabe und eine Zeichenfolge als Ausgabe als Ausgabe verwendet. Es muss im Format aufgerufen werden
prog["c1", "c2"]["s"]
, wo"s"
die Zielzeichenfolge ist und"c1"
und"c2"
sind die beiden Charaktere. Könnte wahrscheinlich weiter golfen werden.quelle