Hex aussprechen
Für diejenigen unter Ihnen, die noch nicht mit der Show Silicon Valley begonnen haben, ist diese Herausforderung von einem Austausch inspiriert, der wie folgt abläuft ( YouTube ):
Kid -
Here it is: Bit… soup. It’s like alphabet soup, BUT… it’s ones and zeros
instead of letters.
Erlich Bachman -
{silence}
Kid -
‘Cause it’s binary? You know, binary’s just ones and zeroes.
Erlich Bachman -
Yeah, I know what binary is. Jesus Christ, I memorized the hexadecimal
times tables when I was fourteen writing machine code. Okay? Ask me
what nine times F is. It’s fleventy-five. I don’t need you to tell me what binary is.
Es sollte beachtet werden, dass technisch gesehen 0x9 * 0xF = 0x87
nicht "fünfundvierzig", aber dies wirft eine wichtige Frage auf - wie würden Sie Hex im Gespräch tatsächlich aussprechen? Es ist nicht so oh ex eff eff
, als würde die Zunge leicht abfließen. Was sollen wir also tun? Hier ist eine handliche Aussprache-Tabelle, der wir folgen werden.
A = ay A0 = atta-
B = bee B0 = bibbity-
C = cee C0 = city-
D = dee D0 = dickety-
E = ee E0 = ebbity-
F = eff F0 = fleventy-
Wir können eine Hex-Zahl mit 4 Längen in zwei Zweiergruppen aufteilen und die Aussprache aus der obigen Tabelle sowie die gebräuchliche englische Aussprache für Zahlen bestimmen. So 0xFFAB
würden wir zum Beispiel bekommen Fleventy-eff bitey atta-bee
.
Wenn eine Zahl enthalten ist, wie z. B. 0xF5AB
, würden Sie drucken Fleventy-five bitey atta-bee
. Beginnt eine Zahl mit einer der Gruppen, sollten Sie die Aussprache "Zehn" verwenden. Zum Beispiel 0x5FAA
würde werden Fifty-eff bitey atta-ay
. In dem Fall, in dem Sie so etwas haben 0x1FAC
, wäre dies Effteen bitey atta-cee
. Wenn diese Regel jedoch verwendet wird 0x1AF4
, kann a-teen
dies zu Verwechslungen führen eighteen
, sodass Sie ein Y voranstellen müssen. Die richtige Ausgabe wäre alsoYayteen bitey fleventy-four
Im Fall von 0xD0F4
, anstatt das zu tun Dickety-zero bitey fleventy-four
, würden wir die Null und drucken ignorieren Dickety-bitey fleventy-four
.
Bindestriche sollten nur in Zweiergruppen vorkommen, dh Bitey sollte nicht mit einem Bindestrich mit einer der beiden Gruppen verbunden werden, es sei denn, die erste Gruppe besteht nur aus einem Wort! So 0x04F4
wäre es four-bitey fleventy-four
, aber 0x44F4
wäre es forty-four bitey fleventy-four
. Wie Trichoplax sagte, sollte der Biss nur nach einer runden Zahl getrennt werden.
Um einen umfassenden Überblick über die Funktionsweise zu erhalten, sehen Sie sich das folgende Beispiel für E / A an.
Zielsetzung
Erstellen Sie ein Programm oder eine Funktion , die eine hexadezimale Zeichenfolge als Eingabe oder ein Funktionsargument verwendet, und erstellen Sie die Aussprache. Die Ausgabe muss eine ordnungsgemäße Groß- und Kleinschreibung aufweisen. Sie können davon ausgehen, dass die Länge dieser Nummer immer 4 ist.
Beispiel I / O
"0xFFFF" -> "Fleventy-eff bitey fleventy-eff"
"0x0000" -> "Zero"
"0x0010" -> "Ten"
"0x0100" -> "One-bitey zero"
"0x1110" -> "Eleven-bitey ten"
"0xBEEF" -> "Bibbity-ee bitey ebbity-eff"
"0x9999" -> "Ninety-nine bitey ninety-nine"
"0xA1B2" -> "Atta-one bitey bibbity-two"
"0x3C4F" -> "Thirty-cee bitey forty-eff"
"0x17AB" -> "Seventeen-bitey atta-bee"
"0x1AFB" -> "Yayteen-bitey fleventy-bee"
"0xAAAA" -> "Atta-ay bitey atta-ay"
Das ist Code-Golf , also gewinnt die geringste Anzahl von Bytes.
quelle
Antworten:
Pyth -
312293286251 BytesEs ist an der Zeit, die Daten zu reduzieren.
Das größte Pyth-Programm, das ich je geschrieben habe! Es ist immer noch eine enorme Komprimierung mit den Daten möglich, sowohl algortihimisch als auch Basisumwandlung, aber ich wollte dies nur aufstellen.
Ich interpretiere die Eingabe als Hex-Literal durch Q, das es automatisch mit dem erkennt
0x
. Dann divmod ich es 256 in die Bytes und entferne das erste Byte, wenn es null ist, dann ordne es durch zwei Arrays, eins für0-1F
und dann20-F0
. Der zweite bekommt auch einen DivMod durch das erste Array. Die erste Option erhält einen Bindestrich am Ende und die zweite einen Bindestrich in der Mitte und ein Leerzeichen am Ende. Machen Sie mit"bitey "
, nutzen Sie die Reichweite und entfernen Sie Bindestriche,.s
und wir sind gut.Der Basiskomprimierungsteil ist auch interessant, weil ich zuerst mit der grundlegenden Konvertierung von 128 -> 256 begonnen habe. Aber jetzt verwende ich
"q"
anstelle des Leerzeichens das Trennzeichen. Daher kann ich die Saite jetzt als Basis-26-Saite betrachtenxLG
, was die Komprimierung enorm verbessert.Probieren Sie es hier online .
Testsuite .
quelle
0x112233
und0x93FBAC09
Ninety-three bitey fleventy-bee halfy atta-cee bitey nine
?Truebitey
s undFalsebitey
s.Java - 856 Bytes
Nicht kurz aber zumindest die zweite Antwort;)
Es ist eine Methode,
String p(String n)
die den Job erledigt:quelle
Javascript -
577.719BytesIch bin mir sicher, dass Verbesserungen vorgenommen werden müssen. Der Bonus wurde hinzugefügt und analysiert Hex-Strings beliebiger Länge.
EDIT: Whoops, es funktioniert nicht richtig, wenn es führende Nullen gibt. Hm.
EDIT 2: Behoben, denke ich. JSFiddle
quelle