Programozó versenyek

Informatikai versenyfeladatok, gyakorló feladatsor, 2012. február 20.

2012. március 1. 0:00 – 2012. április 1. 0:00

Az interpreter

Egy bizonyos számítógép 10 regiszterrel és 1000 szóból álló RAM memóriával rendelkezik. Mindegyik regiszter és RAM-tárhely egy háromjegyű egész szám tárolására képes 0 és 999 között. Az utasításokat háromjegyű egészekkel kódoljuk, és a RAM-ban tároljuk. A kódok a következők:

  • 100, jelentése: állj;
  • 2dn, jelentése: a d regiszter értéke legyen n (0 és 9 között);
  • 3dn, jelentése: add hozzá n értékét a d regiszter értékéhez;
  • 4dn, jelentése: szorozd meg n-nel a d regiszter értékét;
  • 5ds, jelentése: a d regiszter értékét állítsd be az s regiszter értékére;
  • 6ds, jelentése: add hozzá az s regiszter értékét a d regiszter értékéhez;
  • 7ds, jelentése: szorozd meg az s regiszter értékével a d regiszter értékét;
  • 8da, jelentése: a d regiszter értékét állítsd be az a regiszterben tárolt címen lévő RAM-tárhely értékére;
  • 9sa, jelentése: az a regiszterben tárolt címen lévő RAM-tárhely értékét állítsd be az s regiszter értékére;
  • 0ds, jelentése: ugorj a d regiszterben tárolt tárhelyre, ha az s regiszter értéke nem 0.

Kezdetben minden regiszter értéke 000. A RAM kezdeti értékét a bemenetről kell beolvasni. Az elsőként végrehajtandó utasítás a 0 tárcímen helyezkedik el. Minden eredményt csonkítani kell modulo 1000-rel.

A bemenet specifikációja

A bemenet egy olyan sorral kezdődik, amely egyetlen pozitív egész számból, a tesztesetek számából áll. Ezt a sort egy üres sor követi, mint ahogy egy-egy üres sor van két egymást követő teszteset között is.

Minden teszteset legfeljebb 1000 háromjegyű, előjel nélküli egész számból áll, amelyek a RAM egymást követő tárhelyeinek a tartalmát adják meg a 0 tárcímtől kezdődően. A meg nem adott tárhelyek 000 kezdőértékkel rendelkeznek.

A kimenet specifikációja

Az egyes tesztesetekhez tartozó kimeneteknek az alábbi leírást kell követniük. Két egymást követő teszteset kimenetét egy-egy üres sorral kell elválasztani.

Minden teszteset kimenete egyetlen egész szám: az „állj” utasításig végrehajtott utasítások száma, beleértve az „állj” utasítást is. Feltételezheted, hogy a program megáll.

Példa bemenet

  1. 1
  2. 299
  3. 492
  4. 495
  5. 399
  6. 492
  7. 495
  8. 399
  9. 283
  10. 279
  11. 689
  12. 078
  13. 100
  14. 000
  15. 000
  16. 000
letöltés szöveges állományként

A példa bemenethez tartozó kimenet

  1. 16
letöltés szöveges állományként
Debreceni Egyetem, Informatikai Kar, v. 2019.03.01.