# Кардиналы и ординалы, от 1 до 100

28

Вот простой способ растянуть мышцы сжатия. Ваш код (полная программа) должен выводить прописное английское представление всех кардинальных чисел от 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.
``````

Это код гольф, самый короткий ответ в байтах выигрывает.

Ответы:

28

# Обыкновенный Лисп, 8882 80 байт

``````(format t"~@(~{~R~^, ~}~).
~:*~@(~{~:R~^, ~}~)."(loop as i to 99 collect(1+ i)))
``````

(Это часть языка, надеюсь, вы не против)

### Выход

``````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.
``````

### Пояснения

• `(format t "<control string>" <arguments>)`форматирует управляющую строку в соответствии с (переменными) аргументами и выводит на стандартный вывод (потому что `t`)

• `(loop ...)` строит список целых чисел от 1 до 100

• `~@( ... ~)` заглавная строка, возвращенная внутренней управляющей строкой
• `~{ ... ~}` перебирает текущий аргумент и применяет внутреннее форматирование к каждому элементу
• Внутри итерации все, что следует `~^`, не печатается на последней итерации: это используется для добавления разделителя запятой между элементами.
• `~R` выводит текущий аргумент как кардинал
• `~:R` выводит текущий аргумент как порядковый номер
• `~%` выводит новую строку
• `~:*`сбросить текущий аргумент, который будет обработан, как предыдущий, который используется здесь для повторного использования списка целых чисел.

Сохранено 2 байта благодаря PrzemysławP.

1
И я подумал, что мой 340-байтовый ответ был впечатляющим ...
kirbyfan64sos

3
Ваш представитель на данный момент довольно 1337! : D Так что, к сожалению, я не могу высказать это решение ... :(
Нумери говорит, что восстановите Монику

2
@Numeri Вы можете проголосовать сейчас. ;)
DLosc

1
Решения короче коломогоров, сложность ввода всегда очень впечатляют! Отлично сработано.
Исаак

1
@DLosc Это было просто хорошо для меня, чтобы сломаться ...: D
Нумери говорит, что восстановите Монику

9

# Pyth, 366 342 340 байт

``````Lcbdj=Y", "++rhJy"one two three four five six seven eight nine"3+tJ+y"ten eleven twelve"+=Nm+d"teen"=by"thir four fif six seven eigh nine"sm+dm++d\-kJKy"twenty thirty forty fifty sixty seventy eighty ninety"+=H"one hundred"\.jY+rh=J++y"first second third"m+d=T"th"tPby"ninth"3+++tJy"tenth eleventh twelfth"+m+dTNsm++Pd"ieth"m++d\-kJK+H"th."
``````

Живая демоверсия.

## 342-байтовая версия:

``````Lcbdj", "++rhJy"one two three four five six seven eight nine"3+tJ+y"ten eleven twelve"+=Nm+d"teen"=by"thir four fif six seven eigh nine"sm+dm++d\-kJKy"twenty thirty forty fifty sixty seventy eighty ninety"+=H"one hundred"\.j", "+rh=J++y"first second third"m+d"th"tPby"ninth"3+++tJy"tenth eleventh twelfth"+m+d"th"Nsm++Pd"ieth"m++d\-kJK+H"th."
``````

## 366-байтовая версия:

``````Lcbd
j", "++"One"+tJy"one two three four five six seven eight nine"+y"ten eleven twelve"+=Nm+d"teen"y"thir four fif six seven eigh nine"sm+dm++d\-kJKy"twenty thirty forty fifty sixty seventy eighty ninety"+=H"one hundred"\.
j", "+"First"+++t=Jy"first second third fourth fifth sixth seventh eighth ninth"y"tenth eleventh twelfth"+m+d"th"Nsm++Pd"ieth"m++d\-kJK+H"th."
``````

6

# PHP - 491 байт

Небольшой обманщик для кардиналов (я использую класс NumberFormatter, который поставляется по умолчанию с PHP):

``````echo'One, ';\$x=new NumberFormatter(0,5);for(\$i=1;\$i++<100;)echo\$x->format(\$i).(\$i>99?
'.':', ');echo"
";\$y=[First,second,third,fourth,fifth,sixth,seventh,eighth,ninth,tenth,
eleventh,twelfth,thirteenth,fourteenth,fifteenth,sixteenth,seventeenth,eighteenth,nineteenth,
twentieth];for(\$z=[thirtieth,fortieth,fiftieth,sixtieth,seventieth,eightieth,ninetieth];
\$j++<99;\$q=floor(\$j/10),\$w=\$z[\$q-2])echo\$j<21?\$y[\$j-1]:(\$j%10?\$x->format(\$q*10).'-'.
strtolower(\$y[\$j%10-1]):\$w),', ';echo'one hundredth.';
``````

