What is 6÷2×(1+2) =?How many friday the 13th in a year?1+1 = 10, 1+2 = 3Write a Morse CalculatorWeapons of...

Quickly creating a sparse array

Is it a fallacy if someone claims they need an explanation for every word of your argument to the point where they don't understand common terms?

Why are the books in the Game of Thrones citadel library shelved spine inwards?

Can we harness gravitational potential energy?

How can I get my players to come to the game session after agreeing to a date?

What would be the rarity of this magic item(s)?

Nested word series [humans only]

Why exactly do action photographers need high fps burst cameras?

Why did Luke use his left hand to shoot?

Why zero tolerance on nudity in space?

When can a QA tester start his job?

How did Ancient Greek 'πυρ' become English 'fire?'

Story about a person invited to join council of intellects

Is using an 'empty' metaphor considered bad style?

What is the most fuel efficient way out of the Solar System?

Which one of these password policies are more secure?

Why is it that Bernie Sanders is always called a "socialist"?

Odd 74HCT1G125 behaviour

Can a hotel cancel a confirmed reservation?

What incentives do banks have to gather up loans into pools (backed by Ginnie Mae)and selling them?

What is 6÷2×(1+2) =?

Consequences of lack of rigour

A Missing Symbol for This Logo

Can I make estimated tax payments instead of withholding from my paycheck?



What is 6÷2×(1+2) =?


How many friday the 13th in a year?1+1 = 10, 1+2 = 3Write a Morse CalculatorWeapons of Math InstructionThe Final NumberArbitrary PEMDASInteger-Digits of the Arithmetic-TablesMissing numbers in arithmetic sumThrough Space and TimeMatrix Jigsaw Puzzles













4












$begingroup$


Feel free to skip this introduction and go to the challenge part, if you don't care about the background and inspiration of this challenge.



Introduction:



Inspired by a discussion that is already going on for many years regarding the expression $6÷2(1+2)$.



Irrelevant part for this challenge, but still interesting to know:




