Zadanie
Grandiózny stroj
Počet bodov: 50
Dušan sa veľmi rád prechádza po zákutiach Matfyzu. Našiel tam už veľa zaujímavých vecí, ale asi najviac ho zaujal nejaký úplne divný a staro vyzerajúci stroj, ktorý bol v suteréne.
Stroj mal 2 pásky - jedna bola jeho pamäť a na druhú vedel vypisovať výstup. Na každom políčku v pracovnej páske si tento stroj vedel pamatať jedno 8-bitové číslo, teda niečo z rozsahu \(0 - 255\). Na pracovnej páske bola hlava, ktorá vedela čítať dáta z políčka pod ňou a taktiež modifikovať dáta na páske.
Ku stroju bol prichystaný aj manuál, v ktorom bol nasledovný zoznam inštrukcii, ktoré stroj podporuje:
Rx
- Hlava sa posunie o \(x\) políčok doprava, (Páska je smerom doprava nekonečná, takže táto inštrukcia nikdy nezasekne stroj.)Lx
- Hlava sa posunie o \(x\) políčok doľava - ak by sme sa chceli posunúť za ľavý okraj stroj sa zasekneIx
- Pamäťové miesto na pozícii hlavy sa zvýši o \(x\)Sx
- Pamäťové miesto na pozícii hlavy sa zníži o \(x\) - ak sa náhodou stane, že výsledok je záporný, tak akoby pretečie (\(2 - 3 = 255\))Mx
- Pamäťové miesto na pozícii hlavy sa prenásobí \(x\)Dx
- Pamäťové miesto na pozícii hlavy sa celočíselne vydelí \(x\) - ak delíme 0, stroj sa zasekneXx
- Vypočíta bitový XOR terajšieho miesta s hodnotou \(x\) a potom to uloží na túto pozíciuN
- Vypočíta sa bitovýNOT
sa aktuálnej pozícii.P
- Stroj vypíše na koniec výstupnej pásky obsah terajšieho miesta na páske - vypisovať vieme malé písmená, veľké písmená a medzeru.
Vypisovanie funguje nasledovne:
- medzera je 0
- malé písmená sú od 1 po 26 (
a
= 1,z
= 26) - veľké písmená idú po malých (
A
= 27,Z
= 52) - sak je číslo väčšie ako 52, zoberie sa jeho zvyšok po delení 53 a ten sa vypíše.
Úloha
Na vstupe dostanete program pre tento stroj. Vašou úlohou bude zistiť, čo tento program vypíše na výstupnú pásku.
Dávajte si pozor na to, že čísla v pamäti sú 8-bitové, teda hodnoty nám vedia pretiecť (napr. \(250+6 = 0 \neq 256\), \(250+7 = 1\), \(1 - 7 = 250\), …). Čísla v pamäti nemôžu byť záporné.
Vstup a Výstup
Vstup obsahuje 2 riadky na prvom je číslo \(n (1 \leq n \leq 10^6)\) - počet inštrukcii, ktoré stroj má vykonať. Na druhom riadku je samotný program pre stroj. Inštrukcie nie sú ničím oddelené. Všetky parametre \(x\) do inštrukcii sú z intervalu \((0, 25)\) a sú špecifikované malými písmenami anglickej abecedy (\(a = 0\), … , \(z = 25\)).
Na výstup vypíšte celý obsah výstupnej pásky stroja. Ak sa stroj niekedy počas vykonávania nejakej inštrukcie zasekol, vypíšte crash
- To, čo sa výpísalo na výstupnú pásku dovtedy, treba vypísať taktiež. Nezabudnite, že výstup by sa mal končiť znakom nového riadku.
Príklad
Input:
30
IiRbIiMdIdPLbPRcIpPLcIcPRdPLbIePLbSfPRcIfPRbIfLcIbP
Output:
Ahoj svet
Input:
5
IdMiPLbP
Output:
xcrash
Snažili sme sa posunúť hlavu až moc doľava, stroj sa teda zasekol
Pre odovzdávanie sa musíš prihlásiť.