Zgłaszanie | Wszystkie zgłoszenia | Najlepsze | Lista |
MWP3_1D1 - Brainfuck |
Twoim zadaniem jest napisanie interpretera języka Brainfuck++, który to jest lekko zmodyfikowaną wersją języka Brainfuck. Język Brainfuck++ operuje na tablicy 100 7-bitowych komórek, mogących przechowywać wartości całkowite z przedziału od 0 do 127. Początkowa wartość wszystkich komórek to 0. Oprócz tego dostępna jest również tablica 10 zmiennych. Nazwy zmiennych to kolejne cyfry w systemie dziesiętnym: 0, 1, ..., 9. Podobnie jak komórki w tablicy głównej, zmienne mogą przechowywać wartości od 0 do 127. Początkowo wszystkie zmienne nie posiadają przypisanych wartości. Język Brainfuck++ udostępnia następujące instrukcje:
Instrukcja | Opis |
---|---|
(z=w) | Przypisanie zmiennej z wartości w, gdzie z to poprawna nazwa zmiennej czyli cyfra dziesiętna zaś w to wartość z przedziału domkniętego od 0 do 127 mogąca zawierać wiodące zera. W przypadku gdy którykolwiek z elementów instrukcji został pominięty lub wartości z lub w są niepoprawne lub instrukcja (z=w) zawiera zagnieżdżone instrukcje, powinna ona zakończyć się błędem wykonania. |
< | Przejście do poprzedniej komórki. Jeżeli znajdujemy się w pierwszej komórce, dana instrukcja powinna zakończyć się błędem wykonania. |
> | Przejście do następnej komórki. Jeżeli znajdujemy się w ostatniej komórce, dana instrukcja powinna zakończyć się błędem wykonania. |
- | Zmniejszenie wartości bieżącej komórki o 1. Jeżeli bieżąca komórka zawiera wartość 0, dana instrukcja powinna zakończyć się błędem wykonania. |
+ | Zwiększenie wartości bieżącej komórki o 1. Jeżeli bieżąca komórka zawiera wartość 127, dana instrukcja powinna zakończyć się błędem wykonania. |
. | Wypisanie wartości z bieżącej komórki. Jeżeli wartość w bieżącej komórce zawiera się w przedziale domkniętym od 32 do 126 to należy wypisać znak o kodzie ASCII równym tej wartości. W przeciwnym wypadku należy wypisać "[ASCII: w]" gdzie w to wartość z bieżącej komórki. |
z | Zapisanie w bieżącej komórce wartości zmiennej z, gdzie z to poprawna nazwa zmiennej czyli cyfra dziesiętna. W przypadku gdy zmienna z nie miała przypisanej wartości, dana instrukcja powinna zakończyć się błędem wykonania. |
Wszystkie pozostałe znaki z białymi włącznie powinny być całkowicie ignorowane. W przypadku wystąpienia błędu wykonania należy wypisać komunikat "[ERROR]" i zakończyć dalsze interpretowanie kodu.
Wejście
W pierwszej linii wejścia znajduje się jedna liczba naturalna Z (1 ≤ Z ≤ 10) określająca ilość zestawów danych. W kolejnych liniach znajdują się zestawy danych.
Każdy zestaw danych to kod programu w języku Brainfuck++. Kod może zawierać się w wielu liniach. Jest on zakończony znakiem ";", który to nie powinien być interpretowany. Długość kodu nigdy nie przekroczy 1000 znaków.
Wyjście
Dla każdego zestawu danych należy w osobnej linii wypisać wynik działania interpretowanego programu.
Przykład
Wejście:
3 definicje zmiennych literka A (0 = 65) (1 = Z 90) i (2 = 044 to bedzie ,) 0.+.+.>2...<1--.+.+.; (0=65)0.<-; (300=1)300. ;
Wyjście:
ABC,,,XYZ A[ERROR] [ERROR]
Dodane przez: | Maciej Boniecki |
Data dodania: | 2010-12-02 |
Limit czasu wykonania programu: | 0.5s-1s |
Limit długości kodu źródłowego | 50000B |
Limit pamięci: | 1536MB |
Cluster: | Cube (Intel G860) |
Języki programowania: | All except: ASM64 JS-MONKEY SCM qobi |
Pochodzenie: | III Mistrzostwa WWSI w Programowaniu |