ในสัญลักษณ์นำหน้าตัวดำเนินการมาก่อนอาร์กิวเมนต์ดังนั้นคุณสามารถจินตนาการได้ว่าตัวดำเนินการเรียกnext()
ซึ่งเรียกซ้ำ ในสัญกรณ์มัดผู้ประกอบการไประหว่างการขัดแย้งเพื่อให้คุณสามารถจินตนาการได้ว่ามันเป็นต้นไม้แยก ในรูปแบบ postfix ตัวดำเนินการมาหลังจากอาร์กิวเมนต์ดังนั้นคุณสามารถจินตนาการได้ว่าเป็นแบบสแต็ก
ในสัญกรณ์ anyfix, ผู้ประกอบการสามารถไปได้ทุกที่* หากโอเปอเรเตอร์ปรากฏขึ้นและมีข้อโต้แย้งไม่เพียงพอโอเปอเรเตอร์จะรอจนกว่าจะมีอาร์กิวเมนต์เพียงพอ สำหรับความท้าทายนี้คุณจะต้องใช้ตัวประเมิน anyfix ขั้นพื้นฐานมาก (โปรดทราบว่า anyfix เป็นภาษาสันทนาที่ฉันละทิ้งที่คุณสามารถเล่นกับที่นี่หรือลองดูที่นี่ )
คุณจะต้องสนับสนุนคำสั่งต่อไปนี้:
(Arity 1)
- ที่ซ้ำกัน
- เชิงลบ
(Arity 2)
- ส่วนที่เพิ่มเข้าไป
- การคูณ
- ความเสมอภาค: ผลตอบแทนหรือ
0
1
คุณอาจเลือกใช้สัญลักษณ์ที่ไม่ใช่ช่องว่างห้าคำสำหรับคำสั่งเหล่านี้ เพื่อจุดประสงค์ในการสาธิตฉันจะใช้สิ่ง"
ที่ซ้ำกัน×
เป็นการคูณและการ+
บวก
สำหรับตัวอักษรคุณจะต้องสนับสนุนจำนวนเต็มที่ไม่เป็นลบเท่านั้น แต่ล่ามของคุณจะต้องมีจำนวนเต็มทั้งหมด (ภายในช่วงจำนวนเต็ม (เหมาะสม) ของภาษาของคุณ)
10+5
ลองมาดูตัวอย่างนี้: ที่เก็บข้อมูลควรทำตัวเป็นสแต็กไม่ใช่คิว ดังนั้นก่อนกองเริ่มต้นที่และจัดคิวเริ่มต้นรายการที่ผู้ประกอบการ[]
[]
จากนั้นที่แท้จริงคือการประเมินผลซึ่งจะทำให้สแต็ค10
[10]
ถัดไปตัวดำเนินการ+
ได้รับการประเมินซึ่งต้องการอาร์กิวเมนต์สองตัว ['+']
แต่มีเพียงคนเดียวคือข้อโต้แย้งในกองดังนั้นรายชื่อผู้ประกอบการที่อยู่ในคิวจะกลายเป็น จากนั้นที่แท้จริงคือการประเมินผลซึ่งจะทำให้สแต็ค5
[10, 5]
ณ จุดนี้ผู้ประกอบการ'+'
สามารถประเมินจึงเป็นสิ่งที่ทำให้สแต็คและคิว[15]
[]
ผลสุดท้ายควรจะเป็น[15]
สำหรับ+ 10 5
, และ10 + 5
10 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) ชะลอการใช้ตัวดำเนินการซ้ำซ้อน (สองสิ่งที่ฉันพลาดทั้งหมด)