(добавлено несколько новых строк для удобства чтения)

2
Предупреждения, как правило, разрешены, удалите все `@`(-4 байта). Используйте новую строку вместо записи `\n`(-1 байт). Поместите определение `\$z`в инициализацию второго `for`цикла (-1 байт).
Blackhole

Сохраните 6 байтов, используя процедурный метод вместо объектно-ориентированного конструктора
rink.attendant.6

6

## PHP 5.3+, 195 байт

Это включает в себя символ новой строки.

Это часть `NumberFormatter`урока, как и ответ Развана . За исключением того, что я прописал и кардиналов и ординалов в соответствии с ICU

``````\$f=numfmt_create(en,5);\$g=clone\$f;\$g->setTextAttribute(6,'%spellout-ordinal');for(\$x=\$y='',\$i=1;\$i++<100;){\$x.=\$f->format(\$i).(\$z=\$i<=99?', ':'');\$y.=\$g->format(\$i).\$z;}echo"One, \$x.
First, \$y.";``````

Связанный: /programming//a/19411974/404623

Ницца! Я понятия не имел о формате% spellout-ordinal.
Разван

4

# Oracle SQL 231 байт

SqlFiddleLiveDemo

`````` SELECT 'O'||SUBSTR(LISTAGG(TO_CHAR(TO_DATE(level,'j'),'jsp'),', ')WITHIN GROUP(ORDER BY level),2)||'.','F'||SUBSTR(LISTAGG(TO_CHAR(TO_DATE(level,'j'),'jTHSP'),', ')WITHIN GROUP(ORDER BY level),2)||'.' FROM DUAL CONNECT BY level<101
``````

3

# JavaScript ES6, 562 464 байта

Еще даже не закончил игру в гольф!

``````n=>(f=(a,b)=>Array(89).fill(a=btoa(a+`·§·,í*íË7èº»rÍø·,ìrÎÇ¯z{rÍè Ü³)Þ·,ó`).split`z`).map((l,i)=>i<1?b:i<20?a[i]:a[18+(i-i%10)/10]+'-'+a[i%10]).join`, `+', one hundred')(`¢w³·
3¶Þ{7èº¼ß÷³²,s±ëÞ7¢s)ÞÎ×§Íé^½éó·¥½ìí*íyéó~«µç§Íøµç§ÎÈ±µç§ÎÇ¯z{^z|Þmyéó)Þµç§ÎÜÜ³¶«·,ß¢êíË7â~Ü³²,mË;½éíË7¢rÎx§µì³`,'One')+`
`+f(`~*ì·;rÝÎØb­Üß¢êí7â~Øs²,m;½éí7¢Øs)Þ¶íz{aÍé^½éí;pz[Þ¶í*íyéí7èº»^z{aÍøµç§¶ì^z{aÎÇ¯z{^z{aÍè ×Øs)Þµç§¶ó`,'First')+'th'
``````

Если это не сработает, мне может понадобиться добавить hexdump из-за всех специальных символов. Пожалуйста, дайте мне знать, если это так, и я попаду к вам к завтрашнему дню.

Если они опечатки, дайте мне знать.

Код в pastebin (проверено на Safari Nightly)

# объяснение

Это может выглядеть как кучка искаженных персонажей, но на самом деле все довольно просто.

Мы начинаем с генерации кардиналов. Этот массив сжимается с помощью `btoa`функции.

``````['one', ..., 'eighteen', 'nineteen', 'twenty', 'thirty', ...,'ninety']
``````

Чтобы пройти через «диапазон», мы используем следующее:

Теперь мы генерируем массив длиной 89, используя. Это `...`то, что распаковывает массив

