задача
Учитывая строку английских названий цифр, «свернутых» вместе, вот так:
zeronineoneoneeighttwoseventhreesixfourtwofive
Разбейте строку обратно на цифры:
zero nine one one eight two seven three six four two five
правила
Ввод всегда является строкой. Он всегда состоит из одного или нескольких строчных английских имен, сложенных вместе, и ничего больше.
- Английские цифры называются
zero one two three four five six seven eight nine
.
- Английские цифры называются
Вывод может быть списком строк или новой строкой, где цифры разделены не алфавитными, непустыми строками. (Ваш вывод также может иметь такие строки в начале или в конце, и разделители не обязательно должны быть согласованными. Поэтому даже что-то подобное
{{ zero0one$$two );
является правильным (если абсурдным) ответомzeroonetwo
.)Самый короткий ответ в байтах побеждает.
Контрольные примеры
three -> three
eightsix -> eight six
fivefourseven -> five four seven
ninethreesixthree -> nine three six three
foursixeighttwofive -> four six eight two five
fivethreefivesixthreenineonesevenoneeight -> five three five six three nine one seven one eight
threesevensevensixninenineninefiveeighttwofiveeightsixthreeeight -> three seven seven six nine nine nine five eight two five eight six three eight
zeroonetwothreefourfivesixseveneightnine -> zero one two three four five six seven eight nine
Ответы:
Сетчатка , 20 байт
Попробуйте онлайн!
источник
C (gcc) ,
89 80 76 75 72 71 7069 байтПопробуйте онлайн!
(89) Кредит гастропнеру для хэша XOR.
(76) Благодарим Тоби Спейта за идею использования 1-го и 3-го.
(75) Благодарим Майкла Доргана за
'0'
→48
.(72) Благодарим Майкла Доргана и Линн за литералы с управляющими символами.
(69) Кредит Линн для
x?y:0
→x&&y
источник
Python 2 , 50 байт
Попробуйте онлайн!
-3 спасибо Линн .
-4 благодаря Уриэль «s ответ регулярное выражение» s.
источник
import re;re.compile('…').findall
следует сохранить пару байтов. Я ожидал, что это превратится в регулярное выражение в гольф :)Befunge,
87858176 байтПопробуйте онлайн!
У Befunge нет никаких инструкций по манипуляции со строками, поэтому мы создаем своего рода хэш из последних трех встреченных символов по мере их обработки.
По сути, этот хэш состоит из трех цифр, числа base-104. Каждый раз, когда читается новый символ, мы модифицируем хеш с 104 2, чтобы избавиться от самого старого символа, умножим его на 104, чтобы освободить место для нового символа, затем добавим значение ASCII нового символа мод 27 (чтобы убедиться, что это не переполняется).
В целях сравнения мы берем это значение mod 3817, записываем его в память (таким образом, обрезая его до 8 бит), что приводит к меньшим числам, которые Befunge легче обрабатывать. Затем мы должны сравнить хэши, равные 0, 38, 59, 64, 88, 92, 114, 117 и 123. Если они совпадают с любым из них, мы знаем, что столкнулись с последовательностью символов, которая отмечает конец число, поэтому мы выводим дополнительный пробел и сбрасываем хэш на ноль.
Если вам интересно, почему base 104 или mod 3817, эти значения были тщательно выбраны, чтобы список хэшей, который нам нужно было сравнить, мог быть представлен как можно меньшим количеством байтов.
источник
Java (OpenJDK 8) ,
554643 байтаЭкономия 9 байтов благодаря Forty3 / FrownyFrog
Экономия 3 байта благодаря Титу
Попробуйте онлайн!
Редактировать: Спасибо за прием и объяснение лямбды!
источник
g
вместо суффикса регулярное выражениеAll
).f=(s)=>
вместо него используетсяs->
, что на 4 байта короче.C (gcc) ,
179159146139137116107103102 байтаРедактировать 1: (Добавлены предложения от Mr. Xcoder - спасибо! - Моя версия макроса была того же размера, что и ваша, но мне больше нравится ваша.)
Редактировать 2: измененный персонаж сравнивается с вызовами
strchr()
Редактировать 3: K & R в объявлениях вар (Eww!)
Редактировать 4: когда одного макроса недостаточно ...
Редактировать 5: Переделать с новым алгоритмом, предложенным выше. Спасибо Джеймсу Холдернессу за эту прекрасную идею!
Редактировать 6: Удалено 0, установленное так, как кажется, что оно происходит автоматически - Используемые техники мастер-кода с кодом (запятые, трюк с printf и т. Д.) - спасибо gastropner !
Редактировать 7: Используйте memchr и исправил ошибку, указанную Джеймсом Холдернессом .
Редактировать 7: использовать
&&
при окончательной проверке, чтобы заменить?
- спасибо JXH .Попробуйте онлайн!
Без гольфа (Честно говоря, это все еще игра в гольф)
Старое, прямое решение grep-esqe:
Старая, более чистая версия.
Попробуйте онлайн!
источник
#define
Ингамputchar
и удаления пары лишних скобок.#define p putchar(
(обратите внимание на открытые скобки).c,h=0;f(char*s){while(c=*s++)putchar(c),h=h%10816*104+c%27,c=h%3817,printf(" "+!(c&&strchr("&;@X\\ru{",c)));}
JavaScript,
6657524441 байтs=>s.replace(/one|t[wh]|.i|[fsz]/g," $&")
Довольно наивно, но это работает.
Хороший улов FrownyFrog для использования 2 символов ... за исключением "одного", при котором проверка с двумя символами может испортить зеронин. Редактировать: сингл
f
иs
были хорошие уловки FrownyFrog, что я пропустил мои первые два гольфа.Спасибо, Нил, за предложение неназванной лямбды и возможность использовать один символ для,
z
получает 52.Титус придумал меньший RegEx. Я чувствую, что в конце концов мы движемся к регулярному выражению Уриэля.
источник
z|tw|th|f|s|ei|ni|on
on|t[wh]|.i|[fsz]
(-4 байта)on|
будет соответствоватьzeronine
рендерингzer onine
Сетчатка ,
2423 байтаПопробуйте онлайн! Редактировать: 1 байт сохранен благодаря @FrownyFrog.
источник
.....
->.{5}
работать?C
10399 байтЭто работает для любой кодировки символов (включая неуклюжие, такие как EBCDIC), потому что она не использует числовое значение входных символов. Вместо этого он находит первую и третью буквы в магической строке. Расстояние между ними указывает, сколько букв нужно продвигать с каждым отпечатком.
Тестовая программа
источник
J ,
3735 байтПопробуйте онлайн!
источник
f=:[:>'..[eox]|[tse]?....'&rxall
и это работало в интерпретаторе, но не работает в TIO.C (gcc) ,
106 байтов104102 байта-2 байта благодаря @jxh -2 байта благодаря потолку
Попробуйте онлайн!
XOR действительно наш самый большой союзник.
источник
s[1]
будет короче.Сетчатка , 28 байт
Попробуйте онлайн!
источник
Pyth ,
35 2723 байтаСпасло много байтов, перенеся подход Уриэля .
Попробуй это здесь! Начальный подход.
источник
Пип , 27 байт
Принимает ввод в качестве аргумента командной строки. Попробуйте онлайн!
Простая замена регулярных выражений, вставляет пробел перед каждым совпадением
[zfs]|one|[ent][iwh]
.Прыжок на подножку
кражи,заимствуя регулярное выражение Уриэля, дает 23 байта (с-s
флагом):источник
Желе ,
2321 байтПолная программа печати, разделенная переводом строки. Примечание: как только это будет сделано, он многократно печатает пустые строки «навсегда» (до огромного предела рекурсии или ошибки сегмента)
Попробуйте онлайн! (Вывод TIO накапливается, локальная реализация будет печатать построчно)
Как?
Начиная со списка символов, программа неоднократно:
Длина первого слова определяется путем проверки первых трех символов текущего списка символов (обязательно является частью первого слова). Программа преобразует их в порядковые, умножает их вместе, умножает результат на 953, делит на семь, делит на три и добавляет три:
источник
С
168,145,144141 байтРЕДАКТИРОВАТЬ: пробовал init 'я' до 1, как это
Избавиться от
начальных пробелов, но он ломается при вводе, начиная с трех, семи или восьми
141
Попробуйте онлайн
144
Попробуйте онлайн
168
Попробуйте онлайн!
Ungolfed
константы int становятся ненужными большими, сдвигая << 8,
но в случае, если вы можете как-то сравнить со строками, это должно быть наиболее естественным
146 Использование сравнения строк
Использование сравнения строк
Запутанный
источник
Желе , 44 байта
Попробуйте онлайн!
источник
Довольно длинный. Добро пожаловать в гольф это вниз.
R , 109 байт
Попробуйте онлайн!
источник
intToUtf8
! 90 байтов были бы возможны при использовании другого подхода с использованием регулярного выражения:function(x,p=paste,z=p("(",p(c("zero",broman::numbers),collapse="|"),")"))gsub(z,"\\1 ",x)
Haskell , 81 байт
Попробуйте онлайн!
Объяснение:
источник
Python 3 (без регулярных выражений) , 85 байт
Попробуйте онлайн!
источник
while s[i:]
а затем вы можете уменьшить его до 93 байт , передав рекурсивlambda
(функции должны только возвращать выходные данные, а не печатать их сами).Excel, 181 байт
Размещает пространство перед:
z
,on
,tw
,th
,f
,s
,ei
,ni
источник
Сборка Z80,
4645 байт(Было забавно адаптировать классное регулярное выражение Уриэля к среде, не поддерживающей регулярные выражения).
источник
Желе ,
4039 байтПопробуйте онлайн!
Как это устроено
источник
QuadS ,
2120 байтПопробуйте онлайн!
Это порт моего ответа сетчатки .
источник
APL (Dyalog Unicode) , 25 байтов
Попробуйте онлайн!
источник
Python 3 , без регулярных выражений,
83 68 6563 байта-15 благодаря Lynn (рефакторинг в единственную функцию)
-3 еще благодаря Lynn (избегайте индексации в список с более арифметикой)
... что приведет к другому сохранению 2 байтов (избегая скобок с отрицательными модулями) :)
Функция, которая печатает слова, разделенные символами новой строки, а затем вызывает
IndexError
.Попробуйте онлайн! (подавляет исключения, чтобы разрешить несколько запусков в наборе тестов)
источник
def f(s):h=[4,5,3][ord(s[0])*ord(s[1])%83%7%3];print(s[:h]);f(s[h:])
h(s)
аh(s)
как я не заметил ?! Спасибо, Линн!h=(ord(s[0])*ord(s[1])%83%7+1)%3+3
составляет 65 байтов! :)Желе , 36 байт
Попробуйте онлайн!
Алгоритм:
Могу поспорить, мы можем сделать еще лучше.
источник
Mathematica, 125 байт
Попробуйте онлайн!
TIO выводит сообщение об ошибке «CountryData» (???).
Я не знаю, почему это происходит, но на Mathematica все работает нормально
источник
Perl 6 ,
4230 байтПроверь это
Проверьте это
(Перевод из других ответов)
источник
q / kdb +,
5951 байтРешение:
Пример:
Объяснение:
Быстрое решение, возможно, лучшее и более подходящее для игры в гольф.
Примечания:
46 байтов при простом гольфе, заменяя q вызовов на k, но все же здоровенное решение.
asc[(,/)x ss/:($)`z`one`tw`th`f`s`ei`ni]cut x:
источник