Es gibt ein kleines Improvisations-Aufwärmspiel, in dem Sie sich in einem Kreis anordnen und Reißverschlüsse, Zaps und Zops versenden, indem Sie auf eine Person zeigen und das nächste Wort in der Sequenz sagen wie auch immer.
Ihre Aufgabe ist es, ein Programm zu erstellen, das bei einem eingegebenen Wort das nächste Wort der Reihe nach ausgibt. (Zip -> Zap -> Zop -> Zip) Da es viele verschiedene Möglichkeiten gibt, diese drei Wörter und Flairs auszudrücken, die hinzugefügt werden können, sollte Ihr Programm die Vervielfältigung von Groß- und Kleinschreibung imitieren und Suffixe tragen.
Um dies zu erläutern, geben Sie ein oder mehrere Z
s, dann ein oder mehrere I
s, A
s oder O
s (alle gleichen Buchstaben), dann ein oder mehrere P
s (alle Buchstaben bis zu diesem Punkt können in gemischter Schreibweise geschrieben sein) ein, gefolgt von ein beliebiges Suffix (das leer sein kann). Sie sollten die Läufe von Z
s und P
s sowie das Suffix genau so belassen, wie sie erhalten wurden, aber dann das I
s in A
s, A
s in O
s oder O
s in I
s ändern , um die Groß- und Kleinschreibung bei jedem Schritt beizubehalten.
Beispiel Testfälle
zip ==> zap
zAp ==> zOp
ZOP ==> ZIP
ZiiP ==> ZaaP
ZZaapp ==> ZZoopp
zzzzOoOPppP ==> zzzzIiIPppP
Zipperoni ==> Zapperoni
ZAPsky ==> ZOPsky
ZoPtOn ==> ZiPtOn
zipzip ==> zapzip
zapzopzip ==> zopzopzip
zoopzaap ==> ziipzaap
Regeln und Hinweise
- Sie können für die Eingabe und Ausgabe eine beliebige bequeme Zeichenkodierung verwenden, sofern diese alle ASCII-Buchstaben unterstützt und vor dieser Herausforderung erstellt wurde.
- Sie können annehmen, dass das Eingabewort eine Variante von Zip, Zap oder Zop ist. Alle anderen Eingaben führen zu undefiniertem Verhalten.
- Gültige Eingaben stimmen mit dem regulären Ausdruck überein
Z+(I+|A+|O+)P+.*
(in gemischten Fällen)
- Gültige Eingaben stimmen mit dem regulären Ausdruck überein
Viel Spaß beim Golfen!
z
und dem erstenp
. Das Suffix kann alles enthalten.Antworten:
JavaScript (Node.js) ,
69 63 5754 ByteProbieren Sie es online!
Wie?
Wir verarbeiten den eingegebenen Strings .
Wir verwendens als Flag: Sobald ein numerischer Wert darin gespeichert ist, wissen wir, dass wir nichts anderes aktualisieren dürfen.
Zur Identifizierung4 und die ASCII - Codes der anderen Buchstaben am Anfang des Strings (
"p"
(112) und"P"
(80), verwenden wir die Tatsache , dass ihre ASCII - Codes sind ein Vielfaches von"z"
,"Z"
und Vokale) nicht.Um einen Vokal mit ASCII - Code zu drehenc in sein Gegenstück n während verlassen
z
undZ
unverändert verwenden wir die folgende Funktion:Kommentiert
quelle
C (gcc) ,
81 ... 61 4846 Bytes2 Bytes dank @Grimy gespart
Port meiner JS Antwort . Ausgabe durch Ändern der Eingabezeichenfolge.
Probieren Sie es online!
Kommentiert
quelle
*++s%4
Irgendwann habe ich es versucht , aber die daraus resultierende Optimierung übersehen ...)Stax , 19 Bytes
Führen Sie es aus und debuggen Sie es
quelle
Retina 0.8.2 , 21 Bytes
Probieren Sie es online! Transkription von Briefen bis einschließlich der ersten
p
, obwohl die Buchstabenz
undp
nicht im Transkriptionsabschnitt enthalten sind und daher nicht betroffen sind. Das ersteO
wird zitiert, weil es sich normalerweise ausdehnt,13567
und das zweiteo
wird zitiert, weil es ebenfalls magisch ist; Im ersten Teil der Transliteration wird sie auf die andere Zeichenfolge erweitert. Die resultierende Umschrift ist daher aus ,IAOIiaoi
umAOIiaoi
dann in die doppelten Quelle Buchstaben Ergebnisse EntfernungIAOiao
zuAOIaoi
.quelle
C 43 Bytes
Probieren Sie es online!
Basierend auf Arnauld's Antwort . Ich habe eine Brute-Force-Suche durchgeführt, um die kürzeste Formel zu finden, die a => o, o => i, i => a, z => z ergibt.
quelle
Japt ,
2220 Bytes-2 Bytes danke an Oliver
Probieren Sie es online!
quelle
R ,
11076 Byte-36 Bytes dank Krill
Diese Funktion nimmt eine Eingabe von einer Zeichenkette entgegen.
Probieren Sie es online!
quelle
s
zu übersetzende Teilzeichenfolge extrahieren und diese dann durch eine übersetzte Kopie ersetzen: 76 BytesPerl 6 ,
4133 BytesProbieren Sie es online!
Einfache Substitution ohne Berücksichtigung der Groß- und Kleinschreibung, um den Vokalabschnitt zu verschieben.
quelle
Python 3.8 (Vorabversion) ,
81 bis78 ByteProbieren Sie es online!
Python 2 , 98 Bytes
Probieren Sie es online!
quelle
Java (JDK) , 52 Byte
Probieren Sie es online!
quelle
s->{for(int i=0;s[++i]%4>0;)s[i]^=s[i]%16*36%98%22;}
52 Bytes .Perl 5, 31 Bytes
TIO
quelle
SNOBOL4 (CSNOBOL4) , 183 Bytes
Probieren Sie es online!
quelle
Python 2 , 84 Bytes
Probieren Sie es online!
quelle
C # (Visual C # Interactive Compiler) , 60 Byte
Basierend auf Grimys C-Antwort.
Probieren Sie es online!
quelle
aoi
-Vokale und nicht nur die vor dem erstenp
/P
. Eine Sache zum Golfen("iao".IndexOf((char)(c|32))+1)%4
kann jedoch sein-~"iao".IndexOf((char)(c|32))%4
C / C ++ (VC ++ - Compiler) 192 Byte
dies ist aber trotzdem ein eher naiver versuch
Eine etwas besser lesbare Version ist diese
quelle
Ruby , 40 Bytes
Probieren Sie es online!
quelle
05AB1E (Legacy) , 22 Byte
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Kann auf jeden Fall ein bisschen mehr golfen werden ..
Verwendet die Vorgängerversion von 05AB1E anstelle des Umschreibens von Elixir, da
+
Felder in Listen gleicher Länge zusammengeführt werden, während die neue Version stattdessen einen Pair-Zip-Join benötigt‚øJ
.Erläuterung:
quelle
PHP, 30 Bytes
zu einfach für ein TiO:
Als Rohr mit laufen lassen
-nF
. Setzen Sie für PHP 7.2 die String-Literale in Anführungszeichen.quelle
oia
Vokale anstatt nur die vor dem erstenp
/P
, nicht wahr?