Wyzwanie to jest związane z niektórymi funkcjami języka MATL w ramach wydarzenia Język miesiąca miesiąca 2018 . Powiązane wyzwanie: Schowek funkcji: kopia .
Wprowadzenie
Schowek funkcji MATL przechowuje („kopiuje”) dane wejściowe czterech ostatnich wywołań normalnych funkcji pobierających dane. Funkcje normalne są najczęstszym typem funkcji w MATL. Pobieranie danych oznacza, że funkcja pobiera co najmniej jedno wejście. Zapisaną zawartość schowka można wepchnąć na stos („wkleić”).
To wyzwanie weźmie zawartość schowka jako dane wejściowe. Zakłada się, że wszystkie funkcje, które wytworzyły ten stan schowka, przyjęły jedną lub więcej dodatnich liczb całkowitych jako dane wejściowe. Tak więc stan schowka może być reprezentowany przez listę list liczb. (Aby uzyskać więcej informacji na temat faktycznego wypełnienia schowka, zobacz powiązane wyzwanie; ale nie jest to konieczne w przypadku bieżącego).
Interpretacja zawartości schowka
Przykład 1
Pierwsza lista wewnętrzna odnosi się do najnowszego wywołania funkcji, i tak dalej, w ten sposób stan schowka
[[11, 28], [12, 16], [4], [5, 6]]
wskazuje, że ostatnie wywołanie funkcji trwało dwa wejścia, a mianowicie 11, 28; przedostatni wezwanie wziął wejść 12, 16; itp. (Ten stan schowka jest generowany przez kod w pierwszym przykładzie pokrewnego wyzwania).
Przykład 2
Jeśli nie ma wystarczającej liczby wywołań funkcji , niektóre końcowe listy wewnętrzne w schowku będą puste:
[[7, 5], [], [], []]
(Jest to wytwarzane przez program, który po prostu dodaje 7i 5).
Przykład 3
Wywołania funkcji mogą mieć dowolną liczbę wejść , ale zawsze przynajmniej 1(funkcje nie przyjmujące danych wejściowych nie zmieniają stanu schowka). Możliwe są również następujące kwestie.
[[3], [2, 40, 34], [7, 8, 15], []]
Dostęp do zawartości schowka
Zawartość schowka funkcji jest wypychana na stos za pomocą funkcji MATL M(która, nawiasem mówiąc, nie jest normalną funkcją, ale funkcją schowka). Ta funkcja przyjmuje na wejściu dodatnią liczbę całkowitą i wypycha część zawartości schowka na stos, w następujący sposób. W odniesieniu do stanu schowka w przykładzie 1:
[[11, 28], [12, 16], [4], [5, 6]]
1Mzwraca wszystkie dane wejściowe do ostatniego wywołania funkcji. Tak więc, na rozpatrywanym przykładzie, to daje11,28.- Podobnie
2M,3Mi4Mzwrócić wszystkie wejścia do drugiej, trzeciej i czwartej najnowsze wywołania funkcji. Więc2Mdaje12,16;3Mdaje4; i4Mdaje5,6. - Liczby poza
4wybranymi pojedynczymi wejściami do wywołań funkcji, które wymagały więcej niż jednego wejścia.5MZwraca więc ostatnie dane wejściowe do ostatniego takiego wywołania. W naszym przypadku daje to28.6Mzwraca poprzednie indywidualne wejście, którym jest11.7Mzwraca ostatnie wejście drugiego przedostatniego wywołania, czyli16, i8Mdaje12. Teraz9Mdaje6. Zwróć uwagę, w jaki sposób dane wejściowe4są pomijane, ponieważ były to jedyne dane wejściowe w wywołaniu funkcji. Wreszcie10Mdaje5.
Dla stanu schowka w przykładzie 3:
[[3], [2, 40, 34], [7, 8, 15], []]
1Mdaje3.2Mdaje2,40,34.3Mdaje7,8,15.4Mma niezdefiniowane zachowanie (na potrzeby tego wyzwania), ponieważ były tylko trzy wywołania funkcji.5Mdaje34.6Mdaje40.7Mdaje2.8Mdaje15.9Mdaje8,10Mdaje7.11M,12M... także niezdefiniowane zachowanie .
Wyzwanie
Wejście :
- stan schowka, jako listę list lub w dowolnym innym rozsądnym formacie;
- dodatnia liczba całkowita n .
Wyjście : wynik wywołania funkcji Mz n jako wejściem. Dane wyjściowe będą jedną lub kilkoma liczbami z jednoznacznym separatorem lub w dowolnym rozsądnym formacie, takim jak lista lub tablica.
Wyjaśnienia:
- Stan schowka składa się z czterech list liczb. Niektóre końcowe listy mogą być puste, jak w przykładach 2 i 3. W razie potrzeby można wprowadzić schowek bez tych końcowych pustych list. Tak stałby się przykład 3
[[3], [2, 40, 34], [7, 8, 15]]. - Wszystkie liczby w schowku będą dodatnimi liczbami całkowitymi, prawdopodobnie z więcej niż jedną cyfrą.
- Gwarantowana jest liczba n . Na przykład 3 powyżej
nnie może być4lub11.
Dodatkowe zasady:
Dane wejściowe i wyjściowe można przyjmować dowolnymi rozsądnymi środkami .
Programy lub funkcje są dozwolone w dowolnym języku programowania . Standardowe luki są zabronione .
Najkrótszy kod w bajtach wygrywa.
Przypadki testowe
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