Introdução:
Inspirado por uma discussão que já está em andamento há muitos anos sobre a expressão .
Com a expressão , os matemáticos verão rapidamente que a resposta correta é , enquanto as pessoas com uma formação matemática simples da escola verão rapidamente que a resposta correta é . Então, de onde vem essa controvérsia e, portanto, respostas diferentes? Existem duas regras conflitantes na forma como é escrito. Um devido à parte
2(
e um devido ao símbolo de divisão÷
.Embora matemáticos e 'pessoas comuns' usem PEMDAS (Parênteses - Expoentes - Divisão / Multiplicação - Adição / Subtração), para matemáticos a expressão é avaliada como esta abaixo, porque é como, por exemplo, um monomial também conhecido como " um único termo devido à multiplicação implícita por justaposição " (e, portanto, parte do
P
inPEMDAS
), que será avaliado diferentemente de (um binômio, também conhecido como dois termos):
Considerando que para 'pessoas comuns', e será o mesmo (e, portanto, parte do
MD
emPEMDAS
), então eles vão usar isso em vez disso:
No entanto, mesmo que teria escrito a expressão original como , pode ainda haver alguma controvérsia devido ao uso do símbolo de divisão ÷
. Na matemática moderna, os símbolos /
e ÷
têm exatamente o mesmo significado: dividir. Algumas regras anteriores a 1918 † relativas ao símbolo de divisão ÷
†† afirmam que ele tinha um significado diferente do símbolo de divisão /
. Isso ocorre porque ÷
costumava significar " dividir o número / expressão à esquerda com o número / expressão à direita " ††† . Então então, seria ou agora. Nesse caso iria ser avaliado da seguinte maneira por pessoas pré-1918:
†: Embora eu tenha encontrado várias fontes explicando como ÷
foi usado no passado (veja ††† abaixo), não consegui encontrar provas definitivas de que isso tenha mudado em algum lugar por volta de 1918. Mas, para o desafio, presumimos que 1918 foi o ponto de virada em que ÷
e
/
começando a significar a mesma coisa, onde diferiam no passado.
††: Outros símbolos também foram usados no passado para divisão, como
:
em 1633 (ou agora ainda na Holanda e em outros países europeus de língua não inglesa, pois é isso que eu aprendi pessoalmente na escola primária xD) ou)
em os anos 1540. Mas para esse desafio, focamos apenas o significado anterior ao símbolo de obelus antes de 1918÷
.
†††: Fontes: este artigo em geral . E as regras anteriores a 1918÷
são mencionadas em: este artigo do The American Mathematics Monthly de fevereiro de 1917 ; este livro de álgebra alemã Teutsche de 1659, página 9 e página 76 ; este um primeiro livro em álgebrade 1895, página 46 [48/189] .Ligeiramente fora de tópico: sobre a discussão real sobre essa expressão: ela nunca deve ser escrita assim em primeiro lugar! A resposta correta é irrelevante, se a pergunta não estiver clara. * Clica no botão "fechar, porque não está claro o que você está perguntando" * .
E, para que conste, mesmo versões diferentes das calculadoras Casio não sabem como lidar adequadamente com esta expressão:
Desafio:
Você recebe duas entradas:
- Uma expressão matemática (válida) que consiste apenas nos símbolos
0123456789+-×/÷()
- Um ano
÷
/
Regras do desafio:
- Você pode assumir que a expressão matemática é válida e usa apenas os símbolos
0123456789+-×/÷()
. Isso também significa que você não terá que lidar com exponenciação. (Você também estão autorizados a utilizar uma símbolos diferentes para×
ou÷
(ie*
ou%
), se isso ajuda a jogar golfe ou se a sua língua só suporta ASCII.) - Você pode adicionar delimitadores de espaço à expressão de entrada se isso ajudar na avaliação (talvez manual) da expressão.
- A E / S é flexível. A entrada pode ser como uma sequência de caracteres, uma matriz de caracteres, etc. O ano pode ser como um número inteiro, objeto de data, sequência de caracteres etc. A saída será um número decimal.
- Você pode assumir que não haverá divisão por 0 casos de teste.
- Você pode assumir que os números na expressão de entrada não serão negativos (portanto, não será necessário diferenciar o
-
símbolo como negativo versus o-
símbolo de subtração). A saída ainda pode ser negativa! - Você pode assumir
N(
que sempre será escrito comoN×(
alternativa. Vamos nos concentrar apenas na segunda controvérsia dos símbolos de divisão/
vs÷
neste desafio. - Os valores decimais de saída devem ter uma precisão de pelo menos três dígitos decimais.
- Se a entrada-expressão contém múltiplos
÷
(ou seja) com , eles são avaliados assim: . (Ou em palavras: número é dividido pela expressão onde expressão por sua vez significa número é dividido pelo número .) - Observe que a maneira como
÷
funciona implicitamente significa que ele tem precedência sobre o operador×
e/
(consulte o caso de teste) - Você pode assumir que o ano de entrada está dentro da faixa .
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta com as regras de E / S padrão , para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código (ou seja, TIO ).
- Além disso, é altamente recomendável adicionar uma explicação para sua resposta.
Casos de teste:
Input-expression: Input-year: Output: Expression interpretation with parenthesis:
6÷2×(1+2) 2018 9 (6/2)×(1+2)
6÷2×(1+2) 1917 1 6/(2×(1+2))
9+6÷3-3+15/3 2000 13 ((9+(6/3))-3)+(15/3)
9+6÷3-3+15/3 1800 3 (9+6)/((3-3)+(15/3))
4÷2÷2 1918 1 (4/2)/2
4÷2÷2 1900 4 4/(2/2)
(1÷6-3)×5÷2/2 2400 -3.541... ((((1/6)-3)×5)/2)/2
(1÷6-3)×5÷2/2 1400 1.666... ((1/(6-3))×5)/(2/2)
1×2÷5×5-15 2015 -13 (((1×2)/5)×5)-15
1×2÷5×5-15 1719 0.2 (1×2)/((5×5)-15)
10/2+3×7 1991 26 (10/2)+(3×7)
10/2+3×7 1911 26 (10/2)+(3×7)
10÷2+3×7 1991 26 (10/2)+(3×7)
10÷2+3×7 1911 0.434... 10/(2+(3×7))
4÷2+2÷2 2000 3 (4/2)+(2/2)
4÷2+2÷2 1900 2 4/((2+2)/2)
4÷2×2÷3 9999 1.333... ((4/2)×2)/3
4÷2×2÷3 0000 3 4/((2×2)/3)
((10÷2)÷2)+3÷7 2000 2.928... ((10/2)/2)+(3/7)
((10÷2)÷2)+3÷7 1900 0.785... (((10/2)/2)+3)/7
(10÷(2÷2))+3×7+(10÷(2÷2))+3×7
1920 62 (10/(2/2))+(3×7)+(10/(2/2))+(3×7)
(10÷(2÷2))+3×7+(10÷(2÷2))+3×7
1750 62 (10/(2/2))+(3×7)+(10/(2/2))+(3×7)
10÷2/2+4 2000 6.5 ((10/2)/2)+4
10÷2/2+4 0100 2 10/((2/2)+4)
9+6÷3-3+15/3 9630 13 9+(6/3)-3+(15/3)
9+6÷3-3+15/3 0369 3 (9+6)/(3-3+(15/3))
`=`=`/`
é diabólico! Ótima solução!