kalk
Mirko ima simbolički kalkulator koji ima memoriju u obliku liste čiji su elementi aritmetički izrazi i koja može sadržavati najviše 100 izraza . Naredbe koje kalkulator razumije su sljedeće:
HASH – ako se na prvom mjestu liste nalazi izraz s, a na drugom izraz t, onda ova naredba briše ta dva elementa iz liste i na prvo mjesto liste dodaje izraz (t#s)
DOLLAR – ako se na prvom mjestu liste nalazi izraz s, a na drugom izraz t, onda ova naredba briše ta dva elementa iz liste i na prvo mjesto liste dodaje izraz (t$s)
SWAP – međusobno zamjenjuje prvi i drugi izraz u listi
DROP – briše prvi izraz iz liste
DUP – udvostručuje prvi izraz liste, tj. njegovu kopiju dodaje na prvo mjesto
ROT – rotira prva četiri izraza u listi tako da prvi izraz postaje drugi, drugi izraz postaje treći, treći izraz postaje četvrti, a četvrti izraz postaje prvi
Potrebno je napisati program koji će generirati niz naredbi za kalkulator takav da ako se na početku izvođenja u listi nalaze samo A i B (A na drugom mjestu, B na prvom mjestu), sve naredbe se izvedu bez greške te se na kraju izvođenja kao jedini element u listi nalazi zadani izraz.
Do greške prilikom izvođenja naredbe može doći ako se lista prepuni ili ako u listi nema dovoljno argumenata za naredbu. Za naredbe DUP i DROP potreban je barem jedan element u listi, za naredbe HASH, DOLLAR i SWAP barem dva, dok je za naredbu ROT potrebno barem četiri elementa.
Vaš program treba generirati bilo koji niz naredbi koji računa zadani izraz; ipak broj naredbi treba biti manji ili jednak od 10,000.
U prvom i jedinom retku standardnog ulaza nalazi se zadani izraz. Izraz se sastoji od znakova A, B, #, $, ( i ) i u njemu se neće pojavljivati nikakvi drugi znakovi (pa ni razmaci).
Broj znakova u izrazu će biti manji ili jednak od 100.
Zadani izraz će uvijek biti takav da se na kalkulatoru može dobiti od A i B.
Potrebno je na standardni izlaz ispisati niz naredbi kojima se dobiva zadani izraz, svaku u svoj red.
Napomena: rješenje ne mora biti jedinstveno.
Ulaz:
(B$A)Izlaz:
SWAP
DOLLAR(A$(A#B))Izlaz:
SWAP
DUP
DUP
ROT
HASH
DOLLAR
SWAP
DROP((A$B)#(B$A))Izlaz:
SWAP
DUP
DUP
ROT
ROT
DROP
DUP
DUP
ROT
ROT
DROP
SWAP
ROT
ROT
DOLLAR
DUP
ROT
ROT
ROT
DROP
SWAP
DOLLAR
HASHSubmit solution
Coming laterThe grading service will be connected in a later migration step. You can inspect the task and your previous results now.