Fişierul intrare/ieşire:robot1.in, robot1.outSursăOJI 2017 clasa a 5-a
AutorJakab Irma-TundeAdăugată defrancuCristian Francu francu
Timp execuţie pe test0.2 secLimită de memorie2048 kbytes
Scorul tăuN/ADificultatenormalnormalnormalnormalnormal

Vezi solutiile trimise

Robot1 (clasa a 5-a)

Nota 1: problema este punctată uşor diferit faţă de original din cauza restricţiilor impuse de evaluatorul infoarena.

Nota 2: enunţul problemei este modificat pentru a reflecta mai bine cerinţele problemei.

Paul doreşte să înveţe cum să programeze un robot. Pentru început s-a gândit să construiască un robot format dintr-un mâner, 10 butoane aranjate circular şi un ecran. Pe butoane sunt scrise, în ordine crescătoare, cifrele de la 0 la 9, ca în figură.

Un roboprogram va fi format dintr-o secvenţă de instrucţiuni. Instrucţiunile pot fi:

InstrucţiuneSemnificaţie
Dp
Mânerul robotului se deplasează spre dreapta cu p poziţii (p este o cifră)
Sp
Mânerul robotului se deplasează spre stânga cu p poziţii (p este o cifră)
A
Este apăsat butonul în dreptul căruia se află mânerul robotului şi pe ecran apare cifra scrisă pe buton
T
Terminarea programului (se utilizează o singură dată la final şi este precedată de cel puţin o instrucţiune A)

Iniţial mânerul robotului este plasat în dreptul butonului 0, iar ecranul este gol. De exemplu, în urma executării roboprogramului D4AS1AAD6AT robotul apasă butoanele pe care sunt scrise cifrele 4, 3, 3, 9, iar pe ecran va apărea 4339.

Cerinţe

Să se scrie un program care rezolvă următoarele cerinţe:

  1. citeşte un roboprogram şi determină numărul de cifre afişate pe ecran după executarea roboprogramului;
  2. citeşte un roboprogram şi determină cifrele afişate pe ecran după executarea roboprogramului;
  3. citeşte un număr natural N şi construieşte un roboprogram de lungime deplasare minimă prin executarea căruia pe ecran se va obţine numărul N; deoarece robotului îi place să se deplaseze în special spre dreapta, dacă există mai multe roboprograme de lungime deplasare minimă, se va afişa roboprogramul cu număr maxim de instrucţiuni D.

Date de intrare

Fişierul de intrare robot1.in conţine pe prima linie un număr natural C, reprezentând cerinţa care urmează să fie rezolvată (1, 2 sau 3). Dacă C=1 sau C=2, pe a doua linie a fişierului se află un roboprogram. Dacă C=3, pe a doua linie a fişierului de intrare se află numărul natural N.

Date de ieşire

Fişierul de ieşire robot1.out va conţine o singură linie. Dacă C=1, pe prima linie se va scrie un număr natural reprezentând numărul de cifre afişate pe ecran după executarea roboprogramului din fişierul de intrare.
Dacă C=2, pe prima linie vor fi scrise cifrele afişate pe ecran în urma executării roboprogramului din fişierul de intrare. Dacă C=3, pe prima linie va fi scris roboprogramul solicitat de cerinţa 3.

Restricţii

  • 0 ≤ N ≤ 1000000000
  • Lungimea roboprogramului citit din fişierul de intrare sau scris în fişierul de ieşire este cel mult 1000 de caractere.
  • Dacă mânerul este plasat în dreptul butonului 0 şi se deplasează spre dreapta, se va îndrepta către butonul 1; dacă deplasarea este spre stânga, se va îndrepta către butonul 9.
  • Pentru rezolvarea corectă a primei cerinţe se acordă 10 15 puncte, pentru rezolvarea corectă a celei de a doua cerinţe se acordă 30 35 de puncte, iar pentru rezolvarea corectă a celei de a treia cerinţe se acordă 50 de puncte. 10 puncte se acordă din oficiu.

Exemplu

robot1.inrobot1.outExplicaţii
1
D1AD2AS1AT
3
C=1, pentru acest test se rezolvă cerinţa 1.
Se afişează pe ecran 3 cifre (132)
2
S0AD2AS1AT
021
C=2, pentru acest test se rezolvă cerinţa 2.
Mânerul robotului se deplasează cu 0 unităţi la stânga, deci rămâne în dreptul
butonului 0 şi apasă, apoi se deplasează 2 unităţi spre dreapta şi ajunge în dreptul
butonului 2, apasă, apoi se deplasează 1 unitate la stânga şi ajunge în dreptul
butonului 1 şi apasă acest buton 021.
3
19332
D1AS2AD4AAS1AT
C=3, pentru acest test se rezolvă cerinţa 3. Pentru a afişa cifra 1, mânerul
robotului se deplasează 1 unitate la dreapta după care apasă (D1A). Pentru a afişa
cifra 9, din poziţia curentă mânerul robotului se deplasează 2 unităţi la stânga
şi apasă (S2A). Pentru a afişa cifra 3, din poziţia curentă mânerul robotului
se deplasează 4 unităţi la dreapta după care apasă (D4A). Pentru a afişa a doua
cifra 3, mânerul robotului rămâne în poziţia curentă şi apasă butonul. Pentru a
afişa cifra 2, din poziţia curentă mânerul robotului se deplasează 1 unitate
la stânga după care apasă (S1A). Programul se termină cu instrucţiunea
T ⇒ D1AS2AD4AAS1AT
Trebuie sa te autentifici pentru a trimite solutii. Click aici