ความท้าทายนี้จะเกี่ยวข้องกับบางส่วนของคุณสมบัติภาษา MATL ที่เป็นส่วนหนึ่งของพฤษภาคม 2018 ภาษาของเดือนเหตุการณ์ ความท้าทายที่เกี่ยวข้อง: คลิปบอร์ดฟังก์ชั่น: สำเนา
บทนำ
ฟังก์ชั่นคลิปบอร์ดของ MATL จัดเก็บ ("คัดลอก") อินพุตไปยังการโทรล่าสุดทั้งสี่ไปยังฟังก์ชั่นการบันทึกปกติ ฟังก์ชั่นปกติเป็นฟังก์ชั่นที่ใช้กันมากที่สุดใน MATL การรับข้อมูลหมายความว่าฟังก์ชั่นรับอินพุตอย่างน้อยหนึ่งรายการ เนื้อหาคลิปบอร์ดที่เก็บไว้สามารถถูกผลักลงบนสแต็ก ("วาง")
ความท้าทายนี้จะนำเนื้อหาของคลิปบอร์ดเป็นอินพุต จะสันนิษฐานว่าฟังก์ชั่นทั้งหมดที่สร้างสถานะคลิปบอร์ดนั้นนำจำนวนเต็มบวกหนึ่งตัวหรือมากกว่าเป็นอินพุต ดังนั้นสถานะคลิปบอร์ดสามารถแสดงโดยรายการของตัวเลข (สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการเติมคลิปบอร์ดจริง ๆ เห็นความท้าทายที่เกี่ยวข้อง แต่ไม่จำเป็นสำหรับปัจจุบัน)
การตีความเนื้อหาของคลิปบอร์ด
ตัวอย่างที่ 1
แรกรายการภายในหมายถึงล่าสุดโทรฟังก์ชั่นและอื่น ๆ ดังนั้นรัฐคลิปบอร์ด
[[11, 28], [12, 16], [4], [5, 6]]
บ่งชี้ว่าการเรียกใช้ฟังก์ชันสุดท้ายใช้สองอินพุตคือ11, 28; การโทรที่สองครั้งสุดท้ายใช้อินพุท12, 16; เป็นต้น (สถานะคลิปบอร์ดนี้จัดทำขึ้นโดยรหัสในตัวอย่างแรกของการท้าทายที่เกี่ยวข้อง)
ตัวอย่างที่ 2
หากมีการเรียกใช้ฟังก์ชั่นไม่เพียงพอรายชื่อภายในบางส่วนในคลิปบอร์ดจะว่างเปล่า:
[[7, 5], [], [], []]
(สิ่งนี้ผลิตโดยโปรแกรมที่เพิ่ม7และ5)
ตัวอย่างที่ 3
การเรียกใช้ฟังก์ชั่นสามารถมีอินพุตจำนวนเท่าใดก็ได้แต่อย่างน้อยก็ตลอดเวลา1(ฟังก์ชั่นที่ไม่มีอินพุตไม่เปลี่ยนสถานะคลิปบอร์ด) ดังนั้นต่อไปนี้ยังเป็นไปได้
[[3], [2, 40, 34], [7, 8, 15], []]
การเข้าถึงเนื้อหาของคลิปบอร์ด
เนื้อหาของคลิปบอร์ดฟังก์ชั่นถูกผลักลงบนสแต็กโดยใช้ฟังก์ชั่นของ MATL M(ซึ่งโดยวิธีการนั้นไม่ได้เป็นฟังก์ชั่นปกติ แต่เป็นฟังก์ชั่นคลิปบอร์ด) ฟังก์ชันนี้ใช้จำนวนเต็มบวกเป็นอินพุตและดันเนื้อหาคลิปบอร์ดบางส่วนลงบนสแต็กดังต่อไปนี้ อ้างอิงสถานะคลิปบอร์ดในตัวอย่างที่ 1:
[[11, 28], [12, 16], [4], [5, 6]]
1Mส่งคืนอินพุตทั้งหมดไปยังการเรียกใช้ฟังก์ชันล่าสุด ดังนั้นสำหรับตัวอย่างการพิจารณาจะให้,1128- ในทำนองเดียวกัน
2M,3Mและ4Mกลับปัจจัยการผลิตทั้งหมดที่สองสามและสี่ฟังก์ชั่นการโทรล่าสุด ดังนั้น2Mให้12,16;3Mให้4; และ4Mให้5,6. - ตัวเลขที่นอกเหนือจากการ
4เลือกแต่ละอินพุตเพื่อใช้งานการโทรที่ใช้มากกว่าหนึ่งอินพุต ดังนั้น5Mจะคืนค่าอินพุตสุดท้ายให้กับการเรียกล่าสุดดังกล่าว28ในกรณีของเรานี้จะช่วยให้6Mส่งกลับก่อน11การป้อนข้อมูลของแต่ละบุคคลซึ่งเป็น7Mผลตอบแทนการป้อนข้อมูลสุดท้ายของสายที่สองสุดท้าย, ที่อยู่,16และช่วยให้8M12ตอนนี้จะช่วยให้9M6สังเกตว่าการ4ข้ามอินพุตนั้นเป็นเพียงอินพุตเดียวในการเรียกใช้ฟังก์ชัน สุดท้ายให้10M5
สำหรับสถานะคลิปบอร์ดในตัวอย่าง 3:
[[3], [2, 40, 34], [7, 8, 15], []]
1M3จะช่วยให้2Mให้2, ,40ให้, ,343M78154Mมีพฤติกรรมที่ไม่ได้กำหนด (สำหรับวัตถุประสงค์ของการท้าทายนี้) เนื่องจากมีการเรียกใช้ฟังก์ชันเพียงสามครั้ง5M34จะช่วยให้ จะช่วยให้6Mจะช่วยให้ จะช่วยให้ ให้, ให้407M28M159M810M711M,12M... ยังมีพฤติกรรมที่ไม่ได้กำหนด
ความท้าทาย
อินพุต :
- สถานะคลิปบอร์ดเป็นรายการของรายการหรือรูปแบบที่เหมาะสมอื่น ๆ
- เป็นจำนวนเต็มบวกn
เอาท์พุท : ผลลัพธ์ของฟังก์ชั่นการโทรMโดยมีnเป็นอินพุต ผลลัพธ์จะเป็นตัวเลขหนึ่งหรือหลายตัวที่มีตัวคั่นชัดเจนหรือในรูปแบบที่สมเหตุสมผลเช่นรายการหรืออาร์เรย์
ชี้แจง:
- สถานะคลิปบอร์ดประกอบด้วยตัวเลขสี่รายการ รายการต่อท้ายบางรายการอาจว่างเปล่าเช่นในตัวอย่างที่ 2 และ 3 หากต้องการคุณสามารถป้อนคลิปบอร์ดโดยไม่ต้องมีรายการว่างต่อท้าย ดังนั้นตัวอย่างที่ 3
[[3], [2, 40, 34], [7, 8, 15]]จะกลายเป็น - ตัวเลขทั้งหมดในคลิปบอร์ดจะเป็นจำนวนเต็มบวกอาจมีมากกว่าหนึ่งหลัก
- หมายเลขnรับประกันว่าถูกต้อง ดังนั้นสำหรับตัวอย่างที่ 3 ข้างต้น
nไม่สามารถหรือ411
กฎเพิ่มเติม:
input และ output สามารถดำเนินการโดยวิธีการที่เหมาะสมใด ๆ
โปรแกรมหรือฟังก์ชั่นที่ได้รับอนุญาตในการเขียนโปรแกรมภาษา ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ
กรณีทดสอบ
Clipboard state
Number
Output(s)
[[11, 28], [12, 16], [4], []]
2
12, 16
[[11, 28], [12, 16], [4], []]
5
28
[[7, 144], [12], [4, 8], [3, 4, 6]]
1
7, 144
[[7, 144], [12], [4, 8], [3, 4, 6]]
10
4
[[30], [40], [50, 60], [70, 80, 90]]
2
40
[[30], [40], [50, 60], [80, 90]]
7
90
[[15], [30], [2, 3, 5], [4, 5, 10]]
3
2, 3, 5
[[15], [30], [2, 3, 5], [4, 5, 10]]
7
2