``````Array(89).fill(...)
``````

Затем нанесите на карту, это индекс:

``````.map((l,i)=>
``````

Теперь для условия, `i < 1`или если это первый элемент, мы будем использовать заглавную версию один / первый

``````i<1?b
``````

В противном случае ... если оно меньше 20, мы выводим одиннадцать ... девятнадцать

``````i<20?a[i]:
``````

В противном случае ... используя `(i-i%10)/10`мы получаем последнюю цифру числа. Мы добавляем 18 к нему, чтобы компенсировать 1..19. Мы добавляем, `-`а затем добавляем последнюю цифру, или я% 10

Наконец, мы добавляем «сто» в самый конец, потому что мы этого не делаем.

Мы повторяем это для обоих типов чисел и разделяем их новой строкой

Пробовал с FireFox: опубликованный код некорректен. Код в pastebin в порядке, но пропускает точку после первой `hundred`. В целом: отличная работа | +1
edc65

Что за специальные символы?
Световой

3

# C ++ 704 642 620 602

Нет использования библиотеки, кроме как `ostream` `operator<<()`для `char*`s.

``````#include<iostream>
char*q,a[]="|one|two|three|four|five|six|seven|eight|ni&u\$Il%*twel&bthirte\$Q(P#tif#j)/#k'L#|)y#r*4#s'9rst&>cond*5d)zh)gh)U#V)Ch)2h(}#V09\$m0M\$I0]'g0k)B0|*I#}1A+4\$01f+y1u\$\$|+/nty+(y*`#X*3y)p#V)Ly))y(dyC5~hundred)Oie1o#|1c#}*E#s*a#t*}\$&+9#|+T#|+uth",b[448],*s=a,*t=b;int i,j,k;auto p(int k){for(s=b;k--;)while(*s++);return s;}int main(){for(;k=*s++;)if(k>98)*t++=k<'|'?k:" "[k<'~'];else for(i=(k-35)*95+*s++-32,q=t-i/9,k=3+i%9;k--;)*t++=*q++;for(j=0;j<2;++j)for(i=1;b[1+126*j]^=32*(i<3),k=i<20?i:i%10,i<101;++i)std::cout<<p(40+!k*j*11+i/10)<<"-"[!k|i<20]<<p(j*20+k)<<", \0.\n"+i/100*3;}``````

С некоторыми пробелами и некоторыми комментариями:

``````#include <iostream>

// Encoded as literal characters or offset/length pairs for previous runs of characters, LZ like
char *q, a[] =
"|one|two|three|four|five|six|seven|eight|ni&u\$Il%*twel&bthirte\$Q(P#tif#j)/"
"#k'L#|)y#r*4#s'9rst&>cond*5d)zh)gh)U#V)Ch)2h(}#V09\$m0M\$I0]'g0k)B0|*I#}1A+4\$01f+y1u\$\$|"
"+/nty+(y*`#X*3y)p#V)Ly))y(dyC5~hundred)Oie1o#|1c#}*E#s*a#t*}\$&+9#|+T#|+uth",
b[448], *s = a, *t = b;

int i, j, k;

// Find the kth null separated string in array b
auto p(int k) {
for (s = b; k--;)
while (*s++)
;
return s;
}

int main() {
// Decode the compressed 'primitives' we use to build up the output.
for (; k = *s++;)
if (k > 98)
*t++ = k < '|' ? k : " "[k < '~'];
else
for (i = (k - 35) * 95 + *s++ - 32, q = t - i / 9, k = 3 + i % 9; k--;) *t++ = *q++;

// Loop twice over numbers 1-100, building up output from the 'primitives' in our array
for (j = 0; j < 2; ++j)
for (i = 1; b[1 + 126 * j] ^= 32 * (i < 3), k = i < 20 ? i : i % 10, i < 101; ++i)
std::cout << p(40 + !k * j * 11 + i / 10) << "-"[!k | i < 20] << p(j * 20 + k)
<< ", \0.\n" + i / 100 * 3;
}``````

Сжатая строка декодируется из `a`в `b`:

``````|one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve|thirteen|fourteen|fifteen|
sixteen|seventeen|eighteen|nineteen||first|second|third|fourth|fifth|sixth|seventh|eighth|
ninth|tenth|eleventh|twelfth|thirteenth|fourteenth|fifteenth|sixteenth|seventeenth|
eighteenth|nineteenth|||twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety|one~
hundred|||twentieth|thirtieth|fourtieth|fiftieth|sixtieth|seventieth|eightieth|
ninetieth|one~hundredth;
``````

Без перевода строки. Во время распаковки `|`s заменяются `'\0'`на `~`s и s заменяются на `' '`(причуды способа, которым символы кодируются в печатный ASCII). Затем эти «примитивные» строки ищутся по индексу в `b`массиве с помощью `p`функции и используются для сборки выходных данных.

Сжатие представляет собой простую LZ-подобную схему, где символы либо кодируются как литералы, либо как отрицательное смещение в буфере и длина серии (кодируется в два символа), если найдено совпадение длины> = 3. Строка может быть сжата далее, используя непечатаемые символы, но мне нравится мой код, чтобы быть безопасным для копирования и вставки :)

