Недавно я писал новый язык , чтобы избежать необходимости обрабатывать порядок операций , я просто заключил в скобки каждое выражение правильно, чтобы полностью избежать этого.
Поскольку круглые скобки находятся в кодировках 40-41, ваш код должен быть максимально коротким.
Примеры
1+2*3
(1+(2*3))
2*(3+4)
(2*(3+4))
2*3/4+3
(((2*3)/4)+3)
342*32/8
((342*32)/8)
правила
Единственные операции, которые вам нужно выполнить: *
(умножение), /
(деление), +
(сложение) и -
(вычитание).
- Порядок операций является:
- круглая скобка
- Умножение, деление
- Сложение, вычитание
- Вы должны предпочесть идти влево-вправо
- Входные числа всегда будут положительными целыми числами (см. Бонусы)
Бонусы
-20%, если вы справляетесь с отрицанием:
3+-5
(3+(-5))
-5%, если вы разрешаете размещать пробелы внутри ввода:
3 + 4
(3+4)
-10%, если вы можете обрабатывать десятичные дроби во входных данных:
1+.12
(1+.12)
1+0.21/3
(1+(0.21/3))
500 вознаграждений: если вам удастся написать ответ в Безымянный / Блоки
code-golf
arithmetic
balanced-string
Downgoat
источник
источник
1+2+3+4
(какие решения могут быть заключены в скобки((1+2)+(3+4))
)Ответы:
Python, 153 * 0,9 = 137,7 байта
Эта программа обрабатывает десятичный ввод.
Вторая строка начинается с пробела, вторая начинается с табуляции, третья - с двумя табуляциями, а третья - с пробелом. Это спасло один байт. Вот hexdump (
xxd
pp):Вот программа, которую я использовал для тестирования: (Сохраните программу выше как
paren.py
)Убедитесь, что ваш терминал использует
\033[38;5;<COL>m
escape-код для цветов.источник
prefer to go left-right
. Попробуйте контрольный пример 3 в ОП, ваш результат не верен. Это может быть реальной проблемой, например, с целочисленной арифметикой((2*(3/4))+3)
:! =(((2*3)/4)+3)
JavaScript (ES6) 179 (263 -20% -5% -10%)
Поскольку два других ответа в настоящее время неверны, я опубликую свой. Это изменение выражения синтаксического анализа , который я использовал здесь и здесь , а где - то в другом месте. Ищите там более подробные объяснения алгоритма.
Это довольно громоздко, но это должно работать.
Тестовый фрагмент
источник
Python, 241 * 0,8 * 0,95 * 0,9 = 164,84 символов
Я использую библиотеку ast (Абстрактные Синтаксические Деревья) и диктант замены доморощенной строки. Замена струны стоит дорого, но бонус помогает удерживать счет несколько низким. Возможно (часть замены последовательности) может быть гольфом далее.
Обратите внимание, что это решение добавляет дополнительные скобки вокруг каждого числа, но я думаю, что это в духе вопроса
Тестирование:
Вывод набора тестов:
источник
import ast
в вашем коде