Thử thách này có liên quan đến một số tính năng của ngôn ngữ MATL, như là một phần của sự kiện Ngôn ngữ của tháng 5 năm 2018 . Liên kết thách thức: Chức năng clipboard: sao chép .
Giới thiệu
Chức năng clipboard của MATL lưu trữ ("bản sao") các đầu vào cho bốn cuộc gọi gần đây nhất tới các chức năng nhận đầu vào thông thường. Các hàm thông thường là loại hàm phổ biến nhất trong MATL. Nhập liệu có nghĩa là chức năng mất ít nhất một đầu vào. Nội dung clipboard được lưu trữ có thể được đẩy lên ngăn xếp ("dán").
Thử thách này sẽ lấy nội dung clipboard làm đầu vào. Nó sẽ được giả định rằng tất cả các hàm đã tạo ra trạng thái clipboard đó lấy một hoặc nhiều số nguyên dương làm đầu vào. Vì vậy, trạng thái clipboard có thể được biểu diễn bằng một danh sách các danh sách các số. (Để biết thêm thông tin về cách điền vào bảng tạm, hãy xem thử thách liên quan; nhưng điều đó không cần thiết cho hiện tại).
Giải thích nội dung clipboard
ví dụ 1
Các đầu danh sách bên đề cập đến việc gần đây nhất gọi hàm, và như vậy, Do đó, nhà nước vào clipboard
[[11, 28], [12, 16], [4], [5, 6]]
chỉ ra rằng chức năng cuộc gọi cuối cùng mất hai đầu vào, cụ thể là 11
, 28
; cuộc gọi thứ hai đã lấy đầu vào 12
, 16
; vv (Trạng thái clipboard này được tạo bởi mã trong ví dụ đầu tiên của thử thách liên quan).
Ví dụ 2
Nếu không có đủ các lệnh gọi hàm , một số danh sách bên trong trong bảng tạm sẽ trống:
[[7, 5], [], [], []]
(Điều này được tạo ra bởi một chương trình chỉ cần thêm 7
và 5
).
Ví dụ 3
Các cuộc gọi chức năng có thể có bất kỳ số lượng đầu vào , nhưng luôn luôn ít nhất 1
(các chức năng không có đầu vào không thay đổi trạng thái clipboard). Vì vậy, sau đây cũng có thể.
[[3], [2, 40, 34], [7, 8, 15], []]
Truy cập nội dung clipboard
Nội dung của bảng tạm chức năng được đẩy lên ngăn xếp bằng hàm MATL M
(nhân tiện, đây không phải là chức năng bình thường, mà là chức năng của bảng tạm). Hàm này lấy một số nguyên dương làm đầu vào và đẩy một số nội dung trong bảng tạm vào ngăn xếp, như sau. Với tham chiếu đến trạng thái clipboard trong ví dụ 1:
[[11, 28], [12, 16], [4], [5, 6]]
1M
trả về tất cả các đầu vào cho lệnh gọi hàm gần đây nhất. Vì vậy, đối với ví dụ được xem xét, nó đưa ra11
,28
.- Tương tự như vậy,
2M
,3M
và4M
trả lại toàn bộ đầu vào cho phần thứ hai, thứ ba và thứ tư gọi hàm gần đây nhất. Vì vậy,2M
cho12
,16
;3M
cho đi4
; và4M
cho5
,6
. - Các số vượt quá
4
chọn đầu vào riêng lẻ cho các cuộc gọi chức năng đã thực hiện nhiều hơn một đầu vào. Vì vậy,5M
trả về đầu vào cuối cùng cho cuộc gọi gần đây nhất . Trong trường hợp của chúng tôi điều này cho28
.6M
trả về đầu vào riêng lẻ trước đó , đó là11
.7M
trả về đầu vào cuối cùng của cuộc gọi cuối cùng thứ hai, nghĩa là16
, và8M
cho12
. Bây giờ,9M
cho6
. Lưu ý cách4
bỏ qua đầu vào vì đó là đầu vào duy nhất trong lệnh gọi hàm của nó. Cuối cùng,10M
cho5
.
Đối với trạng thái clipboard trong ví dụ 3:
[[3], [2, 40, 34], [7, 8, 15], []]
1M
cho3
.2M
cho2
,40
,34
.3M
cho7
,8
,15
.4M
có hành vi không xác định (cho mục đích của thử thách này), vì chỉ có ba lệnh gọi hàm.5M
cho34
.6M
cho40
.7M
cho2
.8M
cho15
.9M
cho8
,10M
cho7
.11M
,,12M
... cũng có hành vi không xác định .
Các thách thức
Đầu vào :
- trạng thái clipboard, như một danh sách các danh sách, hoặc bất kỳ định dạng hợp lý nào khác;
- một số nguyên dương n .
Đầu ra : kết quả của hàm gọi M
với n là đầu vào. Đầu ra sẽ là một hoặc một vài số có dấu phân cách rõ ràng hoặc ở bất kỳ định dạng hợp lý nào, chẳng hạn như danh sách hoặc mảng.
Làm rõ:
- Trạng thái clipboard bao gồm bốn danh sách các số. Một số danh sách theo dõi có thể trống, như trong ví dụ 2 và 3. Nếu được ưu tiên, bạn có thể nhập bảng tạm mà không có các danh sách trống đó. Vì vậy, ví dụ 3 sẽ trở thành
[[3], [2, 40, 34], [7, 8, 15]]
. - Tất cả các số trong bảng tạm sẽ là số nguyên dương, có thể có nhiều hơn một chữ số.
- Số n được đảm bảo là hợp lệ. Vì vậy, ví dụ 3 ở trên,
n
không thể4
hoặc11
.
Quy tắc bổ sung:
Đầu vào và đầu ra có thể được thực hiện bằng bất kỳ phương tiện hợp lý .
Các chương trình hoặc chức năng được cho phép, trong bất kỳ ngôn ngữ lập trình . Sơ hở tiêu chuẩn bị cấm .
Mã ngắn nhất trong byte thắng.
Các trường hợp thử nghiệm
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