Historical difference between `/` and `÷` in mathematical expressionsDifference of expressions when...

Why avoid shared user accounts?

How do you funnel food off a cutting board?

What is the most triangles you can make from a capital "H" and 3 straight lines?

Highly technological aliens land nuclear fusion powered ships in medieval city and slaughter everyone, using swords?

Does windows 10s telemetry include sending *.docs if word crashed

Cryptic with missing capitals

Why is "points exist" not an axiom in geometry?

Why do stocks necessarily drop during a recession?

If I sold a PS4 game I owned the disc for, can I reinstall it digitally?

Why did other German political parties disband so fast when Hitler was appointed chancellor?

Early credit roll before the end of the film

Am I a Rude Number?

Why Normality assumption in linear regression

Citing paywalled articles accessed via illegal web sharing

Error in a formula field

What to do when being responsible for data protection in your lab, yet advice is ignored?

Using only 1s, make 29 with the minimum number of digits

Can I string the D&D Starter Set campaign into another module, keeping the same characters?

How to chose softserial library use on Arduino project?

How can I install sudo without using su?

Cookies - Should the toggles be on?

Can a hotel cancel a confirmed reservation?

Do authors have to be politically correct in article-writing?

What is the wife of a henpecked husband called?



Historical difference between `/` and `÷` in mathematical expressions


Difference of expressions when evaluated in different ordersEvaluating expressions with numerical shorthandsSolve a mathematical expression from alternating sides1+1 = 10, 1+2 = 3Mathematical substitutionDecipher the mathematical symbolsVerify the birth numberWeapons of Math InstructionArbitrary PEMDASMathematical parser













24












$begingroup$


Introduction:



enter image description here




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



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÷3$).

  • 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)