1

# Javascript (ES6), 713

Похоже на мою вторую подачу PHP по этому вопросу . (2444 - 713) / 2444 = сжатие 70,8%.

``````a=`Onez]cu^dP~Ntenz\`zHlvezmwgwjwkw{wqwpwHnQxZx]xcxux^xdxPx~xNmQXZX]XcXuX^XdXPX~XNforQbZb]bcbub^bdbPb~bNjQWZW]WcWuW^WdWPW~WNkQVZV]VcVuV^VdVPV~VN{QUZU]UcUuU^UdUPU~UNqQTZT]TcTuT^TdTPT~TNpQSZS]ScSuS^SdSPS~SNy.
FirstzaRMLKJI[ten}\`}Hlf}mGgGjGkG{GqGpGHnYx_xaxRxMxLxKxJxIx[mYX_XaXRXMXLXKXJXIX[forYb_babRbMbLbKbJbIb[jYW_WaWRWMWLWKWJWIW[kYV_VaVRVMVLVKVJVIV[{YU_UaURUMULUKUJUIU[qYT_TaTRTMTLTKTJTIT[pYS_SaSRSMSLSKSJSIS[yth.`,'eleven|`}|`z|twe|q}|{}|k}|j}|g}|pz|{z|kz|gz|one hundred|tyz|mdz|qtz|p~|q~|{~|k~|j~|m~|tie}|onez|nin}|twoz|fivez|firstz|teen|threez|secondz|for~|four|fif|twen~|six|thir|nine|eigh|, |seven|th, |ty-'.split('|').map((e,i)=>a=a.split('`GwHIJKLMNPduyQR~STUVWXYZ[]^_`cabgjxkmpqz{}~'[i]).join(e)),alert(a)
``````

скрипка

Почему это было отвергнуто?
DankMemes

1

# Mathematica 415 391 407

Кардиналы даны `IntegerName[n]`. Порядковые числа получены из кардиналов.

``````s = StringRiffle; y = IntegerName; t = StringReplace;
k@n_ := If[(z = (TextWords["first second third a fifth a a a ninth,a, a twelfth a a a a a eighteenth a, twentieth"])[[n]]) == "a", y@n <> "th", z]
g@n_ := Module[{i = IntegerDigits[n], z}, z := y[Quotient[n, 10]*10];Which[n == 100, "one hundredth", n < 20, k[n], i[[-1]] == 0, t[z, "y" -> "ieth"], 3 > 2, z <> "-" <> k[i[[-1]]]]]
t[(s[y@Range@100 /. "one" -> "One", ", "] <> ".") <> s[g /@ Range@100 /. "first" -> "\nFirst", ", "] <> ".", "tt" -> "t"]
``````

Выход:

``````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.
``````

1
Некоторая неправильная`eightth`
Марио Трукко

Ты был прав! Я сейчас их исправил.
DavidC

Вы можете изменить , `"first" -> "\nFirst"`чтобы `"fir" -> "\nFir"`спасти 4 байта.
LegionMammal978

@ LegionMamal978, Хорошее предложение, но оно не будет работать, потому что мы заменяем элементы (слова) в списке: «first» - это элемент в списке, а «fir» - нет. Если мы попытаемся реализовать ваше предложение после того, как список элементов будет `StringJoin`отредактирован, то «двадцать первый ... тридцать первый ...» станет «двадцать первый ... тридцать первый ...».
DavidC

