Konzept
Sich an Zahlen zu erinnern kann schwierig sein. Das Erinnern an ein Wort kann einfacher sein. Um große Zahlen auswendig zu lernen, habe ich eine Art und Weise entwickelt, wie man sie leetsprachig ausspricht.
Regeln
Jede Ziffer wird zuerst durch den entsprechenden Buchstaben ersetzt:
0 => O
1 => I
2 => R
3 => E
4 => A
5 => S
6 => G
7 => T
8 => B
9 => P
Nach dem Ersetzen werden zwei zusätzliche Schritte ausgeführt, um die Aussprache zu verbessern:
Zwischen zwei Konsonanten wird a
U
hinzugefügt.Zwischen zwei Vokalen wird a
N
hinzugefügt.
Beispiele / Testfälle
512431 => SIRANENI
834677081 => BENAGUTUTOBI
3141592 => ENINANISUPUR
1234567890 => IRENASUGUTUBUPO
6164817 => GIGABIT
Was ist unmöglich
- Buchstaben und Zahlen in einem Wort gemischt
- Zwei aufeinanderfolgende Konsonanten oder zwei aufeinanderfolgende Vokale
- Buchstaben, die nicht in der obigen Liste enthalten sind
- Andere Charaktere
Regeln
Das Ziel dieses Code-Golfs ist es, einen Zwei-Wege-Übersetzer für dieses Konzept zu erstellen.
- Ihr Programm muss zunächst von selbst verstehen, ob es sich um eine Buchstaben-zu-Zahlen- oder eine Zahlen-zu-Buchstaben-Übersetzung handelt.
- Es muss überprüft werden, ob der Eintrag ordnungsgemäß erstellt wurde.
- Wenn alles korrekt ist, zeigen Sie die Übersetzung an.
- Anderenfalls wird eine Fehlermeldung angezeigt, nichts, ein falscher Wert wird zurückgegeben oder das Programm stürzt ab.
Einzelheiten
- Die eingegebene Nummer / Zeichenkette kann in einem beliebigen Format eingegeben werden (stdin, argument, ...)
- Das ist Code-Golf , also gewinnt die kürzeste Antwort.
- Standardlücken sind verboten.
GIGATESTER
seinGIGATESUTER
?AB23
.AEI
;BB
;Z
;ACE
;giga
;!@#$
;-123
; usw. Basierend auf den Validierungsregeln können wir auch konvertieren6164735732 => GIGATESTER
, führen aberGIGATESTER
aufgrund vonST
(Regel mit zwei aufeinanderfolgenden Konsonanten) zu einem falschen Wert . Die Art und Weise, wie Ihre Herausforderung derzeit eingerichtet ist, ist der Hauptteil der Herausforderung die Validierung anstelle der Konvertierung. Ich bin damit einverstanden, aber die Validierung sollte in diesem Fall etwas besser definiert werden.Antworten:
JavaScript (ES6), 130 Byte
Übernimmt die Eingabe in beiden Übersetzungsarten als Zeichenfolge. Gibt entweder die Übersetzung als String oder
false
im Falle einer ungültigen Eingabe zurück.Demo
Code-Snippet anzeigen
quelle
Japt ,
6159928584 BytesÜbernimmt die Eingabe als Zeichenfolge für beide Operationen und gibt eine Zeichenfolge für beide Operationen oder
false
für ungültige Eingaben zurück. Angenommen, die Zahleneingaben enthalten immer mehrere Ziffern. Fügen Sie 1 Byte hinzu und ersetzen Sie dieseUÉ
durch,Un<space>
wenn dies nicht gültig ist. Gibtfalse
für den Testfall zurück,GIGATESTER
aber gemäß den Regeln sollte dies eine ungültige Eingabe sein.Probieren Sie es aus: Zahlen -> Buchstaben oder Buchstaben -> Zahlen
24 Bytes gespart dank obarakon , der mich auch überzeugt hat, dies wieder aufzunehmen, nachdem ich es früher aufgegeben habe. Ich wünschte, er hätte nicht!332625 (!) Bytes wurden geopfert, um eine schnelle Lösung zu implementieren (dh noch nicht vollständig ausgereift), um die Gültigkeit der Eingabe zu überprüfen.Erläuterung
(Muss noch auf die neueste Version aktualisiert werden)
quelle
AEI
Python 3 , 147 Bytes
Probieren Sie es online!
quelle
Java (OpenJDK 8) ,
416410399382376370 Bytes-2 Bytes dank @Cyoce
-17 weitere Bytes dank einer Idee von @Cyoce
-6 Bytes dank @KevinCruijssen
Probieren Sie es online!
Ugh, Java-Ersatz ist so ausführlich.
Funktion, die eine Zeichenfolge akzeptiert und die von Zahl -> Buchstabe übersetzte Zeichenfolge zurückgibt oder umgekehrt. Abstürze bei ungültiger Eingabe (Sie können dies im Beispiel tio sehen, in dem die korrekten Werte für die ersten 10 Testfälle ausgegeben werden und dann mit einem Fehler durch Teilen durch Null abstürzt, der in der Debug-Ansicht angezeigt wird.)
Ungolfed (der erste und der letzte Term der for-Schleife werden zur besseren Lesbarkeit herausgezogen)
Der reguläre Ausdruck zum Abgleichen der Zahlen ist einfach, aber hier ist der reguläre Ausdruck zum Abgleichen der Buchstaben in Groß- und Kleinschreibung
quelle
(s)->
if
Anweisung um Zuweisungen handelt (die einen Wert zurückgeben), ersetzen Sie den Operatorif
...else if
...else
durch den bedingten Operator?:
und stellen SieObject _=
ihm ein gültiges Statement voran . Ich bin mir nicht sicher, ob dies der Byte-Zählung tatsächlich helfen würde, aber ich denke, das wird es.t
, da Sie ihn nur einmal verwenden. Sot.charAt(i)+""
wird"OIREASGTBP".charAt(i)+""
( -4 Bytes ). Und Sie können die letzte Zeile innerhalb der for-Schleife nachi<9;
der for-Schleifendeklaration einfügen. So wird esfor(;i<9;s=b?s.replace(v,c):s.replace(c,v)){
( -1 Byte ). Oh, und Sie können dass=b?...
, was direkt nach dem kommt, auchint i=-1;
in die for-Schleife einfügen:for(s=b?...;i<9;...
( -1 Byte ).PHP;
129 127 267 259228 BytesLauf als Pipe mit
-nR
oder versuche es online .Nervenzusammenbruch
quelle
Java 8,
312308304301294290 Bytes-4 Bytes (308 → 304) für eine Fehlerbehebung (kommt nicht oft vor, dass die Byteanzahl abnimmt, wenn ich einen Fehler in meinem Code behebe ..: D)
BEARBEITEN: Verwendet einen anderen Ansatz als die Java-Antwort von @ PunPun1000, indem zuerst der Rückgabestring in einer for-Schleife über den Zeichen erstellt wird und dann ein abstrakterer regulärer Ausdruck verwendet wird, um ihn im Rückgabeternär zu validieren (die Eingabe besteht entweder aus allen Ziffern, oder wechseln sich die gegebenen Vokale und Konsonanten ab (also ohne benachbarte Vokale oder Konsonanten).
Erläuterung:
Probieren Sie es hier aus.
Der Validierungs-Regex:
quelle
05AB1E , 76 Bytes
Probieren Sie es online!
Gibt den falschen Wert
0
für eine ungültige Eingabe zurück.quelle
Bash ,
241 238235 BytesProbieren Sie es online!
Weniger golfen:
quelle
PHP, 268 Bytes
Probieren Sie es online!
quelle
Perl, 127 Bytes
126 Byte + 1 Byte Befehlszeile
Verwendung:
Sollte alle Herausforderungsregeln befolgen - kann Buchstaben oder Zahlen akzeptieren und wird Fehler (Division durch Null), wenn die Validierung fehlschlägt
quelle
NO
und falsch positive ErgebnisseUS
.Rubin , 205 + 1 = 206 Bytes
Verwendet das
-p
Flag für +1 Byte. Jetzt mit einem umfassenden Eingabevalidierungssystem.Probieren Sie es online!
quelle
Python 3, 741 Bytes
Probieren Sie es online!
Ich weiß, es gibt viel Raum für Verbesserungen.
quelle
sed, 123 bytes
Erläuterung
Zuerst umgeben wir Ziffern mit
_
(für Vokale) oder=
(für Konsonanten).Wenn wir keine Ersetzungen vorgenommen haben, konvertieren wir Buchstaben in Ziffern. Es handelt sich also um eine einfache Ersetzung, und löschen
U
undN
. Dann hör auf.Ansonsten verzweigen wir zu label
a
, wo wir uns mit aufeinanderfolgenden Vokalen und dann aufeinanderfolgenden Konsonanten befassen. Wandeln Sie dann die Ziffern in Buchstaben um und löschen Sie die im ersten Schritt eingegebenen Markierungszeichen.quelle
Python3, 246 Bytes
Erläuterung:
Dict-Tupels plus des aktuellen ElementsDict-Tupel ist eine Wahrheitstabelle, die auf zwei Elementen basiert: Vokal oder nichtquelle
JavaScript (ES6), 120
Eine Funktion, die Eingaben als Zeichenfolge akzeptiert. Es gibt den korrekt übersetzten String zurück, wenn die Eingabe gültig ist, andernfalls false oder die Funktion abstürzt.
Weniger golfen
Prüfung
quelle