Введение:
Вдохновлен дискуссией, которая продолжается уже много лет относительно выражения .
С выражением математики быстро увидят, что правильный ответ - , тогда как люди с простым математическим образованием из школы быстро увидят, что правильный ответ - . Так откуда же этот спор и, следовательно, разные ответы? В том, как написано есть два противоречивых правила . Один из-за части
2(
, а другой из-за символа деления÷
.Хотя и математики, и «обычные люди» будут использовать PEMDAS (скобки - экспоненты - деление / умножение - сложение / вычитание), для математиков выражение оценивается так, как показано ниже, потому что аналогично, например, моному также известный как « один член , обусловленные подразумеваемые умножения на противопоставлении » (и , следовательно , часть
P
вPEMDAS
), которые будут оценены иначе , чем (а биномиальные ака два термины):
Принимая во внимание, что для «обычных людей» и будут одинаковыми (и, следовательно, частью
MD
inPEMDAS
), поэтому они будут использовать это вместо:
÷
/
÷
÷
/
÷
†: хотя я нашел несколько источников, объясняющих, как ÷
это использовалось в прошлом (см. ††† ниже), я не смог найти убедительных доказательств того, что это изменилось где-то в 1918 году. Но ради этого испытания мы предполагаем, что 1918 год был поворотный момент, когда ÷
и
/
начинает означать то же самое, где они отличались в прошлом.
††: Другие символы также использовались в прошлом для разделения, как
:
в 1633 году (или сейчас все еще в Нидерландах и других европейских не говорящих по-английски странах, поскольку это то, что я лично выучил в начальной школе xD) или)
в 1540-е гг. Но для этого вызова мы сосредоточимся только на значении символа обелуса до 1918 года÷
.
†††: Источники: эта статья в целом . А до 1918 года правила в отношении÷
упоминаются: этой Американский Математический Monthly статью с февраля 1917 года ; эта немецкая книга по тевчской алгебре от 1659 г., стр. 9 и стр. 76 ; это первая книга по алгебрес 1895 г., стр. 46 [48/189] .Немного не по теме: что касается фактического обсуждения этого выражения: оно никогда не должно быть написано, как это, во-первых! Правильный ответ не имеет значения, если вопрос неясен. * Кликает кнопку «закрыть, потому что неясно, что вы спрашиваете» * .
И, к слову, даже разные версии калькуляторов Casio не знают, как правильно справиться с этим выражением:
Вызов:
Вам дают два входа:
- (Действительное) математическое выражение, состоящее только из символов
0123456789+-×/÷()
- Год
÷
/
Правила соревнований:
- Вы можете предположить, что математическое выражение является действительным и использует только символы
0123456789+-×/÷()
. Это также означает, что вам не придется иметь дело с возведением в степень. (Вам также разрешается использовать другие символы для×
или÷
(то есть*
или%
), если это помогает игре в гольф или если ваш язык поддерживает только ASCII.) - Вам разрешается добавлять разделители пробелов к выражению ввода, если это помогает (возможно, вручную) вычислить выражение.
- Ввод / вывод является гибким. Входные данные могут быть в виде строки, символьного массива и т. Д. Год может быть в виде целого числа, объекта даты, строки и т. Д. Выходными данными будет десятичное число.
- Вы можете предположить, что не будет никакого деления на 0 тестовых случаев.
- Вы можете предположить, что числа во входном выражении будут неотрицательными (поэтому вам не придётся иметь дело с разграничением
-
как отрицательного символа, так и-
символа вычитания). Однако выходной сигнал все еще может быть отрицательным! - Вы можете предположить,
N(
что всегда будет написано какN×(
вместо. Мы сосредоточимся только на втором противоречии символов деления/
против÷
этого испытания. - Десятичные выходные значения должны иметь точность не менее трех десятичных цифр.
÷
÷
×
/
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - Стандартные правила применяются к вашему ответу с правилами ввода / вывода по умолчанию , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода (например, TIO ).
- Кроме того, добавление объяснения для вашего ответа настоятельно рекомендуется.
Тестовые случаи:
Input-expression: Input-year: Output: Expression interpretation with parenthesis:
6÷2×(1+2) 2018 9 (6/2)×(1+2)
6÷2×(1+2) 1917 1 6/(2×(1+2))
9+6÷3-3+15/3 2000 13 ((9+(6/3))-3)+(15/3)
9+6÷3-3+15/3 1800 3 (9+6)/((3-3)+(15/3))
4÷2÷2 1918 1 (4/2)/2
4÷2÷2 1900 4 4/(2/2)
(1÷6-3)×5÷2/2 2400 -3.541... ((((1/6)-3)×5)/2)/2
(1÷6-3)×5÷2/2 1400 1.666... ((1/(6-3))×5)/(2/2)
1×2÷5×5-15 2015 -13 (((1×2)/5)×5)-15
1×2÷5×5-15 1719 0.2 (1×2)/((5×5)-15)
10/2+3×7 1991 26 (10/2)+(3×7)
10/2+3×7 1911 26 (10/2)+(3×7)
10÷2+3×7 1991 26 (10/2)+(3×7)
10÷2+3×7 1911 0.434... 10/(2+(3×7))
4÷2+2÷2 2000 3 (4/2)+(2/2)
4÷2+2÷2 1900 2 4/((2+2)/2)
4÷2×2÷3 9999 1.333... ((4/2)×2)/3
4÷2×2÷3 0000 3 4/((2×2)/3)
((10÷2)÷2)+3÷7 2000 2.928... ((10/2)/2)+(3/7)
((10÷2)÷2)+3÷7 1900 0.785... (((10/2)/2)+3)/7
(10÷(2÷2))+3×7+(10÷(2÷2))+3×7
1920 62 (10/(2/2))+(3×7)+(10/(2/2))+(3×7)
(10÷(2÷2))+3×7+(10÷(2÷2))+3×7
1750 62 (10/(2/2))+(3×7)+(10/(2/2))+(3×7)
10÷2/2+4 2000 6.5 ((10/2)/2)+4
10÷2/2+4 0100 2 10/((2/2)+4)
9+6÷3-3+15/3 9630 13 9+(6/3)-3+(15/3)
9+6÷3-3+15/3 0369 3 (9+6)/(3-3+(15/3))
`=`=`/`
это дьявольское! Отличное решение!