Problem hidden
|This problem was hidden by Editorial Board member probably because it has incorrect language|version or invalid test data, or description of the problem is not clear.|

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łowego50000B
Limit pamięci:1536MB
Cluster: Cube (Intel G860)
Języki programowania:All except: ASM64 JS-MONKEY SCM qobi
Pochodzenie:III Mistrzostwa WWSI w Programowaniu

© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.