ความท้าทายนี้จะเกี่ยวข้องกับบางส่วนของคุณสมบัติภาษา 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
ส่งคืนอินพุตทั้งหมดไปยังการเรียกใช้ฟังก์ชันล่าสุด ดังนั้นสำหรับตัวอย่างการพิจารณาจะให้,11
28
- ในทำนองเดียวกัน
2M
,3M
และ4M
กลับปัจจัยการผลิตทั้งหมดที่สองสามและสี่ฟังก์ชั่นการโทรล่าสุด ดังนั้น2M
ให้12
,16
;3M
ให้4
; และ4M
ให้5
,6
. - ตัวเลขที่นอกเหนือจากการ
4
เลือกแต่ละอินพุตเพื่อใช้งานการโทรที่ใช้มากกว่าหนึ่งอินพุต ดังนั้น5M
จะคืนค่าอินพุตสุดท้ายให้กับการเรียกล่าสุดดังกล่าว28
ในกรณีของเรานี้จะช่วยให้6M
ส่งกลับก่อน11
การป้อนข้อมูลของแต่ละบุคคลซึ่งเป็น7M
ผลตอบแทนการป้อนข้อมูลสุดท้ายของสายที่สองสุดท้าย, ที่อยู่,16
และช่วยให้8M
12
ตอนนี้จะช่วยให้9M
6
สังเกตว่าการ4
ข้ามอินพุตนั้นเป็นเพียงอินพุตเดียวในการเรียกใช้ฟังก์ชัน สุดท้ายให้10M
5
สำหรับสถานะคลิปบอร์ดในตัวอย่าง 3:
[[3], [2, 40, 34], [7, 8, 15], []]
1M
3
จะช่วยให้2M
ให้2
, ,40
ให้, ,34
3M
7
8
15
4M
มีพฤติกรรมที่ไม่ได้กำหนด (สำหรับวัตถุประสงค์ของการท้าทายนี้) เนื่องจากมีการเรียกใช้ฟังก์ชันเพียงสามครั้ง5M
34
จะช่วยให้ จะช่วยให้6M
จะช่วยให้ จะช่วยให้ ให้, ให้40
7M
2
8M
15
9M
8
10M
7
11M
,12M
... ยังมีพฤติกรรมที่ไม่ได้กำหนด
ความท้าทาย
อินพุต :
- สถานะคลิปบอร์ดเป็นรายการของรายการหรือรูปแบบที่เหมาะสมอื่น ๆ
- เป็นจำนวนเต็มบวกn
เอาท์พุท : ผลลัพธ์ของฟังก์ชั่นการโทรM
โดยมีnเป็นอินพุต ผลลัพธ์จะเป็นตัวเลขหนึ่งหรือหลายตัวที่มีตัวคั่นชัดเจนหรือในรูปแบบที่สมเหตุสมผลเช่นรายการหรืออาร์เรย์
ชี้แจง:
- สถานะคลิปบอร์ดประกอบด้วยตัวเลขสี่รายการ รายการต่อท้ายบางรายการอาจว่างเปล่าเช่นในตัวอย่างที่ 2 และ 3 หากต้องการคุณสามารถป้อนคลิปบอร์ดโดยไม่ต้องมีรายการว่างต่อท้าย ดังนั้นตัวอย่างที่ 3
[[3], [2, 40, 34], [7, 8, 15]]
จะกลายเป็น - ตัวเลขทั้งหมดในคลิปบอร์ดจะเป็นจำนวนเต็มบวกอาจมีมากกว่าหนึ่งหลัก
- หมายเลขnรับประกันว่าถูกต้อง ดังนั้นสำหรับตัวอย่างที่ 3 ข้างต้น
n
ไม่สามารถหรือ4
11
กฎเพิ่มเติม:
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