Цей виклик пов'язаний з деякими особливостями мови 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
.
Додаткові правила:
Введення та вихід можна приймати будь-якими розумними засобами .
Програми або функції дозволені на будь- якій мові програмування . Стандартні лазівки заборонені .
Найкоротший код у байтах виграє.
Тестові кейси
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