ความท้าทายนี้จะเกี่ยวข้องกับบางส่วนของคุณสมบัติภาษา MATL ที่เป็นส่วนหนึ่งของพฤษภาคม 2018 ภาษาของเดือนเหตุการณ์ ที่เกี่ยวข้องกับความท้าทาย : คลิปบอร์ดฟังก์ชั่น: วาง
บทนำ
MATL มีหลายคลิปบอร์ดซึ่งคุณสามารถจัดเก็บค่า (คัดลอก) เพื่อเรียกคืนได้ในภายหลัง (วาง) บางคลิปบอร์ดเป็นแบบอัตโนมัติซึ่งหมายความว่าการคัดลอกจะถูกทริกเกอร์โดยอัตโนมัติจากเหตุการณ์บางอย่าง ความท้าทายนี้จะเน้นที่หนึ่งใน clipbards อัตโนมัติที่เรียกว่าคลิปบอร์ดฟังก์ชั่นอินพุตหรือเพียงฟังก์ชั่นคลิปบอร์ด
คลิปบอร์ดนี้จัดเก็บอินพุตไปยังการโทรล่าสุดทั้งสี่ไปยังฟังก์ชั่นถ่ายภาพปกติ ฟังก์ชั่นปกติเป็นประเภทที่พบมากที่สุดของฟังก์ชั่นใน MATL การรับข้อมูลหมายความว่าฟังก์ชั่นรับอินพุตอย่างน้อยหนึ่งฟังก์ชั่น (ฟังก์ชั่นที่ไม่มีการป้อนข้อมูลใด ๆ จะไม่ได้รับการพิจารณาโดยคลิปบอร์ดฟังก์ชั่น)
นี่เป็นการอธิบายที่ดีที่สุดด้วยตัวอย่างต่อไปนี้ซึ่งใช้สองฟังก์ชั่นปกติ:
+
ซึ่งปรากฏตัวเลขสองตัวจากสแต็กและเพิ่มผลรวมของพวกเขาU
ซึ่งจะปรากฏตัวเลขหนึ่งและผลักสแควร์ของมัน
ตัวอย่างที่ 1 :
3 2 + 6 + 12 4 U + +
ก่อ39
ผล รหัสถูกตีความดังนี้:
- จำนวนตัวอักษรเช่น
3
หรือ12
ถูกผลักไปที่สแต็ก - ฟังก์ชั่นเช่น
+
ป๊อปอินพุทและดันเอาต์พุตไปยังสแต็ก
การเรียกใช้ฟังก์ชันตามลำดับเวลาคือ:
3 2 +
จะช่วยให้5
5 6 +
จะช่วยให้11
4 U
จะช่วยให้16
12 16 +
28
11 28 +
39
จะช่วยให้
คลิปบอร์ดสามารถดูได้ในรายการสี่รายการ รายการภายในแต่ละคนมีปัจจัยการผลิตเพื่อการเรียกฟังก์ชั่นที่มีการโทรล่าสุดก่อน ภายในรายการภายในแต่ละปัจจัยการผลิตที่อยู่ในคำสั่งเดิมของพวกเขา
ดังนั้นหลังจากรันโค้ดเนื้อหาของคลิปบอร์ดคือ (ในรูปแบบของ Python):
[[11, 28], [12, 16], [4], [5, 6]]
ตัวอย่างที่ 2 :
10 20 U 30 +
ปล่อยตัวเลข10
และ430
บนสแต็ก สแต็กจะแสดงด้านล่างขึ้นบนในตอนท้ายของโปรแกรม
การเรียกฟังก์ชั่นคือ
20 U
จะช่วยให้400
400 30 +
จะช่วยให้430
เนื่องจากมีเพียงสองฟังก์ชั่นการโทรบางรายการภายในกำหนดคลิปบอร์ดจะเป็นที่ว่างเปล่า โปรดทราบว่าวิธีการที่10
ไม่ใช้เป็นอินพุตไปยังฟังก์ชันใด ๆ
ดังนั้นเนื้อหาคลิปบอร์ดหลังจากเรียกใช้รหัสคือ:
[[400, 30], [20], [], []]
ตัวอย่างที่ 3 (ไม่ถูกต้อง):
10 20 + +
ถือว่าไม่ถูกต้องเนื่องจากอินพุตที่สอง+
หายไป (ใน MATL สิ่งนี้จะทริกเกอร์อินพุตของผู้ใช้โดยปริยาย)
ความท้าทาย
อินพุต : สตริงS ที่มีตัวอักษรตัวเลข+
และU
คั่นด้วยช่องว่าง
เอาท์พุท : เนื้อหาของคลิปบอร์ดฟังก์ชั่นหลังจากการประเมินสตริงS S
ชี้แจง:
- คุณสามารถใช้สัญลักษณ์ที่สอดคล้องกันสองสัญลักษณ์เพื่อแสดงถึงฟังก์ชั่นเหล่านั้นนอกเหนือจากตัวเลข นอกจากนี้คุณสามารถใช้สัญลักษณ์ที่สอดคล้องกันเป็นตัวคั่นแทนการเว้นวรรค
- จะมีการพิจารณาฟังก์ชันที่ระบุทั้งสองเท่านั้น
- สตริงอินพุตจะมีตัวอักษรอย่างน้อยหนึ่งตัวและอย่างน้อยหนึ่งฟังก์ชั่น
- ตัวเลขทั้งหมดจะเป็นจำนวนเต็มบวกอาจมีมากกว่าหนึ่งหลัก
- เป็นไปได้ว่าฟังก์ชันบางตัวไม่ใช้ตัวอักษรตัวเลขบางตัวดังที่แสดงในตัวอย่างที่ 2
- อินพุตรับประกันว่าเป็นรหัสที่ถูกต้องโดยไม่ต้องใช้หมายเลขเพิ่มเติม ดังนั้นสตริงในตัวอย่าง 3 จะไม่เกิดขึ้น
- รายการด้านในว่างในผลลัพธ์สามารถเป็น ommited ดังนั้นผลลัพธ์ในตัวอย่างที่ 2 จึงเป็นได้
[[400, 30], [20]]
- รูปแบบเอาต์พุตที่สมเหตุสมผลและชัดเจนใด ๆ นั้นเป็นที่ยอมรับ
400,30;20;;
ยกตัวอย่างเช่นสตริงด้วยเครื่องหมายจุลภาคเป็นตัวคั่นภายในและอัฒภาคเป็นตัวคั่นนอก:
กฎเพิ่มเติม:
input และ output สามารถดำเนินการโดยวิธีการที่เหมาะสมใด ๆ
โปรแกรมหรือฟังก์ชั่นที่ได้รับอนุญาตในการเขียนโปรแกรมภาษา ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ
กรณีทดสอบ
Input
Output
3 2 + 6 + 12 4 U + +
[[11, 28], [12, 16], [4], [5, 6]]
15 3 4 + 2 U 8 + U +
[[7, 144], [12], [4, 8], [2]]
3 6 9 12 + + 10 8 U 6
[[8], [6, 21], [9, 12], []]
8 41 12 25 4 5 33 7 9 10 + + + + + + + +
[[41, 105], [12, 93], [25, 68], [4, 64]]
10 1 1 + U U U U U
[[65536], [256], [16], [4]]
M
ไหม
M
ผมไม่ได้กล่าวถึงชื่อที่นี่เพราะเราไม่ได้ใช้ฟังก์ชั่น ฉันจะทำมันในความท้าทาย“ แปะ”
[[28, 11], [16, 12], [4], [6, 5]]
การส่งออกที่ถูกต้องสำหรับตัวอย่างแรก?