Während ich in der Zukunft unterwegs war, bemerkte ich ein lustiges Spiel unter Kindern um 2275. Wenn sie nicht wollen, dass ihre Ur-Ur-Ur-Ur-Großeltern verstehen, was sie sagen, verwenden sie die BIBABOBU-Sprache . Offensichtlich konnte ich mit meinem Gehirn aus der Zeit vor der Cyborg-Zeit auch nichts verstehen und fühlte mich (oder technisch: ich werde mich wirklich dumm fühlen ). Für meinen nächsten Besuch brauche ich also einen Decoder.
BIBABOBU?
Obwohl ASCII schon lange veraltet ist, wird es in der Popkultur von 2275 immer noch häufig verwendet, und diese Sprache basiert darauf.
Ein String ist auf diese Weise BIBABOBU-codiert:
- Konvertieren Sie alle Zeichen in ihre ASCII-Codes.
Nehmen Sie die zweistellige hexadezimale Darstellung jedes Codes und konvertieren Sie sie anhand der folgenden Tabelle:
0: BI 4: BIDI 8: BADI C: BODI 1: BA 5: BIDA 9: BADA D: BODA 2: BO 6: BIDO A: BADO E: BODO 3: BU 7: BIDU B: BADU F: BODU
Beispiel
"Hello!" → 48 65 6C 6C 6F 21 → "BIDIBADI BIDOBIDA BIDOBODI BIDOBODI BIDOBODU BOBA"
Die entsprechenden Eingaben würden jedoch ohne Platz gegeben, um die monotone Intonation nachzuahmen, die Kinder verwenden, um dies ohne Implantate noch schwieriger zu verstehen:
"BIDIBADIBIDOBIDABIDOBODIBIDOBODIBIDOBODUBOBA"
Erläuterungen und Regeln
- Denken Sie daran, dass ich einen Decoder brauche , keinen Encoder.
- Dekodierte Zeichen liegen garantiert im Bereich [32 ... 126] .
- Die Eingabe enthält garantiert eine gerade Anzahl von BIBABOBU-codierten hexadezimalen Ziffern.
- Sie können Eingaben entweder in Klein- oder Großbuchstaben vornehmen. Mischfälle sind nicht zulässig.
- Da Bit-Flips während einer Zeitreise häufig vorkommen, handelt es sich um Code-Golf, um die Risiken zu minimieren.
Testfälle
Hinweis: Zeilenumbrüche werden im Folgenden nur zu Formatierungszwecken verwendet. Du sollst nicht damit umgehen.
Input:
BIDABIDIBIDOBIDABIDUBUBIDUBIDI
Output:
Test
Input:
BIDABIDUBIDOBIDABIDOBODIBIDOBUBIDOBODUBIDOBODABIDOBIDABOBIBIDUBIDIBIDOBODUBOBIBUBOBUBOBUBI
DUBUBIDABOBA
Output:
Welcome to 2275!
Input:
BIDIBADIBIDOBIDABIDOBODIBIDOBODIBIDOBODUBOBODIBOBIBIDABIDIBIDOBADABIDOBODABIDOBIDABOBIBIDA
BIDIBIDUBOBIDOBABIDUBIDOBIDOBIDABIDOBODIBIDOBIDABIDUBOBOBABOBIBIDABADABIDOBODUBIDUBIDABOBI
BIDOBODIBIDOBODUBIDOBODUBIDOBADUBOBIBIDUBUBIDOBODUBOBIBIDOBIDOBIDUBIDABIDOBODOBIDOBODOBIDU
BADABOBA
Output:
Hello, Time Traveler! You look so funny!
Input:
BIDIBABIDOBODOBIDOBIDIBOBIBIDUBADABIDOBODUBIDUBIDABOBIBIDOBIDIBIDOBODUBIDOBODOBOBIDUBIDUBI
DIBOBIBIDUBIDABIDOBODOBIDOBIDIBIDOBIDABIDUBOBIDUBUBIDUBIDIBIDOBABIDOBODOBIDOBIDIBOBIBIDUBI
DUBIDOBADIBIDOBABIDUBIDIBOBIBIDIBADABOBIDUBIDOBODABOBIBIDUBUBIDOBABIDUBADABIDOBADABIDOBODO
BIDOBIDUBOBODIBOBIBIDOBIDIBIDOBODUBOBIBIDUBADABIDOBODUBIDUBIDABUBODUBOBIBIDIBADIBIDOBABOBI
BIDOBADIBIDOBABOBIBIDOBADIBIDOBABOBA
Output:
And you don't understand what I'm saying, do you? Ha ha ha!
quelle
Antworten:
05AB1E ,
363533 Bytes1 Byte dank Mr.Xcoder
gespeichert 2 Byte dank KevinCruijssen gespeichert
Probieren Sie es online! oder als Testsuite
Erläuterung
quelle
'B©¡¦®ì®D…IAO©â'D«‚˜®'U«âJskh2ôJHçJ
funktioniert für 35 Bytes.©
. Danke :)'B
nachć
und Entfernen nach ändern¦
, da die Eingabe immer mit einem 'B' beginnt.ć
. Vielen Dank!Jelly ,
26242322201715 BytesProbieren Sie es online!
Wie es funktioniert
quelle
Perl 6 , 58 Bytes
Probieren Sie es online!
Stark von Dennis 'Jelly-Lösung inspiriert. Verwendet eine andere Magic-Funktion,
x³ % 87 % 4
die auch die ASCII-Codes vonIAOUBD
zuordnet012302
.Alternative
7574 Bytes Version-1 Byte danke an Jo King
Probieren Sie es online!
Alternative 85-Byte-Version
Probieren Sie es online!
quelle
(^16)>>.base(16)
-1 BytePython 2 ,
100979695 Bytes-1 Byte dank ovs
-1 Byte dank GB
Probieren Sie es online!
quelle
Perl 5 -p, 67 Bytes
Probieren Sie es online!
quelle
05AB1E (Legacy),
68656059 BytesDie Eingabe erfolgt in Kleinbuchstaben.
-3 Bytes implizit dank der Änderung von @Emigna
'b¡εg>}s£
zu'b©¡®ì
.Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Auch kann definitiv mit etwas schlauerem als den riesigen komprimierten Saiten gespielt werden. Werde später noch einen Blick darauf werfen.Kürzere Antwort bereits von @Emigna zur Verfügung gestellt , stellen Sie also sicher, ihn zu stimmen!Erläuterung:
quelle
Perl 6 ,
88 8684 BytesProbieren Sie es online!
quelle
R ,
141135 BytesProbieren Sie es online!
Vielen Dank an JayCe für das Speichern von 6 Bytes!
Die Verwendung von Modular Magic ist wahrscheinlich kürzer, aber ich bin ziemlich zufrieden mit diesem naiven ersten Durchgang.
quelle
%*%
ich es mit Vorrang benutze, sehe ich. :-) Sie können auch`:`
als Funktionsargument angeben, falls Sie dies zusammen mit etwas anderem verwenden möchten!Japt,
432928 BytesEs überrascht nicht, dass ein Port von Dennis 'Jelly-Lösung viel kürzer ausfällt.
Gibt ein Array von Zeichen aus.
Versuch es
Original, 42 Bytes
Versuch es
Erläuterung
quelle
C (gcc) ,
181138136 BytesHoffentlich gibt es in Zukunft einen C-Compiler, der dies kompiliert! :-)
Vielen Dank an Max Yekhlakov und ceilingcat für die Vorschläge.
Probieren Sie es online!
Falls der C-Compiler der Zukunft nur noch BIBABOBU-konformes ASCII versteht :-)
(Encoder Online ausprobieren ! )
quelle
c=printf(&v),v=0
stattdessen vorv=!putchar(v),c=1
JavaScript (Node.js) ,
131128 ByteProbieren Sie es online! Link enthält Testfälle. Alternative Version, auch 131 Bytes:
Probieren Sie es online! Link enthält Testfälle. Bearbeiten: Spart 3 Bytes dank @Shaggy.
quelle
unescape()
ist eine schöne Idee.indexOf
->search
um ein Byte zu speichern.r
.Bash + gängige Linux-Dienstprogramme, 75 Byte
Probieren Sie es online!
quelle
Scala , 305 Bytes
Nun, ich bin mir ziemlich sicher, dass man damit Golf spielen kann. Aber es existiert immer noch. Übernimmt die Eingabe in Kleinbuchstaben.
f
druckt das Ergebnis in stdout aus.EDIT: -8 Zeichen, da ich nicht mehr stumm bin (Leerzeichen); -13 Zeichen dank crater2150
Probieren Sie es online!
quelle
dropRight(1)
mitinit
,Seq("").drop(1)
mitSeq[String]()
undmap(b=>a+b)
mit ersetzenmap(a+_)
map(a+_)
arbeiten, aber ich wusste, dass ich das tun konnte. danke für andere tipps!Python 2 ,
142139127118 BytesProbieren Sie es online!
quelle
Python 2 , 93 Bytes
Probieren Sie es online!
quelle
Ruby ,
8675 BytesProbieren Sie es online!
quelle
Dyalog APL,
7472 BytesAnfänger-Level-Lösung in Dyalog APL (habe vor ein paar Tagen angefangen, dies zu lernen!). Definiert eine dfn, die ein rechtes Argument (die Eingabe) akzeptiert. 72 Zeichen, 72 Bytes bei Verwendung der Dyalog-Codierung. Basierend auf Emignas Lösung in 05AB1E.
quelle
Jelly , 39 Bytes
Probieren Sie es online!
Die verwendete Technik ist der von Emigna sehr ähnlich . Ich werde das hoffentlich bald weiter spielen.
quelle
Brain-Flak , 178 Bytes
Probieren Sie es online!
Erläuterung
quelle
05AB1E , 30 Bytes
Port of @Dennis 'verrückte Jelly-Antwort (nur mit weniger praktischen eingebauten). Stellen Sie also sicher, dass Sie ihn unterstützen!
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Java (JDK 10) , 199 Byte
Probieren Sie es online!
Credits
quelle
-~d
anstelle von verwenden(d+1)
?char
stattdessen s zu verwenden, und als ich zu meiner ersten Version zurückkam, vergaß ich es total wieder. ;)VBA (Excel) mit erstaunlichen
322244 BytesJa, und ich LIEBE hexadezimal. (Es gibt noch keine Sarkasmus-Schrift, daher verwende ich jetzt Kursivschrift.)
Ich werde Kommentare hinzufügen, wenn jemand dies wünscht, aber ich denke, es ist selbsterklärend.Golfen ist passiert.Mit Kommentaren:
Ich habe wirklich versucht, dies in das VB-Direktfenster zu bringen, aber es scheint dort nicht zu funktionieren ... das würde meiner Meinung nach 11 Zeichen schneiden. Ich wollte auch die Match-Anweisung in Klammern setzen, aber das verursacht jedes Mal einen stillen Fehler. Hilfe wird geschätzt: D
quelle
Array("I","A","O","U","II","IA","IO","IU","AI","AA","AO","AU","IO","OA","OO","OU")
->Split("I A O U II IA IO IU AI AA AO AU IO OA OO OU")
undNot IsError(c)
->IsError(c)=0
Haxe , 228 Bytes
Nicht die besten, Standard-Bibliotheksfunktionsnamen sind zu groß :(
Probieren Sie es online!
quelle
Pyth, 35 Bytes
Ausgabe als Liste von Zeichen.
Probieren Sie es hier aus
Erläuterung
quelle
Kohle , 36 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Durchlaufen Sie jedes eingegebene Zeichen und wechseln Sie.
Wenn es ein ist,
B
dann drücke0
auf die vordefinierte leere Liste.Wenn es sich um ein
D
Popup handelt, erhöhen Sie den letzten Wert, multiplizieren Sie ihn mit4
und drücken Sie ihn erneut.Suchen Sie andernfalls den Index in der Zeichenfolge
AOU
, erhöhen Sie ihn und fügen Sie ihn zum letzten Wert hinzu.Teilen Sie die Liste in Wertepaare auf, dekodieren Sie sie als Basis 16, konvertieren Sie sie in ASCII und drucken Sie sie implizit.
quelle
Sauber ,
145134 BytesProbieren Sie es online!
Erklärt:
quelle
PHP, 119 Bytes
setzt die Eingabe in Großbuchstaben voraus. Laufen Sie als Pipe mit
-nR
oder versuchen Sie es online .erfordert PHP 7.1
für älteres PHP, benutze
substr($m,-3,1)
undsubstr($m,-1)
anstelle von$m[-<x>]
(+16 Bytes);für jüngere PHP, setzen
B
,XIAO
undIAOU
in Anführungszeichen Warnmeldungen (10 Bytes) zu vermeiden.quelle
05AB1E , 40 Bytes
Probieren Sie es online!
quelle
PHP, 163 Bytes
Rufen Sie
f(string $s)
mit der entsprechenden Zeichenfolge bibabobu-codierter Zeichen auf, und es wird die decodierte Zeichenfolge gedruckt.quelle
Python 3, 199 Bytes
Nicht die kürzeste, aber ohne Schleifen.
quelle