• Language:
  • Time limit: 1.00 s
  • Memory limit: 512 MB

Tarkastellaan ohjelmointikieltä, jossa on muuttujat A, B, ..., Z. Jokainen muuttuja sisältää kokonaisluvun. Ohjelman suorituksen alussa jokaisen muuttujan arvo on nolla.

Ohjelmointikielessä on seuraavat komennot (X tarkoittaa mitä tahansa muuttujaa):

  • CLEAR X (tyhjennys): asettaa muuttujan X arvoksi nollan
  • INCREASE X (lisäys): kasvattaa muuttujan X arvoa yhdellä
  • PRINT X (tulostus): tulostaa muuttujan X arvon
  • REPEAT X TIMES ( ... ) (silmukka): suorittaa suluissa olevan koodin muuttujan X arvon verran kertoja

Jos komennossa REPEAT silmukassa suoritettava koodi muuttaa muuttujaa, joka on määrittänyt silmukan toistokerrat, tämä muutos ei vaikuta meneillään olevaan silmukkaan.

Komennossa REPEAT silmukassa suoritettava koodi suluissa ei voi olla tyhjä.

Komentojen ja niiden osien välissä tulee olla tyhjää tilaa, eli yksi tai useampi välilyönti tai rivinvaihto. Huomaa, että komennossa REPEAT myös sulkumerkkien ( ja ) ympärillä tulee olla tyhjää tilaa.

Rivillä oleva merkki # tarkoittaa kommenttia. Merkki # ja kaikki sen jälkeiset merkit poistetaan riviltä ennen koodin käsittelyä.

Tehtäväsi on toteuttaa yllä kuvatulle ohjelmointikielelle tulkki eli ohjelma, joka suorittaa ohjelmointikielellä kirjoitetun koodin.

Syöte

Syötteenä on suoritettava koodi.

Tuloste

Tulosta jokaisen PRINT-komennon tulostus.

Voit olettaa, että ohjelmassa on enintään 1000 komentoa ja ohjelman suorituksen aikana suoritetaan enintään 10^6 komentoa.

Sinun ei tarvitse varautua siihen, että suoritettavassa koodissa on virheitä.

Esimerkki 1

Syöte:

PRINT X
INCREASE X
PRINT X
INCREASE X
PRINT X
CLEAR X
PRINT X

Tuloste:

0 1 2 0

Esimerkki 2

Syöte:

INCREASE A
INCREASE A
INCREASE A
INCREASE A
INCREASE A

REPEAT A TIMES (
    INCREASE A
    PRINT A
)

Tuloste:

6 7 8 9 10

Esimerkki 3

Syöte:

# Create number 3
INCREASE A INCREASE A INCREASE A

# Create number 4
INCREASE B INCREASE B INCREASE B INCREASE B

# Calculate 3 * 4
REPEAT A TIMES ( REPEAT B TIMES ( INCREASE C ) )

# Print result
PRINT C

Tuloste:

12

Osatehtävä 1 (12 pistettä)

  • Ohjelmassa on vain komentoja CLEAR, INCREASE ja PRINT

Osatehtävä 2 (32 pistettä)

  • Komennon REPEAT sisällä ei voi olla toista komentoa REPEAT

Osatehtävä 3 (56 pistettä)

  • Ei rajoituksia