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, butoane aranjate circular și un ecran. Pe butoane sunt scrise, în ordine crescătoare, cifrele de la la , ca în figură.
Un roboprogram va fi format dintr-o secvență de instrucțiuni. Instrucțiunile pot fi:
- Dp: Mânerul robotului se deplasează spre dreapta cu poziții ( este o cifră)
- Sp: Mânerul robotului se deplasează spre stânga cu poziții ( 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 )
Inițial mânerul robotului este plasat în dreptul butonului , iar ecranul este gol. De exemplu, în urma executării roboprogramului D4AS1AAD6AT robotul apasă butoanele pe care sunt scrise cifrele , , , , iar pe ecran va apărea .
Cerință
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 și construiește un roboprogram de lungime minimă prin executarea căruia pe ecran se va obține numărul ; 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 .
Date de intrare
Fișierul de intrare robot.in
conține pe prima linie un număr natural , reprezentând cerința care urmează să fie rezolvată (, sau ). Dacă sau , pe a doua linie a fișierului se află un roboprogram. Dacă , pe a doua linie a fișierului de intrare se află numărul natural .
Date de ieșire
Fișierul de ieșire robot.out
va conține o singură linie.
Dacă , 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ă , pe prima linie vor fi scrise cifrele afișate pe ecran în urma executării roboprogramului din fișierul de intrare.
Dacă , pe prima linie va fi scris roboprogramul solicitat de cerința .
Restricții și precizări
- ;
- Lungimea roboprogramului citit din fișierul de intrare sau scris în fișierul de ieșire este cel mult de caractere.
- Dacă mânerul este plasat în dreptul butonului și se deplasează spre dreapta, se va îndrepta către butonul ; dacă deplasarea este spre stânga, se va îndrepta către butonul .
- Pentru rezolvarea corectă a primei cerințe se acordă puncte, pentru rezolvarea corectă a celei de a doua cerințe se acordă de puncte, iar pentru rezolvarea corectă a celei de a treia cerințe se acordă de puncte. puncte se acordă din oficiu.
Exemplul 1
robot.in
1
D1AD2AS1AT
robot.out
3
Explicație
, pentru acest test se rezolvă cerința .
Se afișează pe ecran cifre ()
Exemplul 2
robot.in
2
S0AD2AS1AT
robot.out
021
Explicație
, pentru acest test se rezolvă cerința .
Mânerul robotului se deplasează cu unități la stânga, deci rămâne în dreptul butonului și apasă, apoi se deplasează unități spre dreapta și ajunge în dreptul butonului , apasă, apoi se deplasează unitate la stânga și ajunge în dreptul butonului și apasă acest buton ⇒ .
Exemplul 3
robot.in
3
19332
robot.out
D1AS2AD4AAS1AT
Explicație
, pentru acest test se rezolvă cerința . Pentru a afișa cifra , mânerul robotului se deplasează 1 unitate la dreapta după care apasă (D1A). Pentru a afișa cifra , din poziția curentă mânerul robotului se deplasează unități la stânga și apasă (S2A). Pentru a afișa cifra , din poziția curentă mânerul robotului se deplasează unități la dreapta după care apasă (D4A). Pentru a afișa a doua cifra , mânerul robotului rămâne în poziția curentă și apasă butonul. Pentru a afișa cifra , din poziția curentă mânerul robotului se deplasează unitate la stânga după care apasă (S1A). Programul se termină cu instrucțiunea T ⇒ D1AS2AD4AAS1AT