Opis
Wyimaginowany język programowania (IPL) używa polskiej odwrotnej notacji. Ma następujące polecenia:
- i - wprowadź liczbę i pchnij ją na stos
- o - nieniszcząca moc wyjściowa na szczycie stosu (liczba pozostaje na stosie)
- d - odrzuć wierzch stosu
- liczba całkowita - pchnij ten numer na stos
- + - * - wyłóż dwie liczby ze stosu, wykonaj odpowiednią operację i odepchnij wynik. W IPL nie ma podziału.
IPL działa tylko z liczbami całkowitymi i służy do prostych obliczeń. Program IPL jest zapisany w jednym wierszu i oddzielony spacjami. Pusty ciąg jest prawidłowym programem IPL.
Program IPL:
i i + o
Wpisuje dwie liczby, dodaje je razem i wyświetla wynik.
Liczby wejściowe i liczby całkowite, które można wypychać na stos, znajdują się w zakresie [-999, 999], jednak dane wyjściowe mogą być dowolne. Jeśli twój język nie obsługuje dużych liczb, jest to w porządku.
Format wejścia / wyjścia
Możesz wybrać dowolny format wejściowy / wyjściowy, o ile zrozumiałe i odczytywane / zapisywane są: ciąg, lista, tokeny itp.
Zadanie
Otrzymujesz program IPL, musisz go zoptymalizować (zmniejszyć długość):
i 12 + 3 + o d 2 3 + d
Po optymalizacji stanie się
i 15 + o
Nie musisz zachowywać stanu stosu, ale ilość wejść i wyjść oraz ich kolejność powinny odpowiadać oryginalnemu i zoptymalizowanemu programowi.
Więc program IPL:
-40 i * 2 * o i + 3 1 + o i 2 *
Po optymalizacji stanie się
i -80 * o i 4 o i
lub
-80 i * o i 4 o i
(pamiętaj, że musisz zapisać wszystkie dane wejściowe, nawet jeśli są one nieistotne).
Nie powinno być żadnego twardego kodowania dla przypadków testowych, kod powinien działać na dowolnym dowolnym programie IPL i generować możliwie najkrótszy program IPL, który spełnia wymagania.
Punktacja
Domyślna punktacja golfa.
AKTUALIZACJA: zmieniono punktację na czystą ocenę golfa, zgodnie z sugestią @Sanchises.
Przypadki testowe:
Wkład:
(empty string)
Możliwe wyjście:
(empty string)
Wkład:
i 4 * 2 + 3 * 6 - o
Możliwe wyjście:
i 12 * o
Wkład:
1 1 + o
Możliwe wyjście:
2 o
Wkład:
i 2 + 3 + o d 2 3 + d
Możliwe wyjście:
i 5 + o
Wkład:
-40 i * 2 * o i + 3 1 + o i 2 *
Możliwe wyjście:
-80 i * o i 4 o i
Wkład:
i i 1 + i 1 + i 1 + i 1 + d d d d o
Możliwe wyjście:
i i i i i d d d d o
Wkład:
i i i 0 * * * o
Możliwe wyjście:
i i i 0 o
Wkład:
i i i 1 * * * o
Możliwe wyjście:
i i i * * o
Wkład:
i 222 + i 222 - + o
Możliwe wyjście:
i i + o
Wkład:
i 2 + 3 * 2 + 3 * 2 + 3 * i * d i 2 + 3 * i + d i o 2 + 2 - 0 * 1 o
Możliwe wyjście:
i i i i i o 1 o
Wkład:
i 1 + 2 * 1 + o
Możliwe wyjście:
i 2 * 3 + o
Wkład:
1 1 + o i 2 + 3 + o d 2 3 + d 4 i * 2 * o i + 3 1 + o i 2 * i i 1 + i 1 + i 1 + i 1 + d d d d o i i i 0 * * * o i i i 1 * * * o i 2 + i 2 - + o i 2 + 3 * 2 + 3 * 2 + 3 * i * d i 2 + 3 * i + d i o 2 + 2 - 0 * 1 o
Możliwe wyjście:
2 o i 5 + o 8 i * o i 4 o i i i i i i d d d d o i i i 0 o i i i * * * o i i + o i i i i i o 1 o
i i d o
doi o i
(wejście jest w porządku, a wyjście jest w porządku) albo nie należy go uprościć? (zestaw wejść i wyjść powinien być w porządku)