To wyzwanie 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: wklej .
Wprowadzenie
Mátl ma kilka schowków , w których można przechowywać wartości (kopia) do późniejszego pobrania (wklej). Niektóre schowki są automatyczne , co oznacza, że kopiowanie jest uruchamiane automatycznie przez określone zdarzenia. To wyzwanie koncentruje się na jednym z automatycznych schowka, zwanym schowkiem wprowadzania funkcji lub po prostu schowkiem funkcji .
Ten schowek przechowuje dane wejściowe czterech ostatnich wywołań normalnych funkcji pobierania danych. Funkcje normalne są najczęstszym typem funkcji w MATL. Pobieranie danych oznacza, że funkcja pobiera co najmniej jedno wejście (funkcje, które nie przyjmują żadnych danych wejściowych, nie są uwzględniane przez schowek funkcji).
Można to najlepiej wyjaśnić za pomocą następujących przykładów, które wykorzystują dwie normalne funkcje:
+, który wyrzuca dwie liczby ze stosu i wypycha ich sumę.U, która wyskakuje o jedną liczbę i przesuwa jej kwadrat.
Przykład 1 :
3 2 + 6 + 12 4 U + +
daje wynik 39. Kod jest interpretowany w następujący sposób:
- Literały liczbowe, takie jak
3lub12wypychane na stos - Funkcje takie jak
+wyskakiwanie danych wejściowych i wypychanie danych wyjściowych na stos.
Wywołania funkcji w porządku chronologicznym to:
3 2 +daje55 6 +daje114 Udaje1612 16 +2811 28 +daje39.
Schowek można wyświetlić jako listę czterech list. Każda wewnętrzna lista zawiera dane wejściowe do wywołania funkcji, najpierw najnowsze . W obrębie każdej wewnętrznej listy dane wejściowe są w oryginalnej kolejności .
Więc po uruchomieniu kodu zawartość schowka jest (w notacji Python):
[[11, 28], [12, 16], [4], [5, 6]]
Przykład 2 :
10 20 U 30 +
pozostawia liczby 10i 430na stosie. Stos jest wyświetlany od dołu do góry na końcu programu.
Wywołania funkcji to
20 Udaje400400 30 +daje430
Ponieważ były tylko dwa wywołania funkcji, niektóre wewnętrzne listy definiujące schowek będą puste . Zwróć też uwagę, w jaki sposób 10nie jest wykorzystywany jako dane wejściowe do żadnej funkcji.
Zatem zawartość schowka po uruchomieniu kodu to:
[[400, 30], [20], [], []]
Przykład 3 (nieprawidłowy):
10 20 + +
jest uważany za niepoprawny, ponieważ +brakuje danych wejściowych do drugiego (w MATL-u domyślnie wyzwalałoby to dane wejściowe użytkownika).
Wyzwanie
Dane wejściowe : ciąg S z literałami liczb +i Uoddzielony spacjami.
Wyjście : zawartość schowka Funkcja po ocenie ciąg S .
Wyjaśnienia:
- Możesz użyć dowolnych dwóch spójnych symboli do przedstawienia tych funkcji, innych niż cyfry. Możesz także użyć dowolnego spójnego symbolu jako separatora zamiast spacji.
- Uwzględnione zostaną tylko dwie wskazane funkcje.
- Łańcuch wejściowy będzie zawierał co najmniej jeden literał liczbowy i co najmniej jedną funkcję.
- Wszystkie liczby będą dodatnimi liczbami całkowitymi, prawdopodobnie z więcej niż jedną cyfrą.
- Możliwe jest, że niektóre literały liczbowe nie są używane przez żadną funkcję, jak w przykładzie 2.
- Gwarantujemy, że wprowadzony kod jest prawidłowym kodem, bez dodatkowych liczb. Tak więc ciąg jak w przykładzie 3 nigdy nie wystąpi.
- Końcowe puste wewnętrzne listy w danych wyjściowych można pominąć. Tak więc wynik w przykładzie 2 może być
[[400, 30], [20]] - Każdy rozsądny, jednoznaczny format wyjściowy jest dopuszczalny. Na przykład, ciąg z przecinkiem, jak wewnętrzna rozdzielacza i średnikiem jako zewnętrzną separatora:
400,30;20;;.
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
Input
Output
3 2 + 6 + 12 4 U + +
[[11, 28], [12, 16], [4], [5, 6]]
15 3 4 + 2 U 8 + U +
[[7, 144], [12], [4, 8], [2]]
3 6 9 12 + + 10 8 U 6
[[8], [6, 21], [9, 12], []]
8 41 12 25 4 5 33 7 9 10 + + + + + + + +
[[41, 105], [12, 93], [25, 68], [4, 64]]
10 1 1 + U U U U U
[[65536], [256], [16], [4]]
M?
M. Zrobię to w wyzwaniu „wklej”
[[28, 11], [16, 12], [4], [6, 5]]dane wyjściowe są prawidłowe dla pierwszego przykładu?