With the expression $6÷2(1+2)$, mathematicians will quickly see that the correct answer is $1$, whereas people with a simple math background from school will quickly see that the correct answer is $9$. So where does this controversy and therefore different answers come from? There are two conflicting rules in how $6÷2(1+2)$ is written. One due to the part 2(, and one due to the division symbol ÷.


Although both mathematicians and 'ordinary people' will use PEMDAS (Parenthesis - Exponents - Division/Multiplication - Addition/Subtraction), for mathematicians the expression is evaluated like this below, because $2(3)$ is just like for example $2x^2$ a monomial a.k.a. "a single term due to implied multiplication by juxtaposition" (and therefore part of the P in PEMDAS), which will be evaluated differently than $2×(3)$ (a binomial a.k.a. two terms):

$$6÷2(1+2) → frac{6}{2(3)} → frac{6}{6} → 1$$


Whereas for 'ordinary people', $2(3)$ and $2×(3)$ will be the same (and therefore part of the MD in PEMDAS), so they'll use this instead:

$$6÷2(1+2) → 6/2×(1+2) → 6/2×3 → 3×3 → 9$$




However, even if we would have written the original expression as $6÷2×(1+2)$, there can still be some controversy due to the use of the division symbol ÷. In modern mathematics, the / and ÷ symbols have the exact same meaning: divide. Some rules pre-1918 regarding the division symbol ÷†† state that it had a different meaning than the division symbol /. This is because ÷ used to mean "divide the number/expression on the left with the number/expression on the right"†††. So $a ÷ b$ then, would be $(a) / (b)$ or $frac{a}{b}$ now. In which case $6÷2×(1+2)$ would be evaluated like this by people pre-1918:



$$6÷2×(1+2) → frac{6}{2×(1+2)} → frac{6}{2×3} → frac{6}{6} → 1$$



†: Although I have found multiple sources explaining how ÷ was used in the past (see ††† below), I haven't been able to find definitive prove this changed somewhere around 1918. But for the sake of this challenge we assume 1918 was the turning point where ÷ and / starting to mean the same thing, where they differed in the past.
††: Other symbols have also been used in the past for division, like : in 1633 (or now still in The Netherlands and other European non-English speaking countries, since this is what I've personally learned in primary school xD) or ) in the 1540s. But for this challenge we only focus on the pre-1918 meaning of the obelus symbol ÷.
†††: Sources: this article in general. And the pre-1918 rules regarding ÷ are mentioned in: this The American Mathematical Monthly article from February 1917; this German Teutsche Algebra book from 1659 page 9 and page 76; this A First Book in Algebra from 1895 page 46 [48/189].



Slightly off-topic: regarding the actual discussion about this expression: It should never be written like this in the first place! The correct answer is irrelevant, if the question is unclear. *Clicks the "close because it's unclear what you're asking" button*.

And for the record, even different versions of Casio calculators don't know how to properly deal with this expression:
enter image description here



Challenge:



You are given two inputs:




  • A (valid) mathematical expression consisting only of the symbols 0123456789+-×/÷()

  • A year


And you output the result of the mathematical expression, based on the year (where ÷ is used differently when $year<1918$, but is used exactly the same as / when $yearge1918$).



Challenge rules:




  • You can assume the mathematical expression is valid and only uses the symbols 0123456789+-×/÷(). This also means you won't have to deal with exponentiation. (You are also allowed to use a different symbols for × or ÷ (i.e. * or %), if it helps the golfing or if your language only supports ASCII.)

  • You are allowed to add space-delimiters to the input-expression if this helps the (perhaps manual) evaluation of the expression.

  • I/O is flexible. Input can be as a string, character-array, etc. Year can be as an integer, date-object, string, etc. Output will be a decimal number.

  • You can assume there won't be any division by 0 test cases.

  • You can assume the numbers in the input-expression will be non-negative (so you won't have to deal with differentiating the - as negative symbol vs - as subtraction symbol). The output can however still be negative!

  • You can assume N( will always be written as N×( instead. We'll only focus on the second controversy of the division symbols / vs ÷ in this challenge.

  • Decimal output-values should have a precision of at least three decimal digits.

  • If the input-expression contains multiple ÷ (i.e. $4÷2÷2$) with $year<1918$, they are evaluated like this: $4÷2÷2 → frac{4}{frac{2}{2}} → frac{4}{1} → 4$. (Or in words: number $4$ is divided by expression $2 ÷2$, where expression $2 ÷2$ in turn means number $2$ is divided by number $2$.)

  • Note that the way ÷ works implicitly means it has operator precedence over × and / (see test case $4÷2×2÷2$).

  • You can assume the input-year is within the range $[0000, 9999]$.


General rules:




  • This is code-golf, so shortest answer in bytes wins.

    Don't let code-golf languages discourage you from posting answers with non-codegolfing languages. Try to come up with an as short as possible answer for 'any' programming language.


  • Standard rules apply for your answer with default I/O rules, so you are allowed to use STDIN/STDOUT, functions/method with the proper parameters and return-type, full programs. Your call.


  • Default Loopholes are forbidden.

  • If possible, please add a link with a test for your code (i.e. TIO).

  • Also, adding an explanation for your answer is highly recommended.


Test cases:



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)









share|improve this question











$endgroup$












  • $begingroup$
    You know, I really don't like the PEMDAS acronym, because at first glance, it appears to imply that Multiplication comes before Division and Addition comes before Subtraction...
    $endgroup$
    – Jo King
    1 hour ago








  • 1




    $begingroup$
    Since the issue of N( is irrelevant for this challenge, it just confuses matters. Even your title is misleading. Remove all mention of that!
    $endgroup$
    – Adám
    1 hour ago












  • $begingroup$
    I found it very odd that you use MathJax and ÷ in the post, but use * instead of ×. I'd use the proper symbols ÷ and × but allow % and * as alternates.
    $endgroup$
    – Adám
    1 hour ago










  • $begingroup$
    @Adám I've put the irrelevant N( part in a spoiler with a note that it's irrelevant for the challenge. I've also changed all * to ×.
    $endgroup$
    – Kevin Cruijssen
    1 hour ago






  • 1




    $begingroup$
    @KirillL. Anything is fine, as long as it's not one of the other symbols already used. Can be x, D, etc. So the = you've used now is fine.
    $endgroup$
    – Kevin Cruijssen
    16 mins ago
















4












$begingroup$


Feel free to skip this introduction and go to the challenge part, if you don't care about the background and inspiration of this challenge.



Introduction:



Inspired by a discussion that is already going on for many years regarding the expression $6÷2(1+2)$.



Irrelevant part for this challenge, but still interesting to know:




With the expression $6÷2(1+2)$, mathematicians will quickly see that the correct answer is $1$, whereas people with a simple math background from school will quickly see that the correct answer is $9$. So where does this controversy and therefore different answers come from? There are two conflicting rules in how $6÷2(1+2)$ is written. One due to the part 2(, and one due to the division symbol ÷.


Although both mathematicians and 'ordinary people' will use PEMDAS (Parenthesis - Exponents - Division/Multiplication - Addition/Subtraction), for mathematicians the expression is evaluated like this below, because $2(3)$ is just like for example $2x^2$ a monomial a.k.a. "a single term due to implied multiplication by juxtaposition" (and therefore part of the P in PEMDAS), which will be evaluated differently than $2×(3)$ (a binomial a.k.a. two terms):

$$6÷2(1+2) → frac{6}{2(3)} → frac{6}{6} → 1$$


Whereas for 'ordinary people', $2(3)$ and $2×(3)$ will be the same (and therefore part of the MD in PEMDAS), so they'll use this instead:

$$6÷2(1+2) → 6/2×(1+2) → 6/2×3 → 3×3 → 9$$




However, even if we would have written the original expression as $6÷2×(1+2)$, there can still be some controversy due to the use of the division symbol ÷. In modern mathematics, the / and ÷ symbols have the exact same meaning: divide. Some rules pre-1918 regarding the division symbol ÷†† state that it had a different meaning than the division symbol /. This is because ÷ used to mean "divide the number/expression on the left with the number/expression on the right"†††. So $a ÷ b$ then, would be $(a) / (b)$ or $frac{a}{b}$ now. In which case $6÷2×(1+2)$ would be evaluated like this by people pre-1918:



$$6÷2×(1+2) → frac{6}{2×(1+2)} → frac{6}{2×3} → frac{6}{6} → 1$$



†: Although I have found multiple sources explaining how ÷ was used in the past (see ††† below), I haven't been able to find definitive prove this changed somewhere around 1918. But for the sake of this challenge we assume 1918 was the turning point where ÷ and / starting to mean the same thing, where they differed in the past.
††: Other symbols have also been used in the past for division, like : in 1633 (or now still in The Netherlands and other European non-English speaking countries, since this is what I've personally learned in primary school xD) or ) in the 1540s. But for this challenge we only focus on the pre-1918 meaning of the obelus symbol ÷.
†††: Sources: this article in general. And the pre-1918 rules regarding ÷ are mentioned in: this The American Mathematical Monthly article from February 1917; this German Teutsche Algebra book from 1659 page 9 and page 76; this A First Book in Algebra from 1895 page 46 [48/189].



Slightly off-topic: regarding the actual discussion about this expression: It should never be written like this in the first place! The correct answer is irrelevant, if the question is unclear. *Clicks the "close because it's unclear what you're asking" button*.

And for the record, even different versions of Casio calculators don't know how to properly deal with this expression:
enter image description here



Challenge:



You are given two inputs:




  • A (valid) mathematical expression consisting only of the symbols 0123456789+-×/÷()

  • A year


And you output the result of the mathematical expression, based on the year (where ÷ is used differently when $year<1918$, but is used exactly the same as / when $yearge1918$).



Challenge rules:




  • You can assume the mathematical expression is valid and only uses the symbols 0123456789+-×/÷(). This also means you won't have to deal with exponentiation. (You are also allowed to use a different symbols for × or ÷ (i.e. * or %), if it helps the golfing or if your language only supports ASCII.)

  • You are allowed to add space-delimiters to the input-expression if this helps the (perhaps manual) evaluation of the expression.

  • I/O is flexible. Input can be as a string, character-array, etc. Year can be as an integer, date-object, string, etc. Output will be a decimal number.

  • You can assume there won't be any division by 0 test cases.

  • You can assume the numbers in the input-expression will be non-negative (so you won't have to deal with differentiating the - as negative symbol vs - as subtraction symbol). The output can however still be negative!

  • You can assume N( will always be written as N×( instead. We'll only focus on the second controversy of the division symbols / vs ÷ in this challenge.

  • Decimal output-values should have a precision of at least three decimal digits.

  • If the input-expression contains multiple ÷ (i.e. $4÷2÷2$) with $year<1918$, they are evaluated like this: $4÷2÷2 → frac{4}{frac{2}{2}} → frac{4}{1} → 4$. (Or in words: number $4$ is divided by expression $2 ÷2$, where expression $2 ÷2$ in turn means number $2$ is divided by number $2$.)

  • Note that the way ÷ works implicitly means it has operator precedence over × and / (see test case $4÷2×2÷2$).

  • You can assume the input-year is within the range $[0000, 9999]$.


General rules:




  • This is code-golf, so shortest answer in bytes wins.

    Don't let code-golf languages discourage you from posting answers with non-codegolfing languages. Try to come up with an as short as possible answer for 'any' programming language.


  • Standard rules apply for your answer with default I/O rules, so you are allowed to use STDIN/STDOUT, functions/method with the proper parameters and return-type, full programs. Your call.


  • Default Loopholes are forbidden.

  • If possible, please add a link with a test for your code (i.e. TIO).

  • Also, adding an explanation for your answer is highly recommended.


Test cases:



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)









share|improve this question











$endgroup$












  • $begingroup$
    You know, I really don't like the PEMDAS acronym, because at first glance, it appears to imply that Multiplication comes before Division and Addition comes before Subtraction...
    $endgroup$
    – Jo King
    1 hour ago








  • 1




    $begingroup$
    Since the issue of N( is irrelevant for this challenge, it just confuses matters. Even your title is misleading. Remove all mention of that!
    $endgroup$
    – Adám
    1 hour ago












  • $begingroup$
    I found it very odd that you use MathJax and ÷ in the post, but use * instead of ×. I'd use the proper symbols ÷ and × but allow % and * as alternates.
    $endgroup$
    – Adám
    1 hour ago










  • $begingroup$
    @Adám I've put the irrelevant N( part in a spoiler with a note that it's irrelevant for the challenge. I've also changed all * to ×.
    $endgroup$
    – Kevin Cruijssen
    1 hour ago






  • 1




    $begingroup$
    @KirillL. Anything is fine, as long as it's not one of the other symbols already used. Can be x, D, etc. So the = you've used now is fine.
    $endgroup$
    – Kevin Cruijssen
    16 mins ago














4












4








4


1



$begingroup$


Feel free to skip this introduction and go to the challenge part, if you don't care about the background and inspiration of this challenge.



Introduction:



Inspired by a discussion that is already going on for many years regarding the expression $6÷2(1+2)$.



Irrelevant part for this challenge, but still interesting to know:




With the expression $6÷2(1+2)$, mathematicians will quickly see that the correct answer is $1$, whereas people with a simple math background from school will quickly see that the correct answer is $9$. So where does this controversy and therefore different answers come from? There are two conflicting rules in how $6÷2(1+2)$ is written. One due to the part 2(, and one due to the division symbol ÷.


Although both mathematicians and 'ordinary people' will use PEMDAS (Parenthesis - Exponents - Division/Multiplication - Addition/Subtraction), for mathematicians the expression is evaluated like this below, because $2(3)$ is just like for example $2x^2$ a monomial a.k.a. "a single term due to implied multiplication by juxtaposition" (and therefore part of the P in PEMDAS), which will be evaluated differently than $2×(3)$ (a binomial a.k.a. two terms):

$$6÷2(1+2) → frac{6}{2(3)} → frac{6}{6} → 1$$


Whereas for 'ordinary people', $2(3)$ and $2×(3)$ will be the same (and therefore part of the MD in PEMDAS), so they'll use this instead:

$$6÷2(1+2) → 6/2×(1+2) → 6/2×3 → 3×3 → 9$$




However, even if we would have written the original expression as $6÷2×(1+2)$, there can still be some controversy due to the use of the division symbol ÷. In modern mathematics, the / and ÷ symbols have the exact same meaning: divide. Some rules pre-1918 regarding the division symbol ÷†† state that it had a different meaning than the division symbol /. This is because ÷ used to mean "divide the number/expression on the left with the number/expression on the right"†††. So $a ÷ b$ then, would be $(a) / (b)$ or $frac{a}{b}$ now. In which case $6÷2×(1+2)$ would be evaluated like this by people pre-1918:



$$6÷2×(1+2) → frac{6}{2×(1+2)} → frac{6}{2×3} → frac{6}{6} → 1$$



†: Although I have found multiple sources explaining how ÷ was used in the past (see ††† below), I haven't been able to find definitive prove this changed somewhere around 1918. But for the sake of this challenge we assume 1918 was the turning point where ÷ and / starting to mean the same thing, where they differed in the past.
††: Other symbols have also been used in the past for division, like : in 1633 (or now still in The Netherlands and other European non-English speaking countries, since this is what I've personally learned in primary school xD) or ) in the 1540s. But for this challenge we only focus on the pre-1918 meaning of the obelus symbol ÷.
†††: Sources: this article in general. And the pre-1918 rules regarding ÷ are mentioned in: this The American Mathematical Monthly article from February 1917; this German Teutsche Algebra book from 1659 page 9 and page 76; this A First Book in Algebra from 1895 page 46 [48/189].



Slightly off-topic: regarding the actual discussion about this expression: It should never be written like this in the first place! The correct answer is irrelevant, if the question is unclear. *Clicks the "close because it's unclear what you're asking" button*.

And for the record, even different versions of Casio calculators don't know how to properly deal with this expression:
enter image description here



Challenge:



You are given two inputs:




  • A (valid) mathematical expression consisting only of the symbols 0123456789+-×/÷()

  • A year


And you output the result of the mathematical expression, based on the year (where ÷ is used differently when $year<1918$, but is used exactly the same as / when $yearge1918$).



Challenge rules:




  • You can assume the mathematical expression is valid and only uses the symbols 0123456789+-×/÷(). This also means you won't have to deal with exponentiation. (You are also allowed to use a different symbols for × or ÷ (i.e. * or %), if it helps the golfing or if your language only supports ASCII.)

  • You are allowed to add space-delimiters to the input-expression if this helps the (perhaps manual) evaluation of the expression.

  • I/O is flexible. Input can be as a string, character-array, etc. Year can be as an integer, date-object, string, etc. Output will be a decimal number.

  • You can assume there won't be any division by 0 test cases.

  • You can assume the numbers in the input-expression will be non-negative (so you won't have to deal with differentiating the - as negative symbol vs - as subtraction symbol). The output can however still be negative!

  • You can assume N( will always be written as N×( instead. We'll only focus on the second controversy of the division symbols / vs ÷ in this challenge.

  • Decimal output-values should have a precision of at least three decimal digits.

  • If the input-expression contains multiple ÷ (i.e. $4÷2÷2$) with $year<1918$, they are evaluated like this: $4÷2÷2 → frac{4}{frac{2}{2}} → frac{4}{1} → 4$. (Or in words: number $4$ is divided by expression $2 ÷2$, where expression $2 ÷2$ in turn means number $2$ is divided by number $2$.)

  • Note that the way ÷ works implicitly means it has operator precedence over × and / (see test case $4÷2×2÷2$).

  • You can assume the input-year is within the range $[0000, 9999]$.


General rules:




  • This is code-golf, so shortest answer in bytes wins.

    Don't let code-golf languages discourage you from posting answers with non-codegolfing languages. Try to come up with an as short as possible answer for 'any' programming language.


  • Standard rules apply for your answer with default I/O rules, so you are allowed to use STDIN/STDOUT, functions/method with the proper parameters and return-type, full programs. Your call.


  • Default Loopholes are forbidden.

  • If possible, please add a link with a test for your code (i.e. TIO).

  • Also, adding an explanation for your answer is highly recommended.


Test cases:



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)









share|improve this question











$endgroup$




Feel free to skip this introduction and go to the challenge part, if you don't care about the background and inspiration of this challenge.



Introduction:



Inspired by a discussion that is already going on for many years regarding the expression $6÷2(1+2)$.



Irrelevant part for this challenge, but still interesting to know:




With the expression $6÷2(1+2)$, mathematicians will quickly see that the correct answer is $1$, whereas people with a simple math background from school will quickly see that the correct answer is $9$. So where does this controversy and therefore different answers come from? There are two conflicting rules in how $6÷2(1+2)$ is written. One due to the part 2(, and one due to the division symbol ÷.


Although both mathematicians and 'ordinary people' will use PEMDAS (Parenthesis - Exponents - Division/Multiplication - Addition/Subtraction), for mathematicians the expression is evaluated like this below, because $2(3)$ is just like for example $2x^2$ a monomial a.k.a. "a single term due to implied multiplication by juxtaposition" (and therefore part of the P in PEMDAS), which will be evaluated differently than $2×(3)$ (a binomial a.k.a. two terms):

$$6÷2(1+2) → frac{6}{2(3)} → frac{6}{6} → 1$$


Whereas for 'ordinary people', $2(3)$ and $2×(3)$ will be the same (and therefore part of the MD in PEMDAS), so they'll use this instead:

$$6÷2(1+2) → 6/2×(1+2) → 6/2×3 → 3×3 → 9$$




However, even if we would have written the original expression as $6÷2×(1+2)$, there can still be some controversy due to the use of the division symbol ÷. In modern mathematics, the / and ÷ symbols have the exact same meaning: divide. Some rules pre-1918 regarding the division symbol ÷†† state that it had a different meaning than the division symbol /. This is because ÷ used to mean "divide the number/expression on the left with the number/expression on the right"†††. So $a ÷ b$ then, would be $(a) / (b)$ or $frac{a}{b}$ now. In which case $6÷2×(1+2)$ would be evaluated like this by people pre-1918:



$$6÷2×(1+2) → frac{6}{2×(1+2)} → frac{6}{2×3} → frac{6}{6} → 1$$



†: Although I have found multiple sources explaining how ÷ was used in the past (see ††† below), I haven't been able to find definitive prove this changed somewhere around 1918. But for the sake of this challenge we assume 1918 was the turning point where ÷ and / starting to mean the same thing, where they differed in the past.
††: Other symbols have also been used in the past for division, like : in 1633 (or now still in The Netherlands and other European non-English speaking countries, since this is what I've personally learned in primary school xD) or ) in the 1540s. But for this challenge we only focus on the pre-1918 meaning of the obelus symbol ÷.
†††: Sources: this article in general. And the pre-1918 rules regarding ÷ are mentioned in: this The American Mathematical Monthly article from February 1917; this German Teutsche Algebra book from 1659 page 9 and page 76; this A First Book in Algebra from 1895 page 46 [48/189].



Slightly off-topic: regarding the actual discussion about this expression: It should never be written like this in the first place! The correct answer is irrelevant, if the question is unclear. *Clicks the "close because it's unclear what you're asking" button*.

And for the record, even different versions of Casio calculators don't know how to properly deal with this expression:
enter image description here



Challenge:



You are given two inputs:




  • A (valid) mathematical expression consisting only of the symbols 0123456789+-×/÷()

  • A year


And you output the result of the mathematical expression, based on the year (where ÷ is used differently when $year<1918$, but is used exactly the same as / when $yearge1918$).



Challenge rules:




  • You can assume the mathematical expression is valid and only uses the symbols 0123456789+-×/÷(). This also means you won't have to deal with exponentiation. (You are also allowed to use a different symbols for × or ÷ (i.e. * or %), if it helps the golfing or if your language only supports ASCII.)

  • You are allowed to add space-delimiters to the input-expression if this helps the (perhaps manual) evaluation of the expression.

  • I/O is flexible. Input can be as a string, character-array, etc. Year can be as an integer, date-object, string, etc. Output will be a decimal number.

  • You can assume there won't be any division by 0 test cases.

  • You can assume the numbers in the input-expression will be non-negative (so you won't have to deal with differentiating the - as negative symbol vs - as subtraction symbol). The output can however still be negative!

  • You can assume N( will always be written as N×( instead. We'll only focus on the second controversy of the division symbols / vs ÷ in this challenge.

  • Decimal output-values should have a precision of at least three decimal digits.

  • If the input-expression contains multiple ÷ (i.e. $4÷2÷2$) with $year<1918$, they are evaluated like this: $4÷2÷2 → frac{4}{frac{2}{2}} → frac{4}{1} → 4$. (Or in words: number $4$ is divided by expression $2 ÷2$, where expression $2 ÷2$ in turn means number $2$ is divided by number $2$.)

  • Note that the way ÷ works implicitly means it has operator precedence over × and / (see test case $4÷2×2÷2$).

  • You can assume the input-year is within the range $[0000, 9999]$.


General rules:




  • This is code-golf, so shortest answer in bytes wins.

    Don't let code-golf languages discourage you from posting answers with non-codegolfing languages. Try to come up with an as short as possible answer for 'any' programming language.


  • Standard rules apply for your answer with default I/O rules, so you are allowed to use STDIN/STDOUT, functions/method with the proper parameters and return-type, full programs. Your call.


  • Default Loopholes are forbidden.

  • If possible, please add a link with a test for your code (i.e. TIO).

  • Also, adding an explanation for your answer is highly recommended.


Test cases:



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)






code-golf math number arithmetic integer






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 1 hour ago







Kevin Cruijssen

















asked 2 hours ago









Kevin CruijssenKevin Cruijssen

39k557201




39k557201












  • $begingroup$
    You know, I really don't like the PEMDAS acronym, because at first glance, it appears to imply that Multiplication comes before Division and Addition comes before Subtraction...
    $endgroup$
    – Jo King
    1 hour ago








  • 1




    $begingroup$
    Since the issue of N( is irrelevant for this challenge, it just confuses matters. Even your title is misleading. Remove all mention of that!
    $endgroup$
    – Adám
    1 hour ago












  • $begingroup$
    I found it very odd that you use MathJax and ÷ in the post, but use * instead of ×. I'd use the proper symbols ÷ and × but allow % and * as alternates.
    $endgroup$
    – Adám
    1 hour ago










  • $begingroup$
    @Adám I've put the irrelevant N( part in a spoiler with a note that it's irrelevant for the challenge. I've also changed all * to ×.
    $endgroup$
    – Kevin Cruijssen
    1 hour ago






  • 1




    $begingroup$
    @KirillL. Anything is fine, as long as it's not one of the other symbols already used. Can be x, D, etc. So the = you've used now is fine.
    $endgroup$
    – Kevin Cruijssen
    16 mins ago


















  • $begingroup$
    You know, I really don't like the PEMDAS acronym, because at first glance, it appears to imply that Multiplication comes before Division and Addition comes before Subtraction...
    $endgroup$
    – Jo King
    1 hour ago








  • 1




    $begingroup$
    Since the issue of N( is irrelevant for this challenge, it just confuses matters. Even your title is misleading. Remove all mention of that!
    $endgroup$
    – Adám
    1 hour ago












  • $begingroup$
    I found it very odd that you use MathJax and ÷ in the post, but use * instead of ×. I'd use the proper symbols ÷ and × but allow % and * as alternates.
    $endgroup$
    – Adám
    1 hour ago










  • $begingroup$
    @Adám I've put the irrelevant N( part in a spoiler with a note that it's irrelevant for the challenge. I've also changed all * to ×.
    $endgroup$
    – Kevin Cruijssen
    1 hour ago






  • 1




    $begingroup$
    @KirillL. Anything is fine, as long as it's not one of the other symbols already used. Can be x, D, etc. So the = you've used now is fine.
    $endgroup$
    – Kevin Cruijssen
    16 mins ago
















$begingroup$
You know, I really don't like the PEMDAS acronym, because at first glance, it appears to imply that Multiplication comes before Division and Addition comes before Subtraction...
$endgroup$
– Jo King
1 hour ago






$begingroup$
You know, I really don't like the PEMDAS acronym, because at first glance, it appears to imply that Multiplication comes before Division and Addition comes before Subtraction...
$endgroup$
– Jo King
1 hour ago






1




1




$begingroup$
Since the issue of N( is irrelevant for this challenge, it just confuses matters. Even your title is misleading. Remove all mention of that!
$endgroup$
– Adám
1 hour ago






$begingroup$
Since the issue of N( is irrelevant for this challenge, it just confuses matters. Even your title is misleading. Remove all mention of that!
$endgroup$
– Adám
1 hour ago














$begingroup$
I found it very odd that you use MathJax and ÷ in the post, but use * instead of ×. I'd use the proper symbols ÷ and × but allow % and * as alternates.
$endgroup$
– Adám
1 hour ago




$begingroup$
I found it very odd that you use MathJax and ÷ in the post, but use * instead of ×. I'd use the proper symbols ÷ and × but allow % and * as alternates.
$endgroup$
– Adám
1 hour ago












$begingroup$
@Adám I've put the irrelevant N( part in a spoiler with a note that it's irrelevant for the challenge. I've also changed all * to ×.
$endgroup$
– Kevin Cruijssen
1 hour ago




$begingroup$
@Adám I've put the irrelevant N( part in a spoiler with a note that it's irrelevant for the challenge. I've also changed all * to ×.
$endgroup$
– Kevin Cruijssen
1 hour ago




1




1




$begingroup$
@KirillL. Anything is fine, as long as it's not one of the other symbols already used. Can be x, D, etc. So the = you've used now is fine.
$endgroup$
– Kevin Cruijssen
16 mins ago




$begingroup$
@KirillL. Anything is fine, as long as it's not one of the other symbols already used. Can be x, D, etc. So the = you've used now is fine.
$endgroup$
– Kevin Cruijssen
16 mins ago










2 Answers
2






active

oldest

votes


















3












$begingroup$


R, 68 66 bytes





function(x,y,`=`=`/`)eval(parse(t=`if`(y<1918,x,gsub('=','/',x))))


Try it online!



Expects equality sign = instead of ÷ and * instead of ×.



The code makes use of some nasty operator overloading making advantage of the fact that = is a right-to-left operator with very low precedence (the exact behavior that we want from pre-1918 ÷), and R retains its original precedence when it is overloaded. The rest is automatically done for us by eval.






share|improve this answer











$endgroup$





















    2












    $begingroup$


    Python 3.8 (pre-release), 202 199 bytes





    lambda s,y:eval(g(s,y))
    import re
    g=lambda s,y:h(re.sub(r'([^()]*)',lambda m:h(m.group(0),y),s),y)
    h=lambda s,y:(i:=(s*(y<1918)).find('%'))>0and'('+s[:i]+')/('+g(s[i+1:],y)+')'or s.replace('%','/')


    Try it online!



    Takes % instead of ÷






    share|improve this answer











    $endgroup$









    • 1




      $begingroup$
      @Arnauld, Should be fixed.. Quite a lot of changes though
      $endgroup$
      – TFeld
      1 hour ago











    Your Answer





    StackExchange.ifUsing("editor", function () {
    return StackExchange.using("mathjaxEditing", function () {
    StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
    StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
    });
    });
    }, "mathjax-editing");

    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "200"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f180608%2fwhat-is-6%25c3%25b72%25c3%259712%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    3












    $begingroup$


    R, 68 66 bytes





    function(x,y,`=`=`/`)eval(parse(t=`if`(y<1918,x,gsub('=','/',x))))


    Try it online!



    Expects equality sign = instead of ÷ and * instead of ×.



    The code makes use of some nasty operator overloading making advantage of the fact that = is a right-to-left operator with very low precedence (the exact behavior that we want from pre-1918 ÷), and R retains its original precedence when it is overloaded. The rest is automatically done for us by eval.






    share|improve this answer











    $endgroup$


















      3












      $begingroup$


      R, 68 66 bytes





      function(x,y,`=`=`/`)eval(parse(t=`if`(y<1918,x,gsub('=','/',x))))


      Try it online!



      Expects equality sign = instead of ÷ and * instead of ×.



      The code makes use of some nasty operator overloading making advantage of the fact that = is a right-to-left operator with very low precedence (the exact behavior that we want from pre-1918 ÷), and R retains its original precedence when it is overloaded. The rest is automatically done for us by eval.






      share|improve this answer











      $endgroup$
















        3












        3








        3





        $begingroup$


        R, 68 66 bytes





        function(x,y,`=`=`/`)eval(parse(t=`if`(y<1918,x,gsub('=','/',x))))


        Try it online!



        Expects equality sign = instead of ÷ and * instead of ×.



        The code makes use of some nasty operator overloading making advantage of the fact that = is a right-to-left operator with very low precedence (the exact behavior that we want from pre-1918 ÷), and R retains its original precedence when it is overloaded. The rest is automatically done for us by eval.






        share|improve this answer











        $endgroup$




        R, 68 66 bytes





        function(x,y,`=`=`/`)eval(parse(t=`if`(y<1918,x,gsub('=','/',x))))


        Try it online!



        Expects equality sign = instead of ÷ and * instead of ×.



        The code makes use of some nasty operator overloading making advantage of the fact that = is a right-to-left operator with very low precedence (the exact behavior that we want from pre-1918 ÷), and R retains its original precedence when it is overloaded. The rest is automatically done for us by eval.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited 28 mins ago

























        answered 44 mins ago









        Kirill L.Kirill L.

        4,7051523




        4,7051523























            2












            $begingroup$


            Python 3.8 (pre-release), 202 199 bytes





            lambda s,y:eval(g(s,y))
            import re
            g=lambda s,y:h(re.sub(r'([^()]*)',lambda m:h(m.group(0),y),s),y)
            h=lambda s,y:(i:=(s*(y<1918)).find('%'))>0and'('+s[:i]+')/('+g(s[i+1:],y)+')'or s.replace('%','/')


            Try it online!



            Takes % instead of ÷






            share|improve this answer











            $endgroup$









            • 1




              $begingroup$
              @Arnauld, Should be fixed.. Quite a lot of changes though
              $endgroup$
              – TFeld
              1 hour ago
















            2












            $begingroup$


            Python 3.8 (pre-release), 202 199 bytes





            lambda s,y:eval(g(s,y))
            import re
            g=lambda s,y:h(re.sub(r'([^()]*)',lambda m:h(m.group(0),y),s),y)
            h=lambda s,y:(i:=(s*(y<1918)).find('%'))>0and'('+s[:i]+')/('+g(s[i+1:],y)+')'or s.replace('%','/')


            Try it online!



            Takes % instead of ÷






            share|improve this answer











            $endgroup$









            • 1




              $begingroup$
              @Arnauld, Should be fixed.. Quite a lot of changes though
              $endgroup$
              – TFeld
              1 hour ago














            2












            2








            2





            $begingroup$


            Python 3.8 (pre-release), 202 199 bytes





            lambda s,y:eval(g(s,y))
            import re
            g=lambda s,y:h(re.sub(r'([^()]*)',lambda m:h(m.group(0),y),s),y)
            h=lambda s,y:(i:=(s*(y<1918)).find('%'))>0and'('+s[:i]+')/('+g(s[i+1:],y)+')'or s.replace('%','/')


            Try it online!



            Takes % instead of ÷






            share|improve this answer











            $endgroup$




            Python 3.8 (pre-release), 202 199 bytes





            lambda s,y:eval(g(s,y))
            import re
            g=lambda s,y:h(re.sub(r'([^()]*)',lambda m:h(m.group(0),y),s),y)
            h=lambda s,y:(i:=(s*(y<1918)).find('%'))>0and'('+s[:i]+')/('+g(s[i+1:],y)+')'or s.replace('%','/')


            Try it online!



            Takes % instead of ÷







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited 55 mins ago

























            answered 1 hour ago









            TFeldTFeld

            15.4k21245




            15.4k21245








            • 1




              $begingroup$
              @Arnauld, Should be fixed.. Quite a lot of changes though
              $endgroup$
              – TFeld
              1 hour ago














            • 1




              $begingroup$
              @Arnauld, Should be fixed.. Quite a lot of changes though
              $endgroup$
              – TFeld
              1 hour ago








            1




            1




            $begingroup$
            @Arnauld, Should be fixed.. Quite a lot of changes though
            $endgroup$
            – TFeld
            1 hour ago




            $begingroup$
            @Arnauld, Should be fixed.. Quite a lot of changes though
            $endgroup$
            – TFeld
            1 hour ago


















            draft saved

            draft discarded




















































            If this is an answer to a challenge…




            • …Be sure to follow the challenge specification. However, please refrain from exploiting obvious loopholes. Answers abusing any of the standard loopholes are considered invalid. If you think a specification is unclear or underspecified, comment on the question instead.


            • …Try to optimize your score. For instance, answers to code-golf challenges should attempt to be as short as possible. You can always include a readable version of the code in addition to the competitive one.
              Explanations of your answer make it more interesting to read and are very much encouraged.


            • …Include a short header which indicates the language(s) of your code and its score, as defined by the challenge.



            More generally…




            • …Please make sure to answer the question and provide sufficient detail.


            • …Avoid asking for help, clarification or responding to other answers (use comments instead).





            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f180608%2fwhat-is-6%25c3%25b72%25c3%259712%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Benedict Cumberbatch Contingut Inicis Debut professional Premis Filmografia bàsica Premis i...

            Monticle de plataforma Contingut Est de Nord Amèrica Interpretacions Altres cultures Vegeu...

            Escacs Janus Enllaços externs Menú de navegacióEscacs JanusJanusschachBrainKing.comChessV