Wymowa Hex
Dla tych z was, którzy nie są inicjowani programem Silicon Valley, to wyzwanie jest inspirowane wymianą, która przebiega w ten sposób ( 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.
Należy zauważyć, że technicznie rzecz biorąc, 0x9 * 0xF = 0x87
nie „pechowa piątka”, ale rodzi to ważne pytanie - jak w rzeczywistości wypowiesz hex w rozmowie? To nie jest tak, oh ex eff eff
że łatwo spływa z języka, więc co powinniśmy zrobić? Oto przydatna tabela wymowy, którą będziemy śledzić.
A = ay A0 = atta-
B = bee B0 = bibbity-
C = cee C0 = city-
D = dee D0 = dickety-
E = ee E0 = ebbity-
F = eff F0 = fleventy-
Możemy podzielić 4-długościową liczbę szesnastkową na dwie grupy po dwie i określić wymowę z powyższej tabeli, a także wspólną angielską wymowę liczb. Tak więc na przykład 0xFFAB
otrzymalibyśmy Fleventy-eff bitey atta-bee
.
Jeśli podany jest numer, np . 0xF5AB
Wydrukowałbyś Fleventy-five bitey atta-bee
. Ponadto, jeśli liczba rozpoczyna jedną z grup, powinieneś użyć jej wymowy „dziesiątki”. Na przykład 0x5FAA
stałby się Fifty-eff bitey atta-ay
. W przypadku, gdy masz coś takiego 0x1FAC
, byłoby to Effteen bitey atta-cee
. Ale gdyby zastosować tę regułę 0x1AF4
, a-teen
można by ją pomylić eighteen
, więc musisz wstawić Y. Tak więc poprawnym wyjściem byłobyYayteen bitey fleventy-four
W przypadku 0xD0F4
zamiast Dickety-zero bitey fleventy-four
zignorować zero i wydrukować Dickety-bitey fleventy-four
.
Łączniki powinny pojawiać się tylko w grupach dwóch, tzn. Zgryzu nie należy łączyć z żadną grupą łącznika, chyba że pierwsza grupa to tylko jedno słowo! Tak 0x04F4
byłoby four-bitey fleventy-four
, ale 0x44F4
byłoby forty-four bitey fleventy-four
. Jak powiedział trichoplax , ugryzienie powinno być łączone tylko po zaokrągleniu liczby.
Aby uzyskać kompleksowe spojrzenie na to, jak to będzie działać, sprawdź przykładowe We / Wy poniżej.
Cel
Utwórz program lub funkcję, która pobierze ciąg szesnastkowy jako argument wejściowy lub argument funkcji i wygeneruje jego wymowę. Dane wyjściowe muszą mieć poprawną wielkość liter. Możesz założyć, że długość tego numeru będzie zawsze wynosić 4.
Przykład 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"
To jest golf golfowy , więc wygrywa najmniejsza liczba bajtów.
źródło
Odpowiedzi:
Pyth -
312293286251 bajtówCzas zacząć redukować dane, więcej nadchodzi.
Święty największy program Pyth, jaki kiedykolwiek napisałem! Nadal możliwa jest ogromna kompresja danych, zarówno algortihimicznie, jak i konwersja podstawowa, ale po prostu chciałem to postawić.
Interpretuję dane wejściowe jako literał szesnastkowy poprzez Q, który automatycznie wykrywa za pomocą
0x
. Następnie dzielę go na 256 bajtów i usuwam pierwszy bajt, jeśli jest zerem, a następnie odwzorowuję go przez dwie tablice, jedną dla,0-1F
a następnie20-F0
. Drugi również otrzymuje divmod przez pierwszą tablicę. Pierwsza opcja ma myślnik na końcu, a druga myślnik na środku i spację na końcu. Dołącz"bitey "
, wykorzystaj zasięg i usuń łączniki,.s
a my jesteśmy dobrzy.Podstawowa część kompresji jest również interesująca, ponieważ zacząłem od podstawowej konwersji 128 -> 256. Ale teraz używam
"q"
jako separatora zamiast spacji. Tak więc mogę teraz uznać strunę za strunę podstawową 26xLG
, co znacznie poprawia kompresję.Wypróbuj tutaj online .
Zestaw testowy .
źródło
0x112233
i0x93FBAC09
Ninety-three bitey fleventy-bee halfy atta-cee bitey nine
?Truebitey
s iFalsebitey
s.Java - 856 bajtów
Nie krótka, ale przynajmniej druga odpowiedź;)
Jest to metoda o nazwie,
String p(String n)
która wykona zadanie:źródło
JavaScript -
577719 bajtówJestem pewien, że należy wprowadzić ulepszenia. Dodano bonus, analizuje ciągi szesnastkowe o dowolnej długości.
EDYCJA: Ups, to nie działa poprawnie, gdy są wiodące zera. Hm
EDYCJA 2: Myślę, że naprawione. JSFiddle
źródło