1

# JavaScript (ES6), 480

``````/*TEST: redirect console output to snippet body */ console.log=x=>O.innerHTML=x

// Not a function, as a complete program is requested
b=x=>btoa(x).split`/`;
Z=i=>z[i]||z[i-8]||z[i-18];
y=b("ýø«²ßìyÊ'wûa·ýøÿÿÞ)ÿÿûpzWÿÿÿÿÿÿÿ");
z=b("þÞþÜ(þØkyïß¢êÿ~+ÞþÈ±þÇ¯zÞmþx§{û^÷¥z÷§þÜ÷¿¶«ÿ÷âÿÿz(!ÿûpzÿ~ÿÿÿÿ");
o=(z.map((v,i)=>i<20?i<13?v:(v||z[i-10])+'teen':z[S='slice'](0,10).map(d=>Z(i)+(d?'ty-'+d:'ty')))+`,\${h='one hundred'}.\nF`).split`,`;
q=y.map((v,i)=>i<4?v:`\${v||o[i]}th`);
q=z.map((v,i)=>i<20?' '+q[i]:q[S](0,10).map(d=>' '+Z(i)+(d?'ty-'+d:'tieth')));
console.log('O'+o.join`, `[S](3)+`\${q}, \${h}th.`[S](4))

// INFO: z uncompressed is [,one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thir,,fif,,,eigh,,twen,,for,,,,,]
// INCO: y uncompressed is [,first,second,third,,fif,,,eigh,nin,,,twelf,,,,,,,,,]``````
``#O { white-space: pre-wrap }``
``<pre id=O></pre>``

0

# PHP - 842 байта

Опуская обычные начальные и конечные теги PHP, сжатие составляет 1 - 842/2445 = 65,6%

В основном получение результатов `base64_encode(gzdeflate(\$input, 9));`и реверсирование операций. Очевидно, что если бы я выбрал вывод в чистом 8-битном режиме вместо базового-64, он был бы на 25% меньше, но с риском столкнуться с escape-символами или непечатными символами.

``````echo gzinflate(base64_decode('VZRdcuIwEITfcwoOQHKMfd1DBGnlKspUEYfEt1+rf2bGL6gbkLplS9/ftV0v28/j+BjPduj++H4en8vr0F/L7/HRXm29Xtryb2zXy7pgAr6585ftp93nv7exPLc2v5lrSC2d4lhKYk6ixJJQc1WqY7F12z2+P1gPmi2lWVaOnW1QXQY7sI6602k/ctrW3MHuUeHUekTUCqdTuMzyyl8YLq1wOofTMbw/kI2B0ZRIlvQrylxpxFIjVZKhNMqkUeTxdnYNioRkJKUiYXw2ekZCM5JSkTCOhGHkPAe7BkZSIlKSkTSMlPahdKQkI2kUSaNInLg9hGJlGGyjaFmF2zFeLu9GqSDrErKsgS93jywhjQ7WrCDHBjYoIIN863JFI12O4bhgu0eGSyPcmuFyDLdBuAzCrRkuVzAR4UfaZXyvt2e7fbz9WZ5feDafj/XGK3ATMQaPyuDrG36AQ3sZWHYOm769+/eJIEw0g7CWKOR1JUWiXL+VDGnzSGuv29JCzkeBLQRWtBOTCRsqZDrN7MVplxVPxXvPSajYoNoYOWxjzuRzLW0SVaeZvTi3KbwqPtoEsviIXcYcQhfTh1XMLr3oWsSzehrVKABL6xLBML9adRCY2EE4UgfBjB0CZnVWT+MOSbS00cFQ85liB5OKh1x8YgfTDR2SbnVWT+MrkIhL6w5BuTzMahHI0mV7nY5q4o5dCu7Os3u1p0tZO1XqjRP24l6xVnAMrQJeLBX8Q6fCv9PMXpwKVQgW7zrJwbjZbBNgQ5ugGdsEENGmAPE0sxenNpWKxReCtWxTyLiNj7f/'));
``````
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.