ในสัญลักษณ์นำหน้าตัวดำเนินการมาก่อนอาร์กิวเมนต์ดังนั้นคุณสามารถจินตนาการได้ว่าตัวดำเนินการเรียกnext()ซึ่งเรียกซ้ำ ในสัญกรณ์มัดผู้ประกอบการไประหว่างการขัดแย้งเพื่อให้คุณสามารถจินตนาการได้ว่ามันเป็นต้นไม้แยก ในรูปแบบ postfix ตัวดำเนินการมาหลังจากอาร์กิวเมนต์ดังนั้นคุณสามารถจินตนาการได้ว่าเป็นแบบสแต็ก
ในสัญกรณ์ anyfix, ผู้ประกอบการสามารถไปได้ทุกที่* หากโอเปอเรเตอร์ปรากฏขึ้นและมีข้อโต้แย้งไม่เพียงพอโอเปอเรเตอร์จะรอจนกว่าจะมีอาร์กิวเมนต์เพียงพอ สำหรับความท้าทายนี้คุณจะต้องใช้ตัวประเมิน anyfix ขั้นพื้นฐานมาก (โปรดทราบว่า anyfix เป็นภาษาสันทนาที่ฉันละทิ้งที่คุณสามารถเล่นกับที่นี่หรือลองดูที่นี่ )
คุณจะต้องสนับสนุนคำสั่งต่อไปนี้:
(Arity 1)
- ที่ซ้ำกัน
- เชิงลบ
(Arity 2)
- ส่วนที่เพิ่มเข้าไป
- การคูณ
- ความเสมอภาค: ผลตอบแทนหรือ
01
คุณอาจเลือกใช้สัญลักษณ์ที่ไม่ใช่ช่องว่างห้าคำสำหรับคำสั่งเหล่านี้ เพื่อจุดประสงค์ในการสาธิตฉันจะใช้สิ่ง"ที่ซ้ำกัน×เป็นการคูณและการ+บวก
สำหรับตัวอักษรคุณจะต้องสนับสนุนจำนวนเต็มที่ไม่เป็นลบเท่านั้น แต่ล่ามของคุณจะต้องมีจำนวนเต็มทั้งหมด (ภายในช่วงจำนวนเต็ม (เหมาะสม) ของภาษาของคุณ)
10+5ลองมาดูตัวอย่างนี้: ที่เก็บข้อมูลควรทำตัวเป็นสแต็กไม่ใช่คิว ดังนั้นก่อนกองเริ่มต้นที่และจัดคิวเริ่มต้นรายการที่ผู้ประกอบการ[] []จากนั้นที่แท้จริงคือการประเมินผลซึ่งจะทำให้สแต็ค10 [10]ถัดไปตัวดำเนินการ+ได้รับการประเมินซึ่งต้องการอาร์กิวเมนต์สองตัว ['+']แต่มีเพียงคนเดียวคือข้อโต้แย้งในกองดังนั้นรายชื่อผู้ประกอบการที่อยู่ในคิวจะกลายเป็น จากนั้นที่แท้จริงคือการประเมินผลซึ่งจะทำให้สแต็ค5 [10, 5]ณ จุดนี้ผู้ประกอบการ'+'สามารถประเมินจึงเป็นสิ่งที่ทำให้สแต็คและคิว[15][]
ผลสุดท้ายควรจะเป็น[15]สำหรับ+ 10 5, และ10 + 510 5 +
10+"ลองมาดูตัวอย่างหนัก: สแต็คและคิวเริ่มต้นและ[] ได้รับการประเมินครั้งแรกซึ่งจะทำให้สแต็ค ถัดไปคือการประเมินซึ่งไม่เปลี่ยนแปลงสแต็ค (เพราะไม่มีข้อโต้แย้งพอ) และทำให้คิว จากนั้นจะทำการประเมิน นี้สามารถทำงานได้ทันทีดังนั้นจึงเป็นที่ทำให้สแต็ค ขณะนี้สามารถได้รับการประเมินเพื่อให้สแต็คจะกลายเป็นและคิว ผลสุดท้ายคือ[]10[10]+['+']"[10, 10]+[20][][20]
สิ่งที่เกี่ยวกับคำสั่งของการดำเนินงาน?
×+"10 10ลองมาดูที่ สแต็กและคิวเริ่มต้นทั้งสองเป็น[]:
×:['×']สแต็คได้มีการเปลี่ยนแปลงและคิวจะกลายเป็น+:['×', '+']สแต็คได้มีการเปลี่ยนแปลงและคิวจะกลายเป็น":['×', '+', '"']สแต็คได้มีการเปลี่ยนแปลงและคิวจะกลายเป็น10:[10]สแต็คจะกลายเป็น แม้ว่า×ควรจะเป็นผู้ดำเนินการรายแรกที่ได้รับการประเมินเนื่องจากปรากฏก่อน"สามารถรันได้ทันทีและไม่มีผู้ดำเนินการรายใดก่อนจึงจะสามารถประเมินผลได้ สแต็คจะกลายเป็นและคิว[10, 10]ขณะนี้สามารถประเมินได้ซึ่งจะทำให้สแต็คและคิว['×', '+']×[100]['+']10: สแต็กจะกลายเป็น[100, 10]ซึ่งช่วยให้+สามารถประเมิน สแต็คจะกลายเป็นและคิว[110][]
[110]ผลสุดท้ายคือ
คำสั่งที่ใช้ในการสาธิตเหล่านี้สอดคล้องกับภาษาของคำสั่ง anyfix อย่างไรก็ตามตัวอย่างสุดท้ายจะไม่ทำงานเนื่องจากข้อบกพร่องในล่ามของฉัน (ข้อจำกัดความรับผิดชอบ: การส่งของคุณจะไม่ถูกใช้ในล่าม anyfix)
ท้าทาย
เลือกชุดของอักขระที่ไม่ใช่ตัวเลขที่ไม่ใช่ช่องว่าง 5 ตัวและสร้างล่ามคำสั่งแก้ไขตามข้อกำหนดด้านบน โปรแกรมของคุณสามารถส่งออกอาร์เรย์เอกพจน์หรือค่าที่อยู่ในนั้น จะรับประกันได้ว่าสแต็กของค่าจะมีเพียงค่าเดียวเมื่อสิ้นสุดการดำเนินการและคิวของผู้ประกอบการจะว่างเปล่าเมื่อสิ้นสุดการดำเนินการ
นี่คือcode-golfดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์จะชนะ
กรณีทดสอบ
สำหรับกรณีการทดสอบเหล่านี้ซ้ำ"ลบคือ-นอกจากเป็น+คูณเป็นและความเท่าเทียมกันคือ×=
Input -> Output
1+2×3 -> 9
1"+"+ -> 4
2"××" -> 16
3"×+" -> 18
3"+×" -> 36
123"= -> 1 ("= always gives 1)
1+2=3 -> 1
1"=2+ -> 3
1-2-+ -> -3
-1-2+ -> 3 (hehe, the `-1` becomes `+1` at the `-` rather than making the `2` a `-1`)
+×"10 10 -> 200 (after the 10 is duplicated (duplication is delayed), 10 + 10 is performed and then 20 * 10, giving 200)
กฎระเบียบ
- ช่องโหว่มาตรฐานใช้
- คุณอาจใช้ล่ามอย่างเป็นทางการของ anyfix และเล่นกอล์ฟหากคุณต้องการ คาดว่าจะสูญเสียอย่างน่ากลัว
การป้อนข้อมูลจะได้รับเป็นสตริงและเอาท์พุทเป็นอาร์เรย์จำนวนเต็มเดียวออกมาเป็นตัวแทนสตริงของทั้ง คุณอาจสันนิษฐานว่าข้อมูลที่ป้อนจะมีช่องว่างตัวเลขและ 5 ตัวอักษรที่คุณเลือกเท่านั้น
* ไม่จริง
0และ1?
×+"10 10ในกรณีทดสอบหรือตัวอย่างอื่น ๆ ที่ 1) ใช้ช่องว่างและ 2) ชะลอการใช้ตัวดำเนินการซ้ำซ้อน (สองสิ่งที่ฉันพลาดทั้งหมด)