Целью этого гольф-кода является преобразование целых чисел в английские слова.
Программа запрашивает ввод. Если этот ввод не является целым числом, выведите NaN
. Если это целое число, преобразуйте его в английские слова и напечатайте эти слова. Минимальный вход: 0 (ноль). Максимальный ввод: 9000 (девять тысяч).
Итак, 5
возвращает five
(регистр не имеет значения) и 500
возвращает five hundred
или five-hundred
(тире не имеет значения).
Некоторые другие правила:
A one
before hundred
или thousand
является необязательным: one hundred
это правильно, но hundred
тоже (если ввод 100
конечно).
Слово and
в к примеру one hundred and forty five
тоже необязательно.
Пробелы имеют значение. Так что 500
, five-hundred
или five hundred
правильно, но fivehundred
это не так.
Удачи!
Ответы:
Perl 281 байт
Новые строки добавлены для горизонтального здравомыслия. Вышеприведенное может быть использовано в интерактивном режиме или путем передачи значения через stdin.
Работает корректно для всех целочисленных значений в диапазоне [0, 19999] , значения вне этого диапазона демонстрируют неопределенное поведение. Нецелочисленные значения будут усечены до нуля, и поэтому будут сообщаться только значения, которые действительно не числовые
NaN
.Пример использования:
Пример вывода:
источник
NaN
JavaScript (375)
Вероятно, ужасная попытка, но в любом случае, здесь идет ...
Довольно напечатано (как функция):
Пример преобразования (обратите внимание, что он даже выводит,
NaN
когда выходит за пределы, то есть неверный ввод):источник
+1
это довольно сложно сделать лучше на таком языке, как JavaScript. (вы можете удалить пробел,N(s,z) {return
чтобы сохранить 1 символ)O
строке. Я исправлю это ..Mathematica
6057Использование:
Редактировать:
источник
Лисп,
7256 знаковЯ понимаю, 1), что это старо, и 2) что оно полностью полагается на работу стандартной библиотеки, но тот факт, что вы можете заставить систему печати c-lisp делать такие вещи, всегда меня поражал. Кроме того, это фактически принимает входные данные от пользователя, конвертирует их и распечатывает.
Всего 72 символа.
:junk-allowed
заставляет parse-integer возвращать ноль при ошибке, а не выдавать ошибку.~:[if-nil~;if-non-nill]
условно основывается на нуле, обрабатывает NaN, где это необходимо~:*
резервное копирование интерпретации аргумента для повторного использования ввода~r
печатает число в виде строки английского слова по запросу, за исключением случаев с точной пунктуациейОбразец:
Информация о Лиспе в основном из Практического Общего Лиспа .
Редактировать, правильно играть в гольф до 56 символов
Эта версия работает довольно по-другому. Вместо того, чтобы читать строку и преобразовывать ее, он вызывает считыватель lisp для интерпретации ввода как s-выражения lisp, пытается использовать его как число, и, если возникают какие-либо ошибки, игнорирует их, генерируя nil для подачи условной строки формата. Это может быть первый случай, когда я видел, что lisp создает действительно краткую программу ... Забавно!
(read)
Вызывает считыватель / анализатор lisp для чтения одного выражения из стандартного ввода и преобразования его в соответствующий объект(floor)
пытается преобразовать любой числовой тип в ближайшее нижнее целое число, нечисловые типы вызывают ошибку(ignore-errors ...)
делает то, что говорит на жестяной панели, он ловит и игнорирует любые ошибки во вложенном выражении, возвращая nil для подачи ветви NaN строки форматаисточник
PHP,
327310308 байтпринимает число в качестве параметра, работает для 0 <= n <= 12999
сломать
источник
SAS, 70 знаков
Операторы
window
anddisplay
открывают командную строку SAS. Ввод дляn
идет в строке 1. Это использует формат SAS,words.
который будет печатать число в виде слова или серии слов с «и», «» и «-» в зависимости от ситуации.источник
PHP
777 символов
Это определенно ужасная попытка, но вы не можете обвинить меня в использовании каких-либо лазеек, плюс это очень удачное число. Спасибо ProgramFOX за подсказку.
Длинная рука
источник
array('zero','one','two')
.['zero','one','two']
(php 5.4+). И если ты не возражаешьE_NOTICE
, это[zero,one,two]
тоже сработает.Python 2.x - 378
Производное ответа от Fireflys, хотя, если
P
включить миллион или триллионы и т. Д., Его можно рекурсивно использовать для любого диапазона положительных чисел. Это также поддерживает значения до 999 999Пример теста (вход есть
<<<
, выход есть>>>
):Хотя, если бы кто-то мог объяснить эту странную проблему «переполнения буфера», это было бы здорово ...
источник
print divmod(-2,1000) #-> (-1, 998)
-1*1000
и «остаток»998
.SmileBASIC,
365триста сорок семь байтовЕсть пробел, если последние одна или две цифры равны 0.
источник
MOO - 55 символов
player:tell($string_utils:english_number(read(player)))
Или, если мне не нужно печатать на «стандартный вывод» - 42 символа:
$string_utils:english_number(read(player))
Примечание: этот код не выводит подсказки на стандартный вывод и печатает
zero
вместоNaN
ввода, когда это не число.В качестве бонуса этот код может обрабатывать любое число в границах языка му (
2147483647
--2147483648
).источник
Wolfram Language
2740 байтовИспользуя нативную функцию
IntegerName
,Вышеуказанные запросы для ввода пользователя. Настоящая реализация возвращает «NaN», если пользователь вводит что-либо кроме целого числа.
Некоторые примеры (с предустановленными входами) :
источник
Python 2 , 333 байта
Попробуйте онлайн!
Это хорошо от 1 до 999 999 включительно.
источник
Pyth,
239242 байтаВвод представляет собой целое число в диапазоне [0-999,999]. Попробуйте это онлайн здесь . Объяснение в ожидании.
Предыдущая версия, очень похожая операция, но не поддерживает 0:
Объяснение предыдущей версии:
источник