บทนำ:
แรงบันดาลใจจากการอภิปรายที่มีอยู่แล้วที่เกิดขึ้นมานานหลายปีเกี่ยวกับการแสดงออก2)
ด้วยการแสดงออกที่คณิตศาสตร์ได้อย่างรวดเร็วจะเห็นว่าคำตอบที่ถูกต้องคือในขณะที่คนที่มีพื้นหลังเป็นคณิตศาสตร์ที่เรียบง่ายจากโรงเรียนอย่างรวดเร็วจะเห็นว่าคำตอบที่ถูกต้องคือ9ดังนั้นข้อโต้แย้งนี้และคำตอบที่ต่างกันมาจากไหน? มีสองกฎระเบียบที่ขัดแย้งกันในวิธีการที่เป็นลายลักษณ์อักษร หนึ่งเนื่องจากเป็นส่วนหนึ่งและเป็นหนึ่งเนื่องจากสัญลักษณ์การหาร
2(
÷
แม้ว่าทั้งนักคณิตศาสตร์และ 'คนธรรมดา' จะใช้PEMDAS (วงเล็บ - เลขชี้กำลัง - การหาร / การคูณ - การบวก / การลบ) สำหรับนักคณิตศาสตร์การแสดงออกจะได้รับการประเมินเช่นนี้ด้านล่างเพราะเป็นตัวอย่างเช่น monomial อาคา " คำเดียวเนื่องจากการคูณโดยนัยโดยการตีข่าว " (และดังนั้นส่วนหนึ่งของใน) ซึ่งจะได้รับการประเมินที่แตกต่างจาก (ทวินามอาคาสองคำ):
P
PEMDAS
ในขณะที่ 'คนธรรมดา',และจะเหมือนกัน (และเป็นส่วนหนึ่งของอิน) ดังนั้นพวกเขาจะใช้สิ่งนี้แทน:
MD
PEMDAS
อย่างไรก็ตามแม้ว่าเราจะมีการเขียนการแสดงออกเดิม÷
สามารถมียังคงมีความขัดแย้งเกิดจากการใช้สัญลักษณ์การแบ่ง ในคณิตศาสตร์สมัยใหม่สัญลักษณ์/
และ÷
มีความหมายเดียวกัน: แบ่ง กฎบาง pre-1918 †เกี่ยวกับการแบ่งสัญลักษณ์÷
††/
รัฐว่ามันมีความหมายที่แตกต่างจากสัญลักษณ์การหาร เพราะนี่คือการ÷
ใช้เพื่อหมายถึง " แบ่งจำนวน / การแสดงออกทางด้านซ้ายมีจำนวน / การแสดงออกทางด้านขวา " ††† ดังนั้น÷ ขแล้วจะเป็นหรือตอนนี้ ซึ่งในกรณีจะได้รับการประเมินเช่นนี้โดยคน pre-1918:
†: แม้ว่าฉันจะพบหลายแหล่งที่อธิบายวิธีการ÷
ใช้ในอดีต (ดู†††ด้านล่าง) แต่ฉันไม่สามารถหาข้อสรุปที่พิสูจน์ได้ว่าการเปลี่ยนแปลงนี้เกิดขึ้นที่ไหนสักแห่งในปี 2461 แต่สำหรับความท้าทายนี้เราถือว่า 2461 คือ จุดเปลี่ยนที่เริ่มต้น÷
และ
/
หมายถึงสิ่งเดียวกันที่พวกเขาแตกต่างกันในอดีต
††: สัญลักษณ์อื่น ๆ นอกจากนี้ยังมีการใช้ในอดีตที่ผ่านมาสำหรับการแบ่งเช่น
:
ใน 1633 (หรือในขณะนี้ยังคงอยู่ในประเทศเนเธอร์แลนด์และประเทศในยุโรปอื่น ๆ ที่ไม่ใช่ภาษาอังกฤษตั้งแต่นี้คือสิ่งที่ผมได้เรียนรู้กับบุคคลในโรงเรียนประถมศึกษา xD) หรือ)
ใน ปี 1540 แต่สำหรับความท้าทายนี้เราจะมุ่งเน้นไปที่ pre-1918÷
ความหมายของสัญลักษณ์
†††: แหล่งที่มา: บทความนี้โดยทั่วไป และ pre-1918 กฎระเบียบเกี่ยวกับ÷
กล่าวถึงใน: นี้อเมริกันคณิตศาสตร์เดือนบทความจากกุมภาพันธ์ 1917 ; หนังสือภาษาเยอรมัน Teutsche Algebra เล่มนี้จาก 1,669 หน้า 9และหน้า 76 ; หนังสือเล่มนี้เป็นหนังสือเล่มแรกในพีชคณิตจาก 1895 หน้า 46 [48/189]ปิดหัวข้อเล็กน้อย: เกี่ยวกับการสนทนาจริงเกี่ยวกับการแสดงออกนี้: มันไม่ควรเขียนเช่นนี้ในสถานที่แรก! คำตอบที่ถูกต้องนั้นไม่เกี่ยวข้องหากคำถามนั้นไม่ชัดเจน * * * * คลิก "ปิดเพราะมันไม่มีความชัดเจนในสิ่งที่คุณขอปุ่ม" *
และสำหรับบันทึกแม้แต่เครื่องคิดเลข Casio รุ่นต่างๆยังไม่รู้วิธีจัดการกับนิพจน์นี้อย่างถูกต้อง:
ท้าทาย:
คุณจะได้รับสองอินพุต:
- นิพจน์ทางคณิตศาสตร์ (ใช้ได้) ที่ประกอบด้วยสัญลักษณ์เท่านั้น
0123456789+-×/÷()
- ปี
และคุณส่งออกผลมาจากการแสดงออกทางคณิตศาสตร์ตามปี (ในกรณีที่÷
มีการใช้งานแตกต่างกันเมื่อแต่จะใช้ตรงเช่นเดียวกับ/
เมื่อ )
กฏท้าทาย:
- คุณสามารถสันนิษฐานได้ว่านิพจน์ทางคณิตศาสตร์นั้นถูกต้องและใช้สัญลักษณ์
0123456789+-×/÷()
เท่านั้น นอกจากนี้ยังหมายความว่าคุณไม่ต้องกังวลเรื่องการยกกำลัง (คุณยังได้รับอนุญาตให้ใช้สัญลักษณ์ที่แตกต่างกันสำหรับ×
หรือ÷
(เช่น*
หรือ%
) หากมันช่วยให้การเล่นกอล์ฟหรือหากภาษาของคุณรองรับ ASCII เท่านั้น) - คุณได้รับอนุญาตให้เพิ่มตัวเว้นวรรคลงในนิพจน์อินพุตหากสิ่งนี้ช่วยในการประเมินนิพจน์
- I / O ยืดหยุ่นได้ อินพุตสามารถเป็นสตริงอักขระอาร์เรย์เป็นต้นปีสามารถเป็นจำนวนเต็มวันที่วัตถุสตริง ฯลฯ เอาท์พุทจะเป็นตัวเลขทศนิยม
- คุณสามารถสันนิษฐานได้ว่าจะไม่มีแผนกใด ๆ หารด้วย 0 กรณีทดสอบ
- คุณสามารถสมมติว่าตัวเลขในอินพุทนิพจน์นั้นจะไม่เป็นลบ (ดังนั้นคุณจะไม่ต้องจัดการกับการแยกความแตกต่างของ
-
สัญลักษณ์-
ลบและสัญลักษณ์ลบออก) อย่างไรก็ตามเอาต์พุตยังสามารถเป็นลบได้! - คุณสามารถสันนิษฐานได้ว่า
N(
จะถูกเขียนN×(
แทนเสมอ เราจะมุ่งเน้นไปที่ความขัดแย้งที่สองของสัญลักษณ์ส่วน/
VS÷
ในความท้าทายนี้ - ค่าผลลัพธ์ทศนิยมควรมีความแม่นยำอย่างน้อยสามหลักทศนิยม
- หากอินพุตนิพจน์มีหลายค่า
÷
(เช่น ) ด้วยเหล่านั้นจะถูกประเมินเช่นนี้: 4 (หรือในคำว่า:หมายเลขหารด้วยนิพจน์โดยที่นิพจน์หมายถึงเลขถูกหารด้วยหมายเลข) ÷
×
/
กฎทั่วไป:
- นี่คือcode-golfดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ
อย่าปล่อยให้ภาษาที่ใช้รหัสกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ codegolfing พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ ' - กฎมาตรฐานใช้สำหรับคำตอบของคุณด้วยกฎ I / O เริ่มต้นดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีการที่มีพารามิเตอร์ที่เหมาะสมและประเภทผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
- ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
- หากเป็นไปได้โปรดเพิ่มลิงก์พร้อมทดสอบรหัสของคุณ (เช่นTIO )
- นอกจากนี้ขอแนะนำให้เพิ่มคำอธิบายสำหรับคำตอบของคุณ
กรณีทดสอบ:
Input-expression: Input-year: Output: Expression interpretation with parenthesis:
6÷2×(1+2) 2018 9 (6/2)×(1+2)
6÷2×(1+2) 1917 1 6/(2×(1+2))
9+6÷3-3+15/3 2000 13 ((9+(6/3))-3)+(15/3)
9+6÷3-3+15/3 1800 3 (9+6)/((3-3)+(15/3))
4÷2÷2 1918 1 (4/2)/2
4÷2÷2 1900 4 4/(2/2)
(1÷6-3)×5÷2/2 2400 -3.541... ((((1/6)-3)×5)/2)/2
(1÷6-3)×5÷2/2 1400 1.666... ((1/(6-3))×5)/(2/2)
1×2÷5×5-15 2015 -13 (((1×2)/5)×5)-15
1×2÷5×5-15 1719 0.2 (1×2)/((5×5)-15)
10/2+3×7 1991 26 (10/2)+(3×7)
10/2+3×7 1911 26 (10/2)+(3×7)
10÷2+3×7 1991 26 (10/2)+(3×7)
10÷2+3×7 1911 0.434... 10/(2+(3×7))
4÷2+2÷2 2000 3 (4/2)+(2/2)
4÷2+2÷2 1900 2 4/((2+2)/2)
4÷2×2÷3 9999 1.333... ((4/2)×2)/3
4÷2×2÷3 0000 3 4/((2×2)/3)
((10÷2)÷2)+3÷7 2000 2.928... ((10/2)/2)+(3/7)
((10÷2)÷2)+3÷7 1900 0.785... (((10/2)/2)+3)/7
(10÷(2÷2))+3×7+(10÷(2÷2))+3×7
1920 62 (10/(2/2))+(3×7)+(10/(2/2))+(3×7)
(10÷(2÷2))+3×7+(10÷(2÷2))+3×7
1750 62 (10/(2/2))+(3×7)+(10/(2/2))+(3×7)
10÷2/2+4 2000 6.5 ((10/2)/2)+4
10÷2/2+4 0100 2 10/((2/2)+4)
9+6÷3-3+15/3 9630 13 9+(6/3)-3+(15/3)
9+6÷3-3+15/3 0369 3 (9+6)/(3-3+(15/3))
`=`=`/`
มันโหดร้าย! สุดยอดทางออก!