StickStack to bardzo prosty język programowania oparty na stosie, zawierający tylko dwie instrukcje:
|
wypycha długość stosu na stos-
wysuwa dwa górne elementy ze stosu i odsuwa ich różnicę (second topmost - topmost
)
Szczegóły języka
- Stos jest pusty na początku programu.
- Wszystkie instrukcje są wykonywane sekwencyjnie od lewej do prawej.
- Jeśli na stosie jest mniej niż 2 liczby,
-
instrukcja jest nielegalna. - Pod koniec wykonywania stos powinien zawierać dokładnie jedną liczbę .
Każda liczba całkowita może być generowana przez program StickStack. Na przykład:
|||--||-- generates the number 2 through the following stack states:
[]
[0]
[0, 1]
[0, 1, 2]
[0, -1]
[1]
[1, 1]
[1, 1, 2]
[1, -1]
[2]
Aby ocenić kod StickStack, możesz skorzystać z tego narzędzia do oceny online (CJam) . (Dzięki za @Martin za kod.)
Zadanie
Powinieneś napisać program lub funkcję, która jako liczbę wyjściową podaje liczbę całkowitą lub zwraca ciąg znaków reprezentujący program StickStack, który wypisuje podaną liczbę.
Punktacja
- Twój wynik główny to całkowita długość programów StickStack dla poniższych przypadków testowych. Niższy wynik jest lepszy.
- Twoje zgłoszenie jest ważne tylko wtedy, gdy uruchomiłeś program na wszystkich testowych przypadkach i policzyłeś swój wynik.
- Drugi wynik (remis rozstrzygający) to długość programu lub funkcji generującej.
Wprowadź przypadki testowe
(Każda liczba to inny przypadek testowy).
-8607 -6615 -6439 -4596 -4195 -1285 -72 12 254 1331 3366 3956 5075 5518 5971 7184 7639 8630 9201 9730
Twój program powinien działać na wszystkich liczbach całkowitych (które może obsłużyć Twój typ danych), a nie tylko na danych przypadkach testowych. Rozwiązania dla numerów testowych nie powinny być zakodowane na stałe w twoim programie. Jeśli pojawią się wątpliwości co do twardego kodowania, numery testowe zostaną zmienione.