Краткое и приятное описание задачи:
Основываясь на идеях нескольких других вопросов на этом сайте, ваша задача состоит в том, чтобы написать наиболее креативный код в любой программе, который принимает в качестве входных данных число, написанное на английском языке, и преобразует его в целочисленную форму.
Действительно сухие, длинные и тщательные характеристики:
- Ваша программа получит в качестве входных данных целое число на английском языке в нижнем регистре между
zero
иnine hundred ninety-nine thousand nine hundred ninety-nine
включительно. - Он должен выводить только целую форму числа между
0
и999999
и ничего больше (без пробелов). - Вход НЕ будет содержать
,
илиand
, как вone thousand, two hundred
илиfive hundred and thirty-two
. - Когда места десятков и единиц отличны от нуля, а места десятков больше чем
1
, они будут разделены символом HYPHEN-MINUS-
вместо пробела. То же самое для десяти тысяч и тысяч мест. Например,six hundred fifty-four thousand three hundred twenty-one
. - Программа может иметь неопределенное поведение для любого другого ввода.
Некоторые примеры хорошо управляемой программы:
zero
-> 0
fifteen
-> 15
ninety
-> 90
seven hundred four
-> 704
sixty-nine thousand four hundred eleven
-> 69411
five hundred twenty thousand two
->520002
popularity-contest
Авраам
источник
источник
Ответы:
Applescript
Глупое, смешное месиво, которое может расстроить некоторых людей из Купертино / Маунтин-Вью, но я думаю, что это творческое глупое, смешное месиво.
Использует OSX текст в речь, чтобы произнести текстовый номер, и поиск аудио Google, чтобы прослушать его и преобразовать в целое число.
Требования
Время задержки может потребоваться изменить в зависимости от времени загрузки Chrome и времени поиска в Google.
Пример ввода:
Пример вывода:
источник
Баш,
936455 символов *В фантастическом
bsd-games
пакете, который доступен в большинстве операционных систем Linux, есть маленькая игрушка командной строки под названиемnumber
. Он превращает числа в текст на английском языке, то есть полностью противоположен этому вопросу. Это действительно с точностью до наоборот: все правила в вопросе соблюдаютсяnumber
. Это почти слишком хорошо, чтобы быть совпадением.Конечно,
number
не отвечает на вопрос. Мы хотим это наоборот. Я немного подумал об этом, попробовал разбор строк и все такое, потом понял, что могу просто позвонитьnumber
на все 999,999 и посмотреть, совпадает ли что-то с вводом. Если это так, первая строка, в которой он совпадает, содержит вдвое больший номер строки, который я ищу (number
печатает строку точек после каждого числа). Просто как тот. Итак, без лишних слов, вот полный код для моей записи:Это даже короткое замыкание, поэтому преобразование «два» довольно быстро, и даже более высокие числа обычно декодируются менее чем за секунду на моем устройстве. Вот пример запуска:
Конечно, вам нужно
number
установить для этого, чтобы работать.*: Да, я знаю, это не
code-golf
проблема, но краткость - в значительной степени единственное разборчивое качество моей работы, так что ... :)источник
number
обратного - самая креативная вещь в этом ответе. Хотя игра в гольф тоже хороша :)Javascript
Тебе нравится
eval()
?Запустите этот скрипт в консоли вашего браузера.
Изменить: Спасибо за отзыв. Исправлены ошибки (снова).
источник
twelve
момента ее возвращения23
."twenty"
.seven thousand three hundred thirty five
дай мне10335
питон
Просто чтобы мяч катился.
источник
Perl + CPAN
Зачем изобретать велосипед, когда это уже сделано?
Эта программа считывает английские строки из стандартного ввода (или из одного или нескольких файлов, указанных в качестве аргументов командной строки), по одному в строке, и выводит соответствующие числа в стандартный вывод.
Я протестировал этот код, используя как пример входных данных для теста, так и исчерпывающий набор тестов, состоящий из чисел от 0 до 999999, преобразованных в текст с помощью
number
утилиты bsd-games (спасибо, Wander Nauta!), И он правильно анализирует все они. В качестве бонуса он также понимает такие входные данные, как, например,minus seven
(-7),four and twenty
(24),four score and seven
(87),one gross
(144),a baker's dozen
(13),eleventy-one
(111) иgoogol
(10 100 ).( Примечание. В дополнение к самому интерпретатору Perl этой программе также требуется модуль CPAN Lingua :: EN :: Words2Nums . Вот несколько инструкций по установке модулей CPAN . Пользователи Debian / Ubuntu Linux могут также установить этот модуль через менеджер пакетов APT как liblingua-en-words2nums-perl .)
источник
питон
Общее рекурсивное решение с проверкой достоверности. Можно упростить для требуемого диапазона чисел, но, я думаю, здесь можно похвастаться:
источник
VBScript 474
Это довольно рутинный ответ ... к сожалению, такой рутинный, что @Snack опубликовал тот же процесс, но до меня.
источник
Haskell
Я думаю, как и в других рекурсивных решениях, но я потратил время на то, чтобы привести его в порядок
Вот полный источник со всеми объяснениями: http://ideone.com/fc8zcB
источник
Common Lisp, 94
Преобразование числа в текст встроено в CL, но не наоборот. Создает обратное отображение для чисел и проверяет ввод на нем.
источник