Introduzione:
Ispirato da una discussione che dura già da molti anni sull'espressione .
Con l'espressione , i matematici vedranno rapidamente che la risposta corretta è , mentre le persone con un background matematico semplice da scuola vedranno rapidamente che la risposta corretta è . Da dove viene questa controversia e quindi diverse risposte? Esistono due regole contrastanti nel modo in cui è scritto. Uno a causa della parte
2(
e uno a causa del simbolo di divisione÷
.Sebbene sia i matematici che le 'persone comuni' useranno PEMDAS (Parentesi - Esponenti - Divisione / Moltiplicazione - Aggiunta / Sottrazione), per i matematici l'espressione viene valutata come questa di seguito, perché è proprio come per esempio un monomiale aka " un singolo termine dovuto alla moltiplicazione implicita per giustapposizione " (e quindi parte di
P
inPEMDAS
), che sarà valutato in modo diverso da (un binomio aka due termini):
Considerando che per "gente comune", e saranno gli stessi (e quindi parte di
MD
inPEMDAS
), quindi useranno invece questo:
÷
/
÷
÷
/
÷
†: Anche se ho trovato più fonti che spiegano come è ÷
stato usato in passato (vedi ††† sotto), non sono stato in grado di trovare prove definitive che questo sia cambiato da qualche parte intorno al 1918. Ma per il bene di questa sfida supponiamo che il 1918 fosse la svolta in cui ÷
e
/
iniziando a significare la stessa cosa, in cui differivano in passato.
††: Altri simboli sono stati usati anche in passato per la divisione, come
:
nel 1633 (o ora ancora nei Paesi Bassi e in altri paesi europei non di lingua inglese, poiché questo è ciò che ho imparato personalmente nella scuola primaria xD) o)
in il 1540s. Ma per questa sfida ci concentriamo solo sul significato pre-1918 del simbolo obelus÷
.
†††: Fonti: questo articolo in generale . E le regole pre-1918 relative÷
sono menzionate in: questo articolo di The American Mathematical Monthly del febbraio 1917 ; questo libro tedesco di Teutsche Algebra del 1659 pagina 9 e pagina 76 ; questo Un primo libro in Algebradal 1895 pagina 46 [48/189] .Leggermente fuori tema: riguardo alla discussione effettiva su questa espressione: in primo luogo non dovrebbe mai essere scritto così! La risposta corretta è irrilevante, se la domanda non è chiara. * Fai clic sul pulsante "chiudi perché non è chiaro cosa stai chiedendo" * .
E per la cronaca, anche diverse versioni dei calcolatori Casio non sanno come gestire correttamente questa espressione:
Sfida:
Ti vengono dati due input:
- Un'espressione matematica (valida) che consiste solo dei simboli
0123456789+-×/÷()
- Un anno
÷
/
Regole della sfida:
- Puoi supporre che l'espressione matematica sia valida e usi solo i simboli
0123456789+-×/÷()
. Questo significa anche che non dovrai affrontare l'espiazione. (Puoi anche usare simboli diversi per×
o÷
(cioè*
o%
), se aiuta il golf o se la tua lingua supporta solo ASCII.) - Puoi aggiungere delimitatori di spazio all'espressione di input se ciò aiuta la valutazione (forse manuale) dell'espressione.
- L'I / O è flessibile. L'input può essere una stringa, un array di caratteri, ecc. L'anno può essere un numero intero, un oggetto data, una stringa, ecc. L'output sarà un numero decimale.
- Puoi presumere che non ci sarà alcuna divisione per 0 casi di test.
- Puoi supporre che i numeri nell'espressione di input siano non negativi (quindi non dovrai occuparti di differenziare il
-
simbolo come negativo rispetto-
al simbolo di sottrazione). L'output può comunque essere negativo! - Puoi presumere che
N(
sarà sempre scritto comeN×(
invece. Ci concentreremo solo sulla seconda controversia sui simboli di divisione/
contro÷
questa sfida. - I valori di output decimali devono avere una precisione di almeno tre cifre decimali.
÷
÷
×
/
Regole generali:
- Questo è code-golf , quindi vince la risposta più breve in byte.
Non lasciare che le lingue di code-golf ti scoraggino dal pubblicare risposte con lingue non codegolfing. Prova a trovare una risposta il più breve possibile per "qualsiasi" linguaggio di programmazione. - Per la tua risposta valgono regole standard con regole I / O predefinite , quindi puoi usare STDIN / STDOUT, funzioni / metodo con i parametri corretti e tipo di ritorno, programmi completi. La tua chiamata.
- Sono vietate le scappatoie predefinite .
- Se possibile, aggiungi un link con un test per il tuo codice (ad es. TIO ).
- Inoltre, si consiglia vivamente di aggiungere una spiegazione per la risposta.
Casi test:
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))
`=`=`/`
è diabolico! Ottima soluzione!