Эта проблема связана с некоторыми возможностями языка 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