== include(page="template/taskheader" task_id="robot1") ==
!>problema/robot1?robot1.jpg!
_Nota 1: problema este punctată ușor diferit față de original din cauza restricțiilor impuse de evaluatorul NerdArena._
_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:
table(program).
table(program).
|_. Instrucțiune |_. Semnificație |
| Dp
| Mânerul robotului se deplasează spre dreapta cu p poziții (p este o cifră)
h2. Cerințe
Să se scrie un program care rezolvă următoarele cerințe:
# citește un roboprogram și determină numărul de cifre afișate pe ecran după executarea roboprogramului;
# citește un roboprogram și determină cifrele afișate pe ecran după executarea roboprogramului;
# citește un număr natural *N* și construiește un roboprogram de lungime 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 minimă, se va afișa roboprogramul cu număr maxim de instrucțiuni *D*.
# 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$].
h2. Date de intrare
Fișierul de intrare $robot1.in$ ...
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*.
h2. Date de ieșire
În fișierul de ieșire $robot1.out$ ...
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.
h2. 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.-
h2. Exemplu
table(example).
|_. robot1.in |_. robot1.out |
| This is some
text written on
multiple lines.
| This is another
text written on
multiple lines.
|
h3. Explicație
...
table(example).
|_. robot1.in |_. robot1.out |_. Explicaț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
|
== include(page="template/taskfooter" task_id="robot1") ==