Упрощенная версия калькулятора английских цифр
задача
Напишите программу, которая принимает строку в качестве входных данных и выводит результат выражения.
правила
Входная строка будет сформулирована и не будет цифровой.
Там не будет скобок.
Порядок расчета будет делить, умножать, вычитать, а затем добавить.
Для тех же операций расчеты должны выполняться слева направо.
Все входные числа будут целыми числами от -999 до 999 (оба включительно)
Вывод будет целым числом любого диапазона.
Деление всегда будет делиться идеально, и ноль никогда не будет знаменателем.
Ограничение случая для ввода не является обязательным. Вам не нужно проверять правильность ввода.
Числовой формат
0 to 20 -> zero,one,two...nineteen,twenty
21 to 99 -> twenty one,twenty two.....ninety eight,ninety nine
100 to 999 -> one hundred, one hundred one, one hundred two...one hundred ten....two hundred fifty....nine hundred ninety eight,nine hundred ninety nine
Для отрицательных чисел: добавьте minus
к положительному эквиваленту
Формат операции
Addition: one plus two
Subtraction: one minus two
Multiplication: one time two #Note that for one on the left of multiplication, it is one time and not times.
two times one hundred
Division: forty divided by two
Примеры:
o/p <- input
20 four times five
35 twenty plus fifteen
70 fifty plus five times four
-90 minus one time ninety
25 twenty one minus minus four
45 ninety divided by two
700 one time seven hundred
555 one hundred eleven times two plus three hundred thirty three
99 one hundred plus minus one
45 forty five plus two hundred times zero
4 four
-3 three minus three minus three
Это код-гольф, поэтому выигрывает самый короткий код
one times two
. Используетtime
нормально?Ответы:
JavaScript (ES6),
257252249235 байтСохранено 3 байта благодаря @Shaggy
Попробуйте онлайн!
Как?
чисел
операторы
интерпретация
источник
Perl 6 ,
170 139 129 128 124122 байта-13 байт благодаря nwellnhof!
Попробуйте онлайн!
unival
снова на помощь! Это (в настоящее время) даже бить языки игры в гольф, как05AB1E
!Объяснение:
источник
Python 2 ,
333...284277275 байтПопробуйте онлайн!
источник
Wolfram Language
95 9482 байта#
представляет вход для чистой функции.При необходимости
StringReplace
заменяет «время» на «время», «плюс минус» на «минус» (через"me "->"mes "
,"plus m"->"m
«соответственно). Сокращенные формы замены, предложенные пользователемlirtosiast
, сэкономили 12 байтов.Interpreter["SemanticExpression"]
делает все остальное.источник
"time "->"times "
на"me"->"mes"
и"plus minus"->"minus"
на"plus m"->"m"
?05AB1E ,
166147141139135 байтовСлишком долго .. Попробую сыграть в гольф отсюда.
-4 байта благодаря @Emigna .
-2 байта благодаря @JoKing .
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
Смотрите этот 05AB1E наконечника шахты (разделы Как пользоваться словарем? , Как сжать строки не часть словаря? И Как сжать большие целые числа? ) , Чтобы понять , как
“¡×€µ‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿áÓÁÏ“
,'…§
,'°¡
,.•4º»Ÿć'Rþн•
,Ž9o
, 蓉´Øè„Æ€ººß“
работу.Пошаговый пример:
two hundred twenty two divided by two times minus fifty seven plus three hundred eighteen minus minus ten
two hundred twenty two divided two times minus fifty seven plus three hundred eighteen minus minus ten
2 hundred twenty 2 divided 2 times minus fifty 7 plus 3 hundred 8een minus minus 10
2 hundred weny 2 divided 2 imes minus fify 7 plus 3 hundred 8een minus minus 10
2 hundred weny 2 divided 2 imes minus fify 7 plus 3 hundred 8+10 minus minus 10
2 *100 weny 2 divided 2 imes minus fify 7 plus 3 *100 8+10 minus minus 10
2 *100 2y 2 divided 2 imes minus 5y 7 plus 3 *100 8+10 minus minus 10
2 *100 2 *10 2 divided 2 imes minus 5 *10 7 plus 3 *100 8+10 minus minus 10
["2 *100 2 *10 2 "," 2 "," "," 5 *10 7 "," 3 *100 8+10 "," "," 10"]
[["2","","*100","2","*10","2",""],["","","2",""],["",""],["","5","*10","7",""],["","3","","*100","8+10",""],["",""],["","10"]]
[["2","*100","2","*10","2"],["2"],[],["5","*10","7"],["3","*100","8+10"],[],["10"]]
[["2*100","2*10","2"],["2"],"",["5*10","7"],["3*100","8+10"],"",["10"]]
eval
каждый:[[200,20,2],[2],"",[50,7],[300,18],"",[10]]
[222,2,"",57,318,"",10]
dividedimesminusplusminusminus
[" /"," *"," -"," +"," -"," -"]
222 /2 * -57 +318 - -10
eval
строка, и вывод неявно:-5999.0
источник
сфк ,
572449423 байтаЭто все может быть одна строка, но для чтения я использовал вместо строки пробелы.
Попробуйте онлайн!
источник