Вот простой способ растянуть мышцы сжатия. Ваш код (полная программа) должен выводить прописное английское представление всех кардинальных чисел от 1 до 100, а затем всех порядковых чисел от 1 до 100. Цифры в каждом списке должны быть разделены запятыми и пробелами и должным образом дефис. Каждый список должен начинаться с одной заглавной буквы и заканчиваться точкой. Два списка должны быть разделены новой строкой.
Для ясности вы должны создать точный поток байтов:
One, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen, fourteen, fifteen, sixteen, seventeen, eighteen, nineteen, twenty, twenty-one, twenty-two, twenty-three, twenty-four, twenty-five, twenty-six, twenty-seven, twenty-eight, twenty-nine, thirty, thirty-one, thirty-two, thirty-three, thirty-four, thirty-five, thirty-six, thirty-seven, thirty-eight, thirty-nine, forty, forty-one, forty-two, forty-three, forty-four, forty-five, forty-six, forty-seven, forty-eight, forty-nine, fifty, fifty-one, fifty-two, fifty-three, fifty-four, fifty-five, fifty-six, fifty-seven, fifty-eight, fifty-nine, sixty, sixty-one, sixty-two, sixty-three, sixty-four, sixty-five, sixty-six, sixty-seven, sixty-eight, sixty-nine, seventy, seventy-one, seventy-two, seventy-three, seventy-four, seventy-five, seventy-six, seventy-seven, seventy-eight, seventy-nine, eighty, eighty-one, eighty-two, eighty-three, eighty-four, eighty-five, eighty-six, eighty-seven, eighty-eight, eighty-nine, ninety, ninety-one, ninety-two, ninety-three, ninety-four, ninety-five, ninety-six, ninety-seven, ninety-eight, ninety-nine, one hundred.
First, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh, twelfth, thirteenth, fourteenth, fifteenth, sixteenth, seventeenth, eighteenth, nineteenth, twentieth, twenty-first, twenty-second, twenty-third, twenty-fourth, twenty-fifth, twenty-sixth, twenty-seventh, twenty-eighth, twenty-ninth, thirtieth, thirty-first, thirty-second, thirty-third, thirty-fourth, thirty-fifth, thirty-sixth, thirty-seventh, thirty-eighth, thirty-ninth, fortieth, forty-first, forty-second, forty-third, forty-fourth, forty-fifth, forty-sixth, forty-seventh, forty-eighth, forty-ninth, fiftieth, fifty-first, fifty-second, fifty-third, fifty-fourth, fifty-fifth, fifty-sixth, fifty-seventh, fifty-eighth, fifty-ninth, sixtieth, sixty-first, sixty-second, sixty-third, sixty-fourth, sixty-fifth, sixty-sixth, sixty-seventh, sixty-eighth, sixty-ninth, seventieth, seventy-first, seventy-second, seventy-third, seventy-fourth, seventy-fifth, seventy-sixth, seventy-seventh, seventy-eighth, seventy-ninth, eightieth, eighty-first, eighty-second, eighty-third, eighty-fourth, eighty-fifth, eighty-sixth, eighty-seventh, eighty-eighth, eighty-ninth, ninetieth, ninety-first, ninety-second, ninety-third, ninety-fourth, ninety-fifth, ninety-sixth, ninety-seventh, ninety-eighth, ninety-ninth, one hundredth.
Это код гольф, самый короткий ответ в байтах выигрывает.
Pyth,
366342340 байтЖивая демоверсия.
342-байтовая версия:
366-байтовая версия:
источник
PHP - 491 байт
Небольшой обманщик для кардиналов (я использую класс NumberFormatter, который поставляется по умолчанию с PHP):
(добавлено несколько новых строк для удобства чтения)
источник
@
(-4 байта). Используйте новую строку вместо записи\n
(-1 байт). Поместите определение$z
в инициализацию второгоfor
цикла (-1 байт).PHP 5.3+, 195 байт
Это включает в себя символ новой строки.
Это часть
NumberFormatter
урока, как и ответ Развана . За исключением того, что я прописал и кардиналов и ординалов в соответствии с ICUСвязанный: /programming//a/19411974/404623
источник
Oracle SQL 231 байт
SqlFiddleLiveDemo
источник
JavaScript ES6,
562464 байтаЕще даже не закончил игру в гольф!
Если это не сработает, мне может понадобиться добавить hexdump из-за всех специальных символов. Пожалуйста, дайте мне знать, если это так, и я попаду к вам к завтрашнему дню.
Если они опечатки, дайте мне знать.
Код в pastebin (проверено на Safari Nightly)
объяснение
Это может выглядеть как кучка искаженных персонажей, но на самом деле все довольно просто.
Мы начинаем с генерации кардиналов. Этот массив сжимается с помощью
btoa
функции.Чтобы пройти через «диапазон», мы используем следующее:
Теперь мы генерируем массив длиной 89, используя. Это
...
то, что распаковывает массивЗатем нанесите на карту, это индекс:
Теперь для условия,
i < 1
или если это первый элемент, мы будем использовать заглавную версию один / первыйВ противном случае ... если оно меньше 20, мы выводим одиннадцать ... девятнадцать
В противном случае ... используя
(i-i%10)/10
мы получаем последнюю цифру числа. Мы добавляем 18 к нему, чтобы компенсировать 1..19. Мы добавляем,-
а затем добавляем последнюю цифру, или я% 10Наконец, мы добавляем «сто» в самый конец, потому что мы этого не делаем.
Мы повторяем это для обоих типов чисел и разделяем их новой строкой
источник
hundred
. В целом: отличная работа | +1C ++
704642620602Нет использования библиотеки, кроме как
ostream
operator<<()
дляchar*
s.Живая версия .
С некоторыми пробелами и некоторыми комментариями:
Сжатая строка декодируется из
a
вb
:Без перевода строки. Во время распаковки
|
s заменяются'\0'
на~
s и s заменяются на' '
(причуды способа, которым символы кодируются в печатный ASCII). Затем эти «примитивные» строки ищутся по индексу вb
массиве с помощьюp
функции и используются для сборки выходных данных.Сжатие представляет собой простую LZ-подобную схему, где символы либо кодируются как литералы, либо как отрицательное смещение в буфере и длина серии (кодируется в два символа), если найдено совпадение длины> = 3. Строка может быть сжата далее, используя непечатаемые символы, но мне нравится мой код, чтобы быть безопасным для копирования и вставки :)
источник
Javascript (ES6), 713
Похоже на мою вторую подачу PHP по этому вопросу . (2444 - 713) / 2444 = сжатие 70,8%.
скрипка
источник
Mathematica
415 391407Кардиналы даны
IntegerName[n]
. Порядковые числа получены из кардиналов.Выход:
источник
eightth
"first" -> "\nFirst"
чтобы"fir" -> "\nFir"
спасти 4 байта.StringJoin
отредактирован, то «двадцать первый ... тридцать первый ...» станет «двадцать первый ... тридцать первый ...».JavaScript (ES6), 480
источник
PHP - 842 байта
Опуская обычные начальные и конечные теги PHP, сжатие составляет 1 - 842/2445 = 65,6%
В основном получение результатов
base64_encode(gzdeflate($input, 9));
и реверсирование операций. Очевидно, что если бы я выбрал вывод в чистом 8-битном режиме вместо базового-64, он был бы на 25% меньше, но с риском столкнуться с escape-символами или непечатными символами.источник