|
Brainf.ck
Minden programozó hallott már a "klasszikus" programozási nyelvekről (C, C++, C#, Java, Python,...), ám kevesebben tudják, hogy léteznek ún. "ezoterikus" nyelvek is. Ezek egy része csupán a készítő szórakoztatása végett jött létre, néhány pedig "erőfitogtatás-céljából". Ezen nyelvek közé sorolható a híres-hirhedt brainf.ck programozási nyelv is. A mi feladatunk egy fordítót/interpretert írni, mely képes az ezen a nyelven megírt programkódokat futtatni. A nyelv szabályai:
- Az egész kód egy ún. körkörös szalagon fut, melynek az egyes cellái 1-1 byte-nyi adatot tudnak tartalmazni (0-255-ig egy szám). Ezen szalagon van az ún. "olvasófejünk" mely mindig pontosan egyetlen cella fölött található. A körkörösség lényege, hogy amint elérünk az utolsó celláig az elejére ugrunk. Hasonlóképp a legelső cella előtt az utolsó van. Az összes cella értéke alapállapotban 0 és az olvasófej az elején a 0. cella fölött található.
- A cellák indexelése 0-val kezdődik és egyesével nő.
- A programkód az alábbi karaktereket tartalmazhatja:
- < és > jelek, melyek az "olvasófejet" mozgatják a szalagon egy lépéssel balra-jobbra
- + és - jelek, melyek az éppen vizsgált cella értékét növelik/csökkentik 1-el "körkörösen" (tehát 0 előtt a 255 van és 255 után a 0)
- . ami az adott cella értékét írja ki a képernyőre
- ,szám (pl. ,013, vagy ,240 - a , karakter után egyből a szám következik, az egyszerűbb beolvasás miatt mindig 3 karakter szélességűre kiegészítve: 001, 010, 100, stb.) mely az adott cella értékét írja felül a megadott számmal (az "igazi nyelvben" valójában csak a , karakter szerepel, melynél a program megáll és felhasználói inputra vár. A mi esetünkben azonban erre nincs lehetőség, így "improvizáltuk" ezt a megoldást). A megadott szám 0 és 255 közé esik (beleértve a két végpontot is).
- [ karakter: ha az éppen vizsgált cellánk értéke 0, akkor megkeresi az ezt lezáró ] jelet a kódban és onnan folytatja a kód kiértékelését. Ha a cella értéke nem 0, akkor egyszerűen folytatjuk a kód kiértékelését. Az olvasófej ettől még ugyanennél a cellánál marad.
- ] karakter: ha az éppen vizsgált cella értéke nem 0 akkor visszaugrik a "nyitó" [ karakterre a kódban. Ha 0, akkor egyszerűen folytatjuk a kód kiértékelését. Az olvasófejet ebben az esetben sem mozgatja.
Input
A bemenet egyetlen sorból áll, mely egy t stringet tartalmaz és a programkódot írja le. A kódban csak a fenti szabályzatban leírt karakterek/karakterkombinációk szerepelhetnek.
Output
A kimenet a kód futtatásának eredménye. A kiírandó számokat egyetlen szóközzel elválasztva jelenítsük meg. Mindegyik szám a 0,...,255 számok valamelyike. Az egyes számokat nem kell három karakter szélességűre kiegészíteni.
Megkötések
- a szalag hossza 100
- a programkódban nem szerepel végtelen ciklus
- a programkód hossza legfeljebb 500 karakter
Példa
|
|