Цей виклик пов'язаний з деякими особливостями мови 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