Einführung
Wir - vor allem die Geeks unter uns, die eher Fans sind - erinnern uns alle an diesen alten Far Side- Cartoon:
Offensichtlich hätte Professor Schwartzman seine Programmierkenntnisse ein wenig auffrischen können, bevor er seine Erfindung in die Tat umsetzte. Aber können Sie es selbst replizieren ... mit so wenig Bytes wie möglich?
Eingangsspezifikationen
Sie müssen ein Skript erstellen, das Hundegeräusche in entsprechend intonierte "Hey" übersetzt. Das ist reines Code-Golf. die niedrigste Anzahl von Bytes gewinnt.
Ihre Eingabe besteht aus einer Kombination der folgenden Token:
Bark
,Baark
,Baaark
,Baaaark
, ... (das heißt,B*rk
mit mindestens 1a
den Stern ersetzt)Woof
,Wooof
,Woooof
, ... (W*f
mit mindestens 2o
s den Stern ersetzt)Grr
,Grrr
,Grrrr
, ..., (G
mindestens gefolgt 2r
s)- Beliebige Anzahl von
.
(Punkt),!
(Ausrufezeichen) und / oder?
(Fragezeichen) Zeichen, die an einer beliebigen Stelle in der Eingabe vorkommen können
Es ist wiederum zu beachten, dass die Tokens Woof
-basiert und Grr
-basiert immer mindestens zwei o
s bzw. r
s erfordern . Wof
und Gr
sind keine gültigen Token.
Es gibt keine Begrenzung für die Länge eines Tokens (z. B. wie viele wiederholte a
s in einem Bark
Token enthalten sein können). jedoch Decoder benötigen nur mit korrekt für die Eingabe - Token arbeiten bis zu 10 Gesamt a
s, o
s oder r
s , diese Herausforderung zu bestehen.
Ausgangsspezifikationen
Getreu dem Entwurf von Schwartzman muss Ihr Hunde-Decoder-Programm diesen wie folgt in Ausgabetext umwandeln:
Bark
,Woof
UndGrr
werdenHey
;Baark
,Wooof
UndGrrr
werdenHeyy
;Baaark
,Woooof
UndGrrrr
werdenHeyyy
; etc.- Für alle
Bark
-basierten Token muss die Anzahl dery
s imHey
ausgabebasierten Token gleich der Anzahl dera
s sein. - Für alle
Woof
-basierten Token muss die Anzahl dery
s imHey
ausgabebasierten Token um eins niedriger sein als die Anzahl dero
s. - Für alle
Grr
-basierten Token muss die Anzahl dery
s imHey
ausgabebasierten Token um eins niedriger sein als die Anzahl derr
s. - Alle Interpunktion (
.
,!
und?
) bleibt unverändert.
Vergessen Sie nicht, einen y
für Woof
s und Grr
s aus der Ausgabe zu entfernen ! Der Eingang Baaaaaaaark?
mit 8 a
s wird Heyyyyyyyy?
mit einem passenden Satz von 8 y
s. Allerdings Woooooooof?
wird nur Heyyyyyyy?
mit 7 y
s.
Wiederum, wenn Sie Ihr Programm für Eingabetoken mit unbegrenzter Größe zum Laufen bringen können, ist das großartig, aber für die Zwecke dieser Herausforderung wird Ihr Programm nur überprüft, um sicherzustellen, dass es für Eingabetoken mit nicht mehr als 10 wiederholten Buchstaben ordnungsgemäß funktioniert .
Es wird davon ausgegangen, dass alle Bark
-, Woof
- und Grr
-basierten Token in Ihrer Eingabe mit Großbuchstaben beginnen. Es ist daher nicht erforderlich , sich um das Drehen Bark grrr
in Hey heyy
oder ähnliches zu kümmern.
Beispiel Ein- und Ausgänge
- Eingang:
Bark. Bark! Bark!!
- Ausgabe:
Hey. Hey! Hey!!
- Eingang:
- Eingabe:
Baaaaaark?
(sechsa
s) - Ausgabe:
Heyyyyyy?
(sechsy
s)
- Eingabe:
- Eingabe:
Grrrrrrrr...
(achtr
s) - Ausgabe:
Heyyyyyyy...
( siebeny
s)
- Eingabe:
- Eingang:
?...!
- Ausgabe:
?...!
- Eingang:
- Eingang:
Wooof Woof? Grrrr. Baaaark Grr!
- Ausgabe:
Heyy Hey? Heyyy. Heyyyy Hey!
- Eingang:
Antworten:
Retina ,
24181716 Bytes1 Byte gespeichert basierend auf einer Idee in der Antwort von MT0.
Probieren Sie es online!
Erläuterung
Das macht einfach alle Buchstaben zu
y
, aber wenn ihnen einf
oder folgt,k
ersetzen wir das auch sofort. Durch Entfernenf
undk
"normalisieren" wir die Länge der Wörter, so dass sie jetzt alle zweiy
s mehr haben, als sie brauchen.Das sind die ersten beiden
y
von jedem Wort zuHe
und vollendet die Transformation.quelle
Perl,
514139 BytesVerwendung
Eingang
Ausgabe
Wie es funktioniert
Einfaches Ersetzen durch reguläre Ausdrücke durch automatisches Drucken,
-p
wobei der Zählung 1 Byte hinzugefügt wird./ge
Führt die Ersetzung für jedes Muster aus und führt die Ersetzung als Code aus.Eine ältere Version verwendete eine Drei-Wege-Erkennung, Martin Ender jedoch bemerkte, dass ich nicht aggressiv genug war, was mir 10 Bytes ersparte.
msh210 hat mich darüber informiert, dass Sie keine Anführungszeichen für die Zeichenfolge benötigen
He
, wodurch zwei Bytes eingespart werden .quelle
He
.Python, 106 Bytes
Demo
https://repl.it/C6Rr
quelle
JavaScript (ES6) -
57555251 BytesPrüfung:
Vielen Dank an @MartinEnder für die Bytes 56 und 51 und die Inspiration für einige der anderen Späne.
quelle
Vimscript,
51393733322928 Bytes,Regex Credits für das Rasieren von 9 weiteren Bytes: MT0, Martin Ender, msh210
Demo
Erläuterung:
quelle
\<yy
stattdessen verwenden\<\hy
?Perl 5, 25 Bytes
Eine Perl-Kopie von Martin Enders Retina-Antwort . 24 Bytes plus 1 für
-pe
statt-e
.quelle
Javascript,
726664 BytesBearbeiten: getrennt
f=
und Funktion + reduzierte Bytezahlquelle
f=
(als Standardeinstellung von PPCG), also funktionieren 64 Bytes.Pyke, 35 Bytes
Probieren Sie es hier aus!
Erzeugt Heys, Interpunktion, Reißverschlüsse zusammen, verbindet
quelle
Python 3,
140135134 BytesVerwenden von Regex, um Vorkommen von ersetzbaren Zeichen zu finden.
Edit: 1 Byte Whitespace und 4 Byte beim Abrufen der Werte aus dem Findall-Ergebnis.
Edit2: Golfed 1 Byte (Bark's "a" wurde nicht richtig gezählt)
quelle