Это год MDLXVII в мире, в котором никогда не пала Римская империя, и никогда не происходил крах в темные века. Из-за длительного периода Pax Romana, экономическая стабильность империи позволила технологии развиваться быстрыми темпами.
Римляне начали увлекаться схемотехникой и изобрели оригинальный калькулятор, который не требует использования кнопки «равно». Они называют это "римско-польской нотацией"
Чтобы сделать расчет, они сначала вводят свои операнды, а затем операцию.
Например, 100 + 11 * 20 будет C XI XX * +
.
Дополнительно
Римляне обнаружили, что им часто нужно выполнять несколько вычислений одновременно, и предпочитают, чтобы метод возвращал каждое значение «в стеке» в некой структуре типа массива / списка / кортежа. (например X I + X I - CC II +
, вернется [11, 9, 202])
Задача состоит в том, чтобы разработать программу-калькулятор, способную выполнять эти вычисления.
Пояснение : требуется вычитание. Я не осознавал, что это не было признано в древнеримской империи. Задача была поэтому неоднозначной, и я прошу прощения.
Минимальные рекомендации
- Ваш вывод будет в арабских цифрах.
- Вам нужно только конвертировать из римских цифр до 5000.
- Вам нужно будет поддерживать операции +, -, /, * (сложение, вычитание, деление и умножение).
- Будет ли деление основано на числах с плавающей запятой или на целых числах, зависит от реализации. Либо работает для этого вызова.
- Ваш вывод должен поддерживать номера до 4 миллиардов.
- Самый короткий ответ в целом, И на каждом языке выигрывает. Это Code Golf Challenge, но я люблю разнообразие.
В случае ничьей такие факторы, как поддержка римских цифр выше 5000 или дополнительные операции, будут считаться наиболее ранними.
Ответы:
Python 2 + римский , 118 байт
демонстрация
Он не может быть протестирован онлайн из-за модуля, который он использует, но вы можете увидеть, как запустить его здесь (полная программа, принимающая входные данные из STDIN - выражение с кавычками - и распечатывающая выходные данные в STDOUT - в форме списка стек). Использует немного более старую версию, потому что я не буду создавать новый GIF только для нескольких байтов:
Чтобы установить пакет, вы можете запустить следующее в терминале / командной строке:
источник
pyTester/Py.py
ಠ_ಠHaskell , 217 байт
-13 байтов благодаря Брюсу Форте. -73 байта благодаря Орджану Йохансену.
Попробуйте онлайн!
Ручная реализация, ууу!
источник
l=1:4:5:9:map(10*)l
.SOGL V0.12 , 57 байт
Попробуй здесь!
источник
JavaScript (узел) + романы + stk-lang , 74 байта
Возвращает список больших участников.
выполнение
Запустите следующее:
Затем вставьте функцию. Пример:
источник
$
и>
. Честно говоря, мне это нравитсяДьялог АПЛ , 93 байта
Попробуйте онлайн!
116 байт без римской встроенной
источник
var fn←arr
- это эквивалентноvar ← var fn arr
. Здесь это используется в нескольких местах,a,←⍵
будучи тем, которое добавляет⍵
к переменнойa
Python 3 ,
280206 байтПопробуйте онлайн!
На этот раз с поддержкой вычитающих обозначений. Метод
c
является основной точкой входа; другой - поддержка.Редактировать журнал:
источник
if
иelse
.n+=v-n%v*2
str
использования. Попробуйте онлайн!JavaScipt (ES6),
152151 байтСохранено 1 байт благодаря пользователю 202729
Контрольные примеры
Показать фрагмент кода
Объяснение (меньше в гольфе)
источник
1e3
также работает и экономит некоторые байты.Желе , 82 байта
Попробуйте онлайн!
Первоначально опубликовано в чате .
Объяснение:
Поскольку у Jelly нет стека, я поместил этот стек в реестр.
Когда программа запускается, значением регистра
®
является то0
, которое рассматривается как[0]
для целей этой программы.источник
Python 3 ,
216187 байтПопробуйте онлайн!
Потому что оно появилось в комментариях как к вопросу, так и к этому ответу и, вероятно, привело к отрицательному голосованию: это представление не поддерживает субтрактивную запись. Обоснование: Субтрактивная запись редко использовалась в Римской империи и только популяризировалась позже (см. Subtractive Notation , параграф 3, последнее предложение). Задача предполагает Римскую империю, которая разработала программируемые интегральные схемы, а не ту, которая претерпела те же культурные изменения, что и Европа 13-го века. В описании не упоминаются субтрактивные обозначения, и ни один из примеров не использует их.
источник
CIV
(104).