Резюме
Преподавателю было сказано подготовить словесные задачи для учеников. Ей дан список уравнений и предложено записать их в виде соответствующей задачи слова. Тем не менее, она очень ленива, поэтому она не вкладывает много творчества в это. Вместо этого она просто пишет это буквально. Например, когда она читает 1+1
, она пишет one plus one
, 47 * 2
превратится в forty seven times two
и 56.2 / 7.4
станет fifty six point two divided by seven point four
.
Напишите код, чтобы помочь этому ленивому учителю.
Детали
- Числа могут включать десятичную точку и отрицательный знак.
- Числа должны быть написаны в короткой шкале. (т.е.
1,000,000,000
естьone billion
) - Числа могут доходить до 999 999 999 999 999 999 (
nine hundred ninety nine quadrillion...nine hundred ninety nine
). - Группы нулей должны быть опущены. например
1,000,000
,one million
нетone million zero thousand zero hundred
. - После десятичной запятой может быть произвольно много цифр.
- Цифры после десятичной точки должны быть перечислены цифра за цифрой. например
12.34
,twelve point three four
нетtwelve point thirty four
. - Два числа всегда разделены оператором.
- Допустимые операторы: плюс (
+
), минус (-
), время (*
) и деление на (/
). - Там нет скобок.
- Числа, такие как,
1234
возможно, могут включатьand
в свой вывод, как вone thousand two hundred *and* thirty four
. - Запятые и пробелы на входе могут игнорироваться.
Примеры
Вход: 24 + 65
Выход:twenty four plus sixty five
Вход: 3.33333 - 0
Выход:three point three three three three three minus zero
Вход: 3.6 * 18.18 / 999.0
Выход:three point six times eighteen point one eight divided by nine hundred ninety nine point zero
Вход: 1-1
Выход:one minus one
Вход: 1+-1
Выход:one plus negative one
Вход: 1,000,000,000 + 0.2
Выход:one billion plus zero point two
Вход: 123,000,456,789,012,345.6789
Выход:one hundred twenty three quadrillion four hundred fifty six billion seven hundred eighty nine million twelve thousand three hundred forty five point six seven eight nine
Вход: -4.3 * 7
Выход:negative four point three times seven
Вход: -1-1--1
Выход:negative one minus one minus negative one
123,456,789,012,345.6789
на примеры? Он должен охватывать множество тестовых случаев.minus
вместоnegative
?/
естьover
и отрицательное числоminus
, поэтому оно нуждается в некоторой манипуляции.Ответы:
JavaScript (ES6),
552532 байтаЭтот грязный монстр приходит прямо из глубин адского гольфа.
Ожидает входную строку без пробелов.
Попробуйте онлайн!
источник
btoa`ÍêèÒ‰ÞÒÜ(ÒØkyí¢êô~+ÞÒȱÒǯz}ŠmÒx§{K^ŸG¥z÷§ÒÜ–÷´¶«ÓGâM4z(!ÓKpz}-†*ô~Šô~'ôÓG¢‚4¶.±©ÝÒmÒÚôªæ�¯IÞ�«b½í)–ë4š)î³Kb™ë4v+âuçu×Vò`.replace(111,' ')
.Perl 6 ,
434 401 387359 байтПопробуйте онлайн!
Определенно, здесь есть место для улучшения. Я говорю это, но я продолжаю замечать крайние случаи, которые я не обработал
:(
. Предполагается, что входные данные имеют операторы, разделенные пробелом, а отрицание числа не отделено.Объяснение:
источник
Ruby + Swift 4,
283279270 байтПопробуйте онлайн!
Я, должно быть, схожу с ума, предлагая такое решение Франкенштейна, но, с одной стороны, очень заманчиво использовать встроенную функциональность Swift для этой задачи, а с другой стороны, обработка строк с помощью Regexes в Swift выглядит катастрофой для игры в гольф.
Поэтому я решил выполнить базовую обработку строк в Ruby, но чтобы разобрать числа, я храню их в исходном файле Swift, запускаю Swift в команде оболочки и собираю выходные данные.
Я выяснил, что средство форматирования чисел «spellOut» Свифта делает почти то, что нам нужно, за исключением вставки ненужных дефисов для двузначных чисел, как в
twenty-two
. На самом деле, даже вывод с плавающей запятой в форматеinteger part point digit digit...
хороший, но здесь есть предостережение - здесь нет бесконечной точности, и при достаточно больших числах или большом количестве десятичных цифр результаты ошибочны. Поэтому мне пришлось разделить целую и дробную части и кормить дробь цифрой.источник
сфк , 853 байта
Попробуйте онлайн!
Требует, чтобы операторы и числа были разделены хотя бы одним пробелом.
источник
Чисто ,
766... 687 байтПопробуйте онлайн!
Ожидается строка без пробелов.
источник
05AB1E ,
315295282276 байтПринимает ввод без пробелов.
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
Посмотрите этот совет 05AB1E (разделы « Как использовать словарь?» , « Как сжать строки, не являющиеся частью словаря?» И « Как сжать большие целые числа?» ), Чтобы понять, почему:
'¢…
есть"negative"
;'¡×
есть"zero"
;“†ìˆÈŒšï¿Ÿ¯¥Š“
есть"four five six seven eight nine"
;'…§
есть"teen"
;…€µ‚•„í
есть"one two three"
;…—¿áÓÁÏ
есть"ten eleven twelve"
;'°¡
есть"hundred"
;'¾ß
есть"ion"
;…¡›‡È±°
есть"billion million thousand"
;'…®
есть"point"
; 蓉´Øè„ƺߓ
есть"plus minus times divided"
..•6b©•
есть"thir"
;.•4º»Ÿć'Rþн•
есть"twenthirforfif"
; и.•cG3₅¦„¥F•
есть"quadrilltrill"
.ŽH$
есть4433
.источник
Python 2 ,
790774 байтаПопробуйте онлайн!
Так много плохих практик. Это почти больно писать ....
Ожидает не-Unicode строку без пробелов в качестве ввода.
Объяснение:
Я уменьшил примерно на 150 байтов при написании объяснения. Пусть никогда не будет сказано, что комментирование / рецензирование вашего кода бесполезно!
источник