((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)









share|improve this question











$endgroup$








  • 11




    $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
    yesterday








  • 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
    yesterday








  • 7




    $begingroup$
    -1, no freehand circles :((
    $endgroup$
    – Don't be a x-triple dot
    yesterday








  • 13




    $begingroup$
    So, first you divide people into "real mathematicians", who know the "real" meaning of ÷, and "ordinary people", then you mention that this "real" meaning is actually archaic, and not used since 1918. As a person with a mathematical background, born slightly after 1918 I think the only purpose of the part under spoiler is to try to feel superior to others with no real reason to. A nice Code Golf question though.
    $endgroup$
    – FreeNickname
    yesterday






  • 6




    $begingroup$
    I'm not sure if any "mathematician uses PEMDAS". I mean, it's really just an acronym to learn the order, which most people outgrow at some point. I'm not a mathematician myself, but it took me considerable effort to recall the mnemonic in my native language, while I have absolutely no problems applying operations in the correct order...
    $endgroup$
    – Jasper
    21 hours ago
















24












$begingroup$


Introduction:



enter image description here




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



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÷3$).

  • 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)
((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)









share|improve this question











$endgroup$








  • 11




    $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
    yesterday








  • 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
    yesterday








  • 7




    $begingroup$
    -1, no freehand circles :((
    $endgroup$
    – Don't be a x-triple dot
    yesterday








  • 13




    $begingroup$
    So, first you divide people into "real mathematicians", who know the "real" meaning of ÷, and "ordinary people", then you mention that this "real" meaning is actually archaic, and not used since 1918. As a person with a mathematical background, born slightly after 1918 I think the only purpose of the part under spoiler is to try to feel superior to others with no real reason to. A nice Code Golf question though.
    $endgroup$
    – FreeNickname
    yesterday






  • 6




    $begingroup$
    I'm not sure if any "mathematician uses PEMDAS". I mean, it's really just an acronym to learn the order, which most people outgrow at some point. I'm not a mathematician myself, but it took me considerable effort to recall the mnemonic in my native language, while I have absolutely no problems applying operations in the correct order...
    $endgroup$
    – Jasper
    21 hours ago














24












24








24


7



$begingroup$


Introduction:



enter image description here




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



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÷3$).

  • 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)
((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)









share|improve this question











$endgroup$




Introduction:



enter image description here




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



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÷3$).

  • 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)
((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)






code-golf math number arithmetic integer






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 11 mins ago







Kevin Cruijssen

















asked yesterday









Kevin CruijssenKevin Cruijssen

39.2k559203




39.2k559203








  • 11




    $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
    yesterday








  • 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
    yesterday








  • 7




    $begingroup$
    -1, no freehand circles :((
    $endgroup$
    – Don't be a x-triple dot
    yesterday








  • 13




    $begingroup$
    So, first you divide people into "real mathematicians", who know the "real" meaning of ÷, and "ordinary people", then you mention that this "real" meaning is actually archaic, and not used since 1918. As a person with a mathematical background, born slightly after 1918 I think the only purpose of the part under spoiler is to try to feel superior to others with no real reason to. A nice Code Golf question though.
    $endgroup$
    – FreeNickname
    yesterday






  • 6




    $begingroup$
    I'm not sure if any "mathematician uses PEMDAS". I mean, it's really just an acronym to learn the order, which most people outgrow at some point. I'm not a mathematician myself, but it took me considerable effort to recall the mnemonic in my native language, while I have absolutely no problems applying operations in the correct order...
    $endgroup$
    – Jasper
    21 hours ago














  • 11




    $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
    yesterday








  • 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
    yesterday








  • 7




    $begingroup$
    -1, no freehand circles :((
    $endgroup$
    – Don't be a x-triple dot
    yesterday








  • 13




    $begingroup$
    So, first you divide people into "real mathematicians", who know the "real" meaning of ÷, and "ordinary people", then you mention that this "real" meaning is actually archaic, and not used since 1918. As a person with a mathematical background, born slightly after 1918 I think the only purpose of the part under spoiler is to try to feel superior to others with no real reason to. A nice Code Golf question though.
    $endgroup$
    – FreeNickname
    yesterday






  • 6




    $begingroup$
    I'm not sure if any "mathematician uses PEMDAS". I mean, it's really just an acronym to learn the order, which most people outgrow at some point. I'm not a mathematician myself, but it took me considerable effort to recall the mnemonic in my native language, while I have absolutely no problems applying operations in the correct order...
    $endgroup$
    – Jasper
    21 hours ago








11




11




$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
yesterday






$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
yesterday






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
yesterday






$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
yesterday






7




7




$begingroup$
-1, no freehand circles :((
$endgroup$
– Don't be a x-triple dot
yesterday






$begingroup$
-1, no freehand circles :((
$endgroup$
– Don't be a x-triple dot
yesterday






13




13




$begingroup$
So, first you divide people into "real mathematicians", who know the "real" meaning of ÷, and "ordinary people", then you mention that this "real" meaning is actually archaic, and not used since 1918. As a person with a mathematical background, born slightly after 1918 I think the only purpose of the part under spoiler is to try to feel superior to others with no real reason to. A nice Code Golf question though.
$endgroup$
– FreeNickname
yesterday




$begingroup$
So, first you divide people into "real mathematicians", who know the "real" meaning of ÷, and "ordinary people", then you mention that this "real" meaning is actually archaic, and not used since 1918. As a person with a mathematical background, born slightly after 1918 I think the only purpose of the part under spoiler is to try to feel superior to others with no real reason to. A nice Code Golf question though.
$endgroup$
– FreeNickname
yesterday




6




6




$begingroup$
I'm not sure if any "mathematician uses PEMDAS". I mean, it's really just an acronym to learn the order, which most people outgrow at some point. I'm not a mathematician myself, but it took me considerable effort to recall the mnemonic in my native language, while I have absolutely no problems applying operations in the correct order...
$endgroup$
– Jasper
21 hours ago




$begingroup$
I'm not sure if any "mathematician uses PEMDAS". I mean, it's really just an acronym to learn the order, which most people outgrow at some point. I'm not a mathematician myself, but it took me considerable effort to recall the mnemonic in my native language, while I have absolutely no problems applying operations in the correct order...
$endgroup$
– Jasper
21 hours ago










5 Answers
5






active

oldest

votes


















19












$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.



As a bonus, here is the same exact approach implemented in terser syntax. This time our special division operator is tilde (~):




Julia 0.7, 51 bytes





~=/;f(x,y)=eval(parse(y<1918?x:replace(x,'~','/')))


Try it online!






share|improve this answer











$endgroup$









  • 1




    $begingroup$
    `=`=`/` is diabolical! Great solution!
    $endgroup$
    – Gregor
    23 hours ago



















5












$begingroup$

JavaScript (ES6),  130 129  120 bytes



Saved 9 bytes thanks to @ScottHamper



Takes input as (year)(expr). Expects % and * instead of ÷ and ×.





y=>g=e=>(e!=(e=e.replace(/([^()]*)/,h=e=>eval(e.split`%`.reduceRight((a,c)=>y<1918?`(${c})/(${a})`:c+'/'+a))))?g:h)(e)


Try it online!



How?



Processing leaf expressions



The helper function $h$ expects a leaf expression $e$ as input, processes all % symbols according to the rules of the year $y$ (defined in the parent scope) and evaluates the resulting string.



If $y<1918$, we transform X%Y into (X)/(Y), to enforce low precedence and repeat this process for the entire string from right to left to enforce right-to-left associativity.



Examples:





  • 8%2 becomes (8)/(2), whose simplified form is 8/2


  • 2+3%3+2 becomes (2+3)/(3+2)


  • 8%2%2 becomes (8)/((2)/(2)), whose simplified form is 8/(2/2)


If $yge 1918$, each % is simply turned into a /.



h = e =>                    // e = input string
eval( // evaluate as JS code:
e.split`%` // split e on '%'
.reduceRight((a, c) => // for each element 'c', starting from the right and
// using 'a' as the accumulator:
y < 1918 ? // if y is less than 1918:
`(${c})/(${a})` // transform 'X%Y' into '(X)/(Y)'
: // else:
c + '/' + a // just replace '%' with '/'
) // end of reduceRight()
) // end of eval()


Dealing with nested expressions



As mentioned above, the function $h$ is designed to operate on a leaf expression, i.e. an expression without any other sub-expression enclosed in parentheses.



That's why we use the helper function $g$ to recursively identify and process such leaf expressions.



g = e => (            // e = input
e != // compare the current expression with
( e = e.replace( // the updated expression where:
/([^()]*)/, // each leaf expression '(A)'
h // is processed with h
) // end of replace()
) ? // if the new expression is different from the original one:
g // do a recursive call to g
: // else:
h // invoke h on the final string
)(e) // invoke either g(e) or h(e)





share|improve this answer











$endgroup$













  • $begingroup$
    Here's a version of h that's 9 bytes shorter: h=e=>eval(e.split`%`.reduceRight((a,c)=>y<1918?`(${c})/(${a})`:c+'/'+a))
    $endgroup$
    – Scott Hamper
    9 hours ago










  • $begingroup$
    @ScottHamper Very nice. 'Right to left' should have ring a bell ... but it didn't.
    $endgroup$
    – Arnauld
    1 hour ago



















4












$begingroup$


Python 3.8 (pre-release), 324 310 306 bytes





lambda s,y:eval((g(s*(y<1918))or s).replace('%','/'))
def g(s):
if'%'not in s:return s
l=r=j=J=i=s.find('%');x=y=0
while j>-1and(x:=x+~-')('.find(s[j])%3-1)>-1:l=[l,j][x<1];j-=1
while s[J:]and(y:=y+~-'()'.find(s[J])%3-1)>-1:r=[r,J+1][y<1];J+=1
return g(s[:l]+'('+g(s[l:i])+')/('+g(s[i+1:r])+')'+s[r:])


Try it online!



Takes % instead of ÷ and * instead of ×






share|improve this answer











$endgroup$





















    2












    $begingroup$


    Japt, 28 26 17 bytes



    -2 bytes thanks to Shaggy



    OvUddV>#¿7?'/:"/(


    Try it online!



    The header replaces × with * and ÷ with d



    Explanation:



    OvUddV>#¿7?'/:"/(
    Implicit U = expression
    V = year
    Ov Japt eval:
    Ud Replace from U:
    d "d" with:
    V>#¿7? If V > 1917:
    '/ "/"
    : Else:
    "/( "/("


    This is a perfect challenge for Japt since Japt auto-inserts missing parenthesis.






    share|improve this answer











    $endgroup$













    • $begingroup$
      17 bytes?
      $endgroup$
      – Shaggy
      18 hours ago










    • $begingroup$
      Hmm ... would slicing work out shorter than the ternary?
      $endgroup$
      – Shaggy
      16 hours ago










    • $begingroup$
      @Shaggy That's exactly what I've been trying to work out. No luck getting it shorter though
      $endgroup$
      – Oliver
      16 hours ago










    • $begingroup$
      unfortunately it's not working for 9+6÷3-3+15/3 ; 1800, because for first + priority should be higher than ÷
      $endgroup$
      – Nahuel Fouilleul
      33 mins ago





















    1












    $begingroup$

    Perl 5, 47 97 bytes




    / /;$="($`)";$'<1918?s;%;)/(;g:s;%;/;g;$=eval



    fixing with 97 bytes couldn't find shorter right now



    / /;$_="($`)";$'<1918?do{1while s-([^()]+)-local$_=$&;s,%,)/((,rg.")"x y,%,,-ee}:y-%-/-;$_=eval


    TIO






    share|improve this answer











    $endgroup$









    • 3




      $begingroup$
      Very nice idea. However, you have an issue with 4%2%2 which returns 1 in both cases. (whereas it should return 4 pre-1918)
      $endgroup$
      – Dada
      yesterday












    • $begingroup$
      it's true, i can't look anymore for the moment
      $endgroup$
      – Nahuel Fouilleul
      yesterday






    • 1




      $begingroup$
      @Dada, fixed (+50bytes)
      $endgroup$
      – Nahuel Fouilleul
      17 hours 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%2fhistorical-difference-between-and-%25c3%25b7-in-mathematical-expressions%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    5 Answers
    5






    active

    oldest

    votes








    5 Answers
    5






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    19












    $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.



    As a bonus, here is the same exact approach implemented in terser syntax. This time our special division operator is tilde (~):




    Julia 0.7, 51 bytes





    ~=/;f(x,y)=eval(parse(y<1918?x:replace(x,'~','/')))


    Try it online!






    share|improve this answer











    $endgroup$









    • 1




      $begingroup$
      `=`=`/` is diabolical! Great solution!
      $endgroup$
      – Gregor
      23 hours ago
















    19












    $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.



    As a bonus, here is the same exact approach implemented in terser syntax. This time our special division operator is tilde (~):




    Julia 0.7, 51 bytes





    ~=/;f(x,y)=eval(parse(y<1918?x:replace(x,'~','/')))


    Try it online!






    share|improve this answer











    $endgroup$









    • 1




      $begingroup$
      `=`=`/` is diabolical! Great solution!
      $endgroup$
      – Gregor
      23 hours ago














    19












    19








    19





    $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.



    As a bonus, here is the same exact approach implemented in terser syntax. This time our special division operator is tilde (~):




    Julia 0.7, 51 bytes





    ~=/;f(x,y)=eval(parse(y<1918?x:replace(x,'~','/')))


    Try it online!






    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.



    As a bonus, here is the same exact approach implemented in terser syntax. This time our special division operator is tilde (~):




    Julia 0.7, 51 bytes





    ~=/;f(x,y)=eval(parse(y<1918?x:replace(x,'~','/')))


    Try it online!







    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited yesterday

























    answered yesterday









    Kirill L.Kirill L.

    4,8951525




    4,8951525








    • 1




      $begingroup$
      `=`=`/` is diabolical! Great solution!
      $endgroup$
      – Gregor
      23 hours ago














    • 1




      $begingroup$
      `=`=`/` is diabolical! Great solution!
      $endgroup$
      – Gregor
      23 hours ago








    1




    1




    $begingroup$
    `=`=`/` is diabolical! Great solution!
    $endgroup$
    – Gregor
    23 hours ago




    $begingroup$
    `=`=`/` is diabolical! Great solution!
    $endgroup$
    – Gregor
    23 hours ago











    5












    $begingroup$

    JavaScript (ES6),  130 129  120 bytes



    Saved 9 bytes thanks to @ScottHamper



    Takes input as (year)(expr). Expects % and * instead of ÷ and ×.





    y=>g=e=>(e!=(e=e.replace(/([^()]*)/,h=e=>eval(e.split`%`.reduceRight((a,c)=>y<1918?`(${c})/(${a})`:c+'/'+a))))?g:h)(e)


    Try it online!



    How?



    Processing leaf expressions



    The helper function $h$ expects a leaf expression $e$ as input, processes all % symbols according to the rules of the year $y$ (defined in the parent scope) and evaluates the resulting string.



    If $y<1918$, we transform X%Y into (X)/(Y), to enforce low precedence and repeat this process for the entire string from right to left to enforce right-to-left associativity.



    Examples:





    • 8%2 becomes (8)/(2), whose simplified form is 8/2


    • 2+3%3+2 becomes (2+3)/(3+2)


    • 8%2%2 becomes (8)/((2)/(2)), whose simplified form is 8/(2/2)


    If $yge 1918$, each % is simply turned into a /.



    h = e =>                    // e = input string
    eval( // evaluate as JS code:
    e.split`%` // split e on '%'
    .reduceRight((a, c) => // for each element 'c', starting from the right and
    // using 'a' as the accumulator:
    y < 1918 ? // if y is less than 1918:
    `(${c})/(${a})` // transform 'X%Y' into '(X)/(Y)'
    : // else:
    c + '/' + a // just replace '%' with '/'
    ) // end of reduceRight()
    ) // end of eval()


    Dealing with nested expressions



    As mentioned above, the function $h$ is designed to operate on a leaf expression, i.e. an expression without any other sub-expression enclosed in parentheses.



    That's why we use the helper function $g$ to recursively identify and process such leaf expressions.



    g = e => (            // e = input
    e != // compare the current expression with
    ( e = e.replace( // the updated expression where:
    /([^()]*)/, // each leaf expression '(A)'
    h // is processed with h
    ) // end of replace()
    ) ? // if the new expression is different from the original one:
    g // do a recursive call to g
    : // else:
    h // invoke h on the final string
    )(e) // invoke either g(e) or h(e)





    share|improve this answer











    $endgroup$













    • $begingroup$
      Here's a version of h that's 9 bytes shorter: h=e=>eval(e.split`%`.reduceRight((a,c)=>y<1918?`(${c})/(${a})`:c+'/'+a))
      $endgroup$
      – Scott Hamper
      9 hours ago










    • $begingroup$
      @ScottHamper Very nice. 'Right to left' should have ring a bell ... but it didn't.
      $endgroup$
      – Arnauld
      1 hour ago
















    5












    $begingroup$

    JavaScript (ES6),  130 129  120 bytes



    Saved 9 bytes thanks to @ScottHamper



    Takes input as (year)(expr). Expects % and * instead of ÷ and ×.





    y=>g=e=>(e!=(e=e.replace(/([^()]*)/,h=e=>eval(e.split`%`.reduceRight((a,c)=>y<1918?`(${c})/(${a})`:c+'/'+a))))?g:h)(e)


    Try it online!



    How?



    Processing leaf expressions



    The helper function $h$ expects a leaf expression $e$ as input, processes all % symbols according to the rules of the year $y$ (defined in the parent scope) and evaluates the resulting string.



    If $y<1918$, we transform X%Y into (X)/(Y), to enforce low precedence and repeat this process for the entire string from right to left to enforce right-to-left associativity.



    Examples:





    • 8%2 becomes (8)/(2), whose simplified form is 8/2


    • 2+3%3+2 becomes (2+3)/(3+2)


    • 8%2%2 becomes (8)/((2)/(2)), whose simplified form is 8/(2/2)


    If $yge 1918$, each % is simply turned into a /.



    h = e =>                    // e = input string
    eval( // evaluate as JS code:
    e.split`%` // split e on '%'
    .reduceRight((a, c) => // for each element 'c', starting from the right and
    // using 'a' as the accumulator:
    y < 1918 ? // if y is less than 1918:
    `(${c})/(${a})` // transform 'X%Y' into '(X)/(Y)'
    : // else:
    c + '/' + a // just replace '%' with '/'
    ) // end of reduceRight()
    ) // end of eval()


    Dealing with nested expressions



    As mentioned above, the function $h$ is designed to operate on a leaf expression, i.e. an expression without any other sub-expression enclosed in parentheses.



    That's why we use the helper function $g$ to recursively identify and process such leaf expressions.



    g = e => (            // e = input
    e != // compare the current expression with
    ( e = e.replace( // the updated expression where:
    /([^()]*)/, // each leaf expression '(A)'
    h // is processed with h
    ) // end of replace()
    ) ? // if the new expression is different from the original one:
    g // do a recursive call to g
    : // else:
    h // invoke h on the final string
    )(e) // invoke either g(e) or h(e)





    share|improve this answer











    $endgroup$













    • $begingroup$
      Here's a version of h that's 9 bytes shorter: h=e=>eval(e.split`%`.reduceRight((a,c)=>y<1918?`(${c})/(${a})`:c+'/'+a))
      $endgroup$
      – Scott Hamper
      9 hours ago










    • $begingroup$
      @ScottHamper Very nice. 'Right to left' should have ring a bell ... but it didn't.
      $endgroup$
      – Arnauld
      1 hour ago














    5












    5








    5





    $begingroup$

    JavaScript (ES6),  130 129  120 bytes



    Saved 9 bytes thanks to @ScottHamper



    Takes input as (year)(expr). Expects % and * instead of ÷ and ×.





    y=>g=e=>(e!=(e=e.replace(/([^()]*)/,h=e=>eval(e.split`%`.reduceRight((a,c)=>y<1918?`(${c})/(${a})`:c+'/'+a))))?g:h)(e)


    Try it online!



    How?



    Processing leaf expressions



    The helper function $h$ expects a leaf expression $e$ as input, processes all % symbols according to the rules of the year $y$ (defined in the parent scope) and evaluates the resulting string.



    If $y<1918$, we transform X%Y into (X)/(Y), to enforce low precedence and repeat this process for the entire string from right to left to enforce right-to-left associativity.



    Examples:





    • 8%2 becomes (8)/(2), whose simplified form is 8/2


    • 2+3%3+2 becomes (2+3)/(3+2)


    • 8%2%2 becomes (8)/((2)/(2)), whose simplified form is 8/(2/2)


    If $yge 1918$, each % is simply turned into a /.



    h = e =>                    // e = input string
    eval( // evaluate as JS code:
    e.split`%` // split e on '%'
    .reduceRight((a, c) => // for each element 'c', starting from the right and
    // using 'a' as the accumulator:
    y < 1918 ? // if y is less than 1918:
    `(${c})/(${a})` // transform 'X%Y' into '(X)/(Y)'
    : // else:
    c + '/' + a // just replace '%' with '/'
    ) // end of reduceRight()
    ) // end of eval()


    Dealing with nested expressions



    As mentioned above, the function $h$ is designed to operate on a leaf expression, i.e. an expression without any other sub-expression enclosed in parentheses.



    That's why we use the helper function $g$ to recursively identify and process such leaf expressions.



    g = e => (            // e = input
    e != // compare the current expression with
    ( e = e.replace( // the updated expression where:
    /([^()]*)/, // each leaf expression '(A)'
    h // is processed with h
    ) // end of replace()
    ) ? // if the new expression is different from the original one:
    g // do a recursive call to g
    : // else:
    h // invoke h on the final string
    )(e) // invoke either g(e) or h(e)





    share|improve this answer











    $endgroup$



    JavaScript (ES6),  130 129  120 bytes



    Saved 9 bytes thanks to @ScottHamper



    Takes input as (year)(expr). Expects % and * instead of ÷ and ×.





    y=>g=e=>(e!=(e=e.replace(/([^()]*)/,h=e=>eval(e.split`%`.reduceRight((a,c)=>y<1918?`(${c})/(${a})`:c+'/'+a))))?g:h)(e)


    Try it online!



    How?



    Processing leaf expressions



    The helper function $h$ expects a leaf expression $e$ as input, processes all % symbols according to the rules of the year $y$ (defined in the parent scope) and evaluates the resulting string.



    If $y<1918$, we transform X%Y into (X)/(Y), to enforce low precedence and repeat this process for the entire string from right to left to enforce right-to-left associativity.



    Examples:





    • 8%2 becomes (8)/(2), whose simplified form is 8/2


    • 2+3%3+2 becomes (2+3)/(3+2)


    • 8%2%2 becomes (8)/((2)/(2)), whose simplified form is 8/(2/2)


    If $yge 1918$, each % is simply turned into a /.



    h = e =>                    // e = input string
    eval( // evaluate as JS code:
    e.split`%` // split e on '%'
    .reduceRight((a, c) => // for each element 'c', starting from the right and
    // using 'a' as the accumulator:
    y < 1918 ? // if y is less than 1918:
    `(${c})/(${a})` // transform 'X%Y' into '(X)/(Y)'
    : // else:
    c + '/' + a // just replace '%' with '/'
    ) // end of reduceRight()
    ) // end of eval()


    Dealing with nested expressions



    As mentioned above, the function $h$ is designed to operate on a leaf expression, i.e. an expression without any other sub-expression enclosed in parentheses.



    That's why we use the helper function $g$ to recursively identify and process such leaf expressions.



    g = e => (            // e = input
    e != // compare the current expression with
    ( e = e.replace( // the updated expression where:
    /([^()]*)/, // each leaf expression '(A)'
    h // is processed with h
    ) // end of replace()
    ) ? // if the new expression is different from the original one:
    g // do a recursive call to g
    : // else:
    h // invoke h on the final string
    )(e) // invoke either g(e) or h(e)






    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited 1 hour ago

























    answered yesterday









    ArnauldArnauld

    77.4k694324




    77.4k694324












    • $begingroup$
      Here's a version of h that's 9 bytes shorter: h=e=>eval(e.split`%`.reduceRight((a,c)=>y<1918?`(${c})/(${a})`:c+'/'+a))
      $endgroup$
      – Scott Hamper
      9 hours ago










    • $begingroup$
      @ScottHamper Very nice. 'Right to left' should have ring a bell ... but it didn't.
      $endgroup$
      – Arnauld
      1 hour ago


















    • $begingroup$
      Here's a version of h that's 9 bytes shorter: h=e=>eval(e.split`%`.reduceRight((a,c)=>y<1918?`(${c})/(${a})`:c+'/'+a))
      $endgroup$
      – Scott Hamper
      9 hours ago










    • $begingroup$
      @ScottHamper Very nice. 'Right to left' should have ring a bell ... but it didn't.
      $endgroup$
      – Arnauld
      1 hour ago
















    $begingroup$
    Here's a version of h that's 9 bytes shorter: h=e=>eval(e.split`%`.reduceRight((a,c)=>y<1918?`(${c})/(${a})`:c+'/'+a))
    $endgroup$
    – Scott Hamper
    9 hours ago




    $begingroup$
    Here's a version of h that's 9 bytes shorter: h=e=>eval(e.split`%`.reduceRight((a,c)=>y<1918?`(${c})/(${a})`:c+'/'+a))
    $endgroup$
    – Scott Hamper
    9 hours ago












    $begingroup$
    @ScottHamper Very nice. 'Right to left' should have ring a bell ... but it didn't.
    $endgroup$
    – Arnauld
    1 hour ago




    $begingroup$
    @ScottHamper Very nice. 'Right to left' should have ring a bell ... but it didn't.
    $endgroup$
    – Arnauld
    1 hour ago











    4












    $begingroup$


    Python 3.8 (pre-release), 324 310 306 bytes





    lambda s,y:eval((g(s*(y<1918))or s).replace('%','/'))
    def g(s):
    if'%'not in s:return s
    l=r=j=J=i=s.find('%');x=y=0
    while j>-1and(x:=x+~-')('.find(s[j])%3-1)>-1:l=[l,j][x<1];j-=1
    while s[J:]and(y:=y+~-'()'.find(s[J])%3-1)>-1:r=[r,J+1][y<1];J+=1
    return g(s[:l]+'('+g(s[l:i])+')/('+g(s[i+1:r])+')'+s[r:])


    Try it online!



    Takes % instead of ÷ and * instead of ×






    share|improve this answer











    $endgroup$


















      4












      $begingroup$


      Python 3.8 (pre-release), 324 310 306 bytes





      lambda s,y:eval((g(s*(y<1918))or s).replace('%','/'))
      def g(s):
      if'%'not in s:return s
      l=r=j=J=i=s.find('%');x=y=0
      while j>-1and(x:=x+~-')('.find(s[j])%3-1)>-1:l=[l,j][x<1];j-=1
      while s[J:]and(y:=y+~-'()'.find(s[J])%3-1)>-1:r=[r,J+1][y<1];J+=1
      return g(s[:l]+'('+g(s[l:i])+')/('+g(s[i+1:r])+')'+s[r:])


      Try it online!



      Takes % instead of ÷ and * instead of ×






      share|improve this answer











      $endgroup$
















        4












        4








        4





        $begingroup$


        Python 3.8 (pre-release), 324 310 306 bytes





        lambda s,y:eval((g(s*(y<1918))or s).replace('%','/'))
        def g(s):
        if'%'not in s:return s
        l=r=j=J=i=s.find('%');x=y=0
        while j>-1and(x:=x+~-')('.find(s[j])%3-1)>-1:l=[l,j][x<1];j-=1
        while s[J:]and(y:=y+~-'()'.find(s[J])%3-1)>-1:r=[r,J+1][y<1];J+=1
        return g(s[:l]+'('+g(s[l:i])+')/('+g(s[i+1:r])+')'+s[r:])


        Try it online!



        Takes % instead of ÷ and * instead of ×






        share|improve this answer











        $endgroup$




        Python 3.8 (pre-release), 324 310 306 bytes





        lambda s,y:eval((g(s*(y<1918))or s).replace('%','/'))
        def g(s):
        if'%'not in s:return s
        l=r=j=J=i=s.find('%');x=y=0
        while j>-1and(x:=x+~-')('.find(s[j])%3-1)>-1:l=[l,j][x<1];j-=1
        while s[J:]and(y:=y+~-'()'.find(s[J])%3-1)>-1:r=[r,J+1][y<1];J+=1
        return g(s[:l]+'('+g(s[l:i])+')/('+g(s[i+1:r])+')'+s[r:])


        Try it online!



        Takes % instead of ÷ and * instead of ×







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited yesterday

























        answered yesterday









        TFeldTFeld

        15.4k21247




        15.4k21247























            2












            $begingroup$


            Japt, 28 26 17 bytes



            -2 bytes thanks to Shaggy



            OvUddV>#¿7?'/:"/(


            Try it online!



            The header replaces × with * and ÷ with d



            Explanation:



            OvUddV>#¿7?'/:"/(
            Implicit U = expression
            V = year
            Ov Japt eval:
            Ud Replace from U:
            d "d" with:
            V>#¿7? If V > 1917:
            '/ "/"
            : Else:
            "/( "/("


            This is a perfect challenge for Japt since Japt auto-inserts missing parenthesis.






            share|improve this answer











            $endgroup$













            • $begingroup$
              17 bytes?
              $endgroup$
              – Shaggy
              18 hours ago










            • $begingroup$
              Hmm ... would slicing work out shorter than the ternary?
              $endgroup$
              – Shaggy
              16 hours ago










            • $begingroup$
              @Shaggy That's exactly what I've been trying to work out. No luck getting it shorter though
              $endgroup$
              – Oliver
              16 hours ago










            • $begingroup$
              unfortunately it's not working for 9+6÷3-3+15/3 ; 1800, because for first + priority should be higher than ÷
              $endgroup$
              – Nahuel Fouilleul
              33 mins ago


















            2












            $begingroup$


            Japt, 28 26 17 bytes



            -2 bytes thanks to Shaggy



            OvUddV>#¿7?'/:"/(


            Try it online!



            The header replaces × with * and ÷ with d



            Explanation:



            OvUddV>#¿7?'/:"/(
            Implicit U = expression
            V = year
            Ov Japt eval:
            Ud Replace from U:
            d "d" with:
            V>#¿7? If V > 1917:
            '/ "/"
            : Else:
            "/( "/("


            This is a perfect challenge for Japt since Japt auto-inserts missing parenthesis.






            share|improve this answer











            $endgroup$













            • $begingroup$
              17 bytes?
              $endgroup$
              – Shaggy
              18 hours ago










            • $begingroup$
              Hmm ... would slicing work out shorter than the ternary?
              $endgroup$
              – Shaggy
              16 hours ago










            • $begingroup$
              @Shaggy That's exactly what I've been trying to work out. No luck getting it shorter though
              $endgroup$
              – Oliver
              16 hours ago










            • $begingroup$
              unfortunately it's not working for 9+6÷3-3+15/3 ; 1800, because for first + priority should be higher than ÷
              $endgroup$
              – Nahuel Fouilleul
              33 mins ago
















            2












            2








            2





            $begingroup$


            Japt, 28 26 17 bytes



            -2 bytes thanks to Shaggy



            OvUddV>#¿7?'/:"/(


            Try it online!



            The header replaces × with * and ÷ with d



            Explanation:



            OvUddV>#¿7?'/:"/(
            Implicit U = expression
            V = year
            Ov Japt eval:
            Ud Replace from U:
            d "d" with:
            V>#¿7? If V > 1917:
            '/ "/"
            : Else:
            "/( "/("


            This is a perfect challenge for Japt since Japt auto-inserts missing parenthesis.






            share|improve this answer











            $endgroup$




            Japt, 28 26 17 bytes



            -2 bytes thanks to Shaggy



            OvUddV>#¿7?'/:"/(


            Try it online!



            The header replaces × with * and ÷ with d



            Explanation:



            OvUddV>#¿7?'/:"/(
            Implicit U = expression
            V = year
            Ov Japt eval:
            Ud Replace from U:
            d "d" with:
            V>#¿7? If V > 1917:
            '/ "/"
            : Else:
            "/( "/("


            This is a perfect challenge for Japt since Japt auto-inserts missing parenthesis.







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited 17 hours ago

























            answered 20 hours ago









            OliverOliver

            5,1401832




            5,1401832












            • $begingroup$
              17 bytes?
              $endgroup$
              – Shaggy
              18 hours ago










            • $begingroup$
              Hmm ... would slicing work out shorter than the ternary?
              $endgroup$
              – Shaggy
              16 hours ago










            • $begingroup$
              @Shaggy That's exactly what I've been trying to work out. No luck getting it shorter though
              $endgroup$
              – Oliver
              16 hours ago










            • $begingroup$
              unfortunately it's not working for 9+6÷3-3+15/3 ; 1800, because for first + priority should be higher than ÷
              $endgroup$
              – Nahuel Fouilleul
              33 mins ago




















            • $begingroup$
              17 bytes?
              $endgroup$
              – Shaggy
              18 hours ago










            • $begingroup$
              Hmm ... would slicing work out shorter than the ternary?
              $endgroup$
              – Shaggy
              16 hours ago










            • $begingroup$
              @Shaggy That's exactly what I've been trying to work out. No luck getting it shorter though
              $endgroup$
              – Oliver
              16 hours ago










            • $begingroup$
              unfortunately it's not working for 9+6÷3-3+15/3 ; 1800, because for first + priority should be higher than ÷
              $endgroup$
              – Nahuel Fouilleul
              33 mins ago


















            $begingroup$
            17 bytes?
            $endgroup$
            – Shaggy
            18 hours ago




            $begingroup$
            17 bytes?
            $endgroup$
            – Shaggy
            18 hours ago












            $begingroup$
            Hmm ... would slicing work out shorter than the ternary?
            $endgroup$
            – Shaggy
            16 hours ago




            $begingroup$
            Hmm ... would slicing work out shorter than the ternary?
            $endgroup$
            – Shaggy
            16 hours ago












            $begingroup$
            @Shaggy That's exactly what I've been trying to work out. No luck getting it shorter though
            $endgroup$
            – Oliver
            16 hours ago




            $begingroup$
            @Shaggy That's exactly what I've been trying to work out. No luck getting it shorter though
            $endgroup$
            – Oliver
            16 hours ago












            $begingroup$
            unfortunately it's not working for 9+6÷3-3+15/3 ; 1800, because for first + priority should be higher than ÷
            $endgroup$
            – Nahuel Fouilleul
            33 mins ago






            $begingroup$
            unfortunately it's not working for 9+6÷3-3+15/3 ; 1800, because for first + priority should be higher than ÷
            $endgroup$
            – Nahuel Fouilleul
            33 mins ago













            1












            $begingroup$

            Perl 5, 47 97 bytes




            / /;$="($`)";$'<1918?s;%;)/(;g:s;%;/;g;$=eval



            fixing with 97 bytes couldn't find shorter right now



            / /;$_="($`)";$'<1918?do{1while s-([^()]+)-local$_=$&;s,%,)/((,rg.")"x y,%,,-ee}:y-%-/-;$_=eval


            TIO






            share|improve this answer











            $endgroup$









            • 3




              $begingroup$
              Very nice idea. However, you have an issue with 4%2%2 which returns 1 in both cases. (whereas it should return 4 pre-1918)
              $endgroup$
              – Dada
              yesterday












            • $begingroup$
              it's true, i can't look anymore for the moment
              $endgroup$
              – Nahuel Fouilleul
              yesterday






            • 1




              $begingroup$
              @Dada, fixed (+50bytes)
              $endgroup$
              – Nahuel Fouilleul
              17 hours ago
















            1












            $begingroup$

            Perl 5, 47 97 bytes




            / /;$="($`)";$'<1918?s;%;)/(;g:s;%;/;g;$=eval



            fixing with 97 bytes couldn't find shorter right now



            / /;$_="($`)";$'<1918?do{1while s-([^()]+)-local$_=$&;s,%,)/((,rg.")"x y,%,,-ee}:y-%-/-;$_=eval


            TIO






            share|improve this answer











            $endgroup$









            • 3




              $begingroup$
              Very nice idea. However, you have an issue with 4%2%2 which returns 1 in both cases. (whereas it should return 4 pre-1918)
              $endgroup$
              – Dada
              yesterday












            • $begingroup$
              it's true, i can't look anymore for the moment
              $endgroup$
              – Nahuel Fouilleul
              yesterday






            • 1




              $begingroup$
              @Dada, fixed (+50bytes)
              $endgroup$
              – Nahuel Fouilleul
              17 hours ago














            1












            1








            1





            $begingroup$

            Perl 5, 47 97 bytes




            / /;$="($`)";$'<1918?s;%;)/(;g:s;%;/;g;$=eval



            fixing with 97 bytes couldn't find shorter right now



            / /;$_="($`)";$'<1918?do{1while s-([^()]+)-local$_=$&;s,%,)/((,rg.")"x y,%,,-ee}:y-%-/-;$_=eval


            TIO






            share|improve this answer











            $endgroup$



            Perl 5, 47 97 bytes




            / /;$="($`)";$'<1918?s;%;)/(;g:s;%;/;g;$=eval



            fixing with 97 bytes couldn't find shorter right now



            / /;$_="($`)";$'<1918?do{1while s-([^()]+)-local$_=$&;s,%,)/((,rg.")"x y,%,,-ee}:y-%-/-;$_=eval


            TIO







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited 17 hours ago

























            answered yesterday









            Nahuel FouilleulNahuel Fouilleul

            2,61529




            2,61529








            • 3




              $begingroup$
              Very nice idea. However, you have an issue with 4%2%2 which returns 1 in both cases. (whereas it should return 4 pre-1918)
              $endgroup$
              – Dada
              yesterday












            • $begingroup$
              it's true, i can't look anymore for the moment
              $endgroup$
              – Nahuel Fouilleul
              yesterday






            • 1




              $begingroup$
              @Dada, fixed (+50bytes)
              $endgroup$
              – Nahuel Fouilleul
              17 hours ago














            • 3




              $begingroup$
              Very nice idea. However, you have an issue with 4%2%2 which returns 1 in both cases. (whereas it should return 4 pre-1918)
              $endgroup$
              – Dada
              yesterday












            • $begingroup$
              it's true, i can't look anymore for the moment
              $endgroup$
              – Nahuel Fouilleul
              yesterday






            • 1




              $begingroup$
              @Dada, fixed (+50bytes)
              $endgroup$
              – Nahuel Fouilleul
              17 hours ago








            3




            3




            $begingroup$
            Very nice idea. However, you have an issue with 4%2%2 which returns 1 in both cases. (whereas it should return 4 pre-1918)
            $endgroup$
            – Dada
            yesterday






            $begingroup$
            Very nice idea. However, you have an issue with 4%2%2 which returns 1 in both cases. (whereas it should return 4 pre-1918)
            $endgroup$
            – Dada
            yesterday














            $begingroup$
            it's true, i can't look anymore for the moment
            $endgroup$
            – Nahuel Fouilleul
            yesterday




            $begingroup$
            it's true, i can't look anymore for the moment
            $endgroup$
            – Nahuel Fouilleul
            yesterday




            1




            1




            $begingroup$
            @Dada, fixed (+50bytes)
            $endgroup$
            – Nahuel Fouilleul
            17 hours ago




            $begingroup$
            @Dada, fixed (+50bytes)
            $endgroup$
            – Nahuel Fouilleul
            17 hours 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%2fhistorical-difference-between-and-%25c3%25b7-in-mathematical-expressions%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

            Paper upload error, “Upload failed: The top margin is 0.715 in on page 3, which is below the required...

            Emraan Hashmi Filmografia | Linki zewnętrzne | Menu nawigacyjneGulshan GroverGulshan...

            How can I write this formula?newline and italics added with leqWhy does widehat behave differently if I...