Вызов
Напишите калькулятор, который принимает входные данные в словесной форме (как можно выразиться в уравнении), а также выводит данные в словесной форме (как можно выразиться числом).
правила
Калькулятор должен уметь:
- складывать, вычитать, умножать и делить
- обрабатывать операнды от одного миллиона до одного миллиона
- обрабатывать выходные данные от отрицательного миллиарда до одного миллиарда
- обрабатывать десятичные точки на входе и правильно размещать их на выходе
- обработать десятичный вывод до сотого места, округляя при необходимости
Все операции, дающие дробные результаты, должны округляться до ближайшего сотого места (идентично выходному форматированию).
Отчет с выводом «E» (для ошибки), когда ввод вызовет сбой программы из-за неправильного форматирования или деления на 0; в основном, программа не должна давать сбой при неправильном вводе, потому что это будет паршивый калькулятор.
Калькулятор разрешен , но не обязателен для сообщения об ошибках, когда операнды или выходные данные выходят за их пределы. Это должно упростить проблему, но если вы не согласны со мной, не стесняйтесь сделать калькулятор способным правильно обрабатывать большие операнды и выходные данные без сообщения об ошибках.
Выведите «E» в том случае, если операнд для операции превышает границы, определенные для операндов.
Выведите «E» в случае, если выход превышает границы, описанные для выходов
Как программа обрабатывает чувствительность к регистру и пробелы оставлены на усмотрение гольфиста, как и выбор британского или американского английского. 1
Программы, которые обходят реализацию калькулятора с использованием языка или библиотеки, в которой уже реализованы функции, описанные выше, не будут иметь права на победу.
победитель
Программа с наименьшим количеством символов выигрывает.
Примеры
Вход: два плюс два
Выход: четыре
Вход: двадцать одна точка пять минус одна точка пять
Выход: двадцать
Вход: один минус два
Выход: отрицательный
Вход: пять раз пять
Выход: двадцать пять
Вход: двадцать пять, разделенный на пять
Выход: пять
Входные данные: два плюс два минус пять, умноженные на пять, деленные на отрицательную нулевую точку пять
Выходные данные: десять
Ввод один миллион раз одна тысяча Ввод
: один миллиард
Вход: миллион раз тысяча плюс один
Выход: E
Ввод: два миллиона плюс один миллион
Вывод: E
Ввод: один миллион плюс один миллион плюс один миллион Ввод
: E
two plus two minus five times five divided by negative zero point five
->2 + 2 - 5 * 5 / -0.5
->54
.one million one
на входе илиone billion one
на выходе? Кроме того, лимит 1e6 или 1e9 применим также и к промежуточным результатам?one hundred divided by three point nought
? (Кроме того, почему выходные данные последнего примера,E
а неthree million
?)Ответы:
Прежде всего, это абсолютно обманчиво и не полностью соответствует спецификациям.
требует
--disable-web-security
флаг на хром, +22Javascript 509 + 22 = 531
Первый от спецификации, а это на примере вывода
Входные
two plus two minus five times five divided by negative zero point five
выходыЛюбой другой случай должен быть обработан нормально (сейчас), это все еще довольно безрассудно, я просто хотел, чтобы это было исправлено.
Да, и если вы действительно собираетесь его протестировать, это может занять несколько секунд, так как он загружает полную страницу Wolfram Alpha до двух раз.
Ну, может быть, есть что улучшить.
источник
Питон, 982
Я думаю, что это работает как следует в соответствии со спецификациями, но, вероятно, есть еще несколько ошибок. Это может показаться странным для ввода> = одного миллиарда или любых неожиданных слов, которые он неправильно интерпретирует.
Вот немного более читаемая версия с некоторыми изменениями:
источник
Там мы идем. Гольф-версия раньше сломала ее, но теперь мы снова в сети. Я уверен, что это может быть дальше в гольфе. Я буду работать над этим больше завтра. Это было достаточно трудно, чтобы заставить его работать должным образом, БЕЗ игры в гольф, хотя, и мои глаза устали смотреть на это. ха-ха
Ява - 3220
С переносами строк и вкладками
источник