Произносить Hex
Для тех из вас, кто не имеет отношения к шоу «Силиконовая долина», этот вызов вызван обменом, который проходит следующим образом ( 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.
Следует отметить, что технически, а 0x9 * 0xF = 0x87
не «пятнадцать», но это поднимает важный вопрос - как бы вы на самом деле произносили hex в разговоре? Это не так oh ex eff eff
легко течет с языка, так что же нам делать? Вот удобная таблица произношения, которой мы будем следовать.
A = ay A0 = atta-
B = bee B0 = bibbity-
C = cee C0 = city-
D = dee D0 = dickety-
E = ee E0 = ebbity-
F = eff F0 = fleventy-
Мы можем разделить шестнадцатеричное число длиной 4 на две группы по два и определить произношение из таблицы выше, а также общее английское произношение чисел. Так, к примеру 0xFFAB
, мы бы получили Fleventy-eff bitey atta-bee
.
Если номер включен, например 0xF5AB
, вы бы распечатать Fleventy-five bitey atta-bee
. Кроме того, если число начинает одну из групп, вы должны использовать его произношение «десятки». Например, 0x5FAA
стал бы Fifty-eff bitey atta-ay
. В случае, если у вас есть что-то подобное 0x1FAC
, это будет Effteen bitey atta-cee
. Но, если бы это правило использовалось 0x1AF4
, его a-teen
можно было бы перепутать eighteen
, поэтому вы должны добавить Y. Таким образом, правильный вывод будетYayteen bitey fleventy-four
В случае 0xD0F4
, вместо того , чтобы делать Dickety-zero bitey fleventy-four
, мы игнорировали бы ноль и печатали Dickety-bitey fleventy-four
.
Дефисы должны появляться только в группах по два человека, то есть кусочки не должны быть связаны ни с одной группой с дефисом, если только первая группа не состоит из одного слова! Так 0x04F4
было бы four-bitey fleventy-four
, но 0x44F4
было бы forty-four bitey fleventy-four
. Как Trichoplax сказал, bitey следует hyphened только тогда , когда после круглого числа.
Для всестороннего взгляда на то, как это будет работать, посмотрите пример ввода / вывода ниже.
Задача
Создайте программу или функцию , которая примет шестнадцатеричную строку в качестве входных данных или аргумента функции и выдаст ее произношение. Вывод должен иметь правильную капитализацию. Вы можете предположить, что длина этого числа всегда будет 4.
Пример ввода / вывода
"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"
Это код-гольф , поэтому выигрывает наименьшее количество байтов.
источник
Ответы:
Pyth -
312293286251 байтПора начинать сокращать данные, больше приходить.
Святая самая большая программа Pyth, которую я когда-либо писал! По-прежнему возможно огромное сжатие данных, как алгоритмически, так и базовое преобразование, но я просто хотел это поднять.
Я интерпретирую ввод как шестнадцатеричный литерал через Q, который он автоматически определяет с помощью
0x
. Затем я делю 256 на байты и удаляю первый байт, если он равен нулю, затем отображаю его через два массива, один для0-1F
и затем20-F0
. Второй получает divmod через первый массив также. Первый вариант получает перенос в конце, а второй - дефис в середине и пробел в конце. Присоединяйтесь"bitey "
, извлекайте выгоду из диапазона и удаляйте дефисы,.s
и мы в порядке.Базовое сжатие также интересно, потому что я впервые начал с базового преобразования 128 -> 256. Но сейчас я использую
"q"
в качестве разделителя вместо пробела. Таким образом, теперь я могу рассматривать строку как строку с базой 26xLG
, что значительно улучшает сжатие.Попробуйте здесь онлайн .
Тестовый пакет .
источник
0x112233
и0x93FBAC09
Ninety-three bitey fleventy-bee halfy atta-cee bitey nine
?Truebitey
s иFalsebitey
s.Java - 856 байт
Не короткий, но хотя бы второй ответ;)
Это метод,
String p(String n)
который будет выполнять эту работу:источник
Javascript -
577719 байтЯ уверен, что есть улучшения, которые будут сделаны. Дополнительный бонус, он анализирует шестнадцатеричные строки произвольной длины.
РЕДАКТИРОВАТЬ: Ой, это не работает правильно, когда есть ведущие нули. Гектометр
РЕДАКТИРОВАТЬ 2: Исправлено, я думаю. JSFiddle
источник