<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2102_-_Robot_3</id>
	<title>2102 - Robot 3 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2102_-_Robot_3"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2102_-_Robot_3&amp;action=history"/>
	<updated>2026-05-03T09:37:41Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2102_-_Robot_3&amp;diff=9467&amp;oldid=prev</id>
		<title>VanceaGabriel: Pagină nouă: 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, &lt;code&gt;10&lt;/code&gt; butoane aranjate circular şi un ecran. Pe butoane sunt scrise, în ordine crescătoare, cifrele de la &lt;code&gt;0&lt;/code&gt; la &lt;code&gt;9&lt;/code&gt;, ca în figură. miniatura Un roboprogram va fi format dintr-o secvenţă de instrucţiuni. Instrucțiunile pot fi:  Iniţial mânerul robotului este plasat în dre...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2102_-_Robot_3&amp;diff=9467&amp;oldid=prev"/>
		<updated>2024-01-13T20:39:38Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: 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, &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; butoane aranjate circular şi un ecran. Pe butoane sunt scrise, în ordine crescătoare, cifrele de la &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;, ca în figură. &lt;a href=&quot;/index.php?title=Fi%C8%99ier:Image.png&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Fișier:Image.png (page does not exist)&quot;&gt;stanga|miniatura&lt;/a&gt; Un roboprogram va fi format dintr-o secvenţă de instrucţiuni. Instrucțiunile pot fi:  Iniţial mânerul robotului este plasat în dre...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;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, &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; butoane aranjate circular şi un ecran. Pe butoane sunt scrise, în ordine crescătoare, cifrele de la &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;, ca în figură.&lt;br /&gt;
[[Fișier:Image.png|stanga|miniatura]]&lt;br /&gt;
Un roboprogram va fi format dintr-o secvenţă de instrucţiuni. Instrucțiunile pot fi:&lt;br /&gt;
&lt;br /&gt;
Iniţial mânerul robotului este plasat în dreptul butonului &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, iar ecranul este gol.&lt;br /&gt;
&lt;br /&gt;
De exemplu, în urma executării roboprogramului &amp;lt;code&amp;gt;D4AS1AAD6AT&amp;lt;/code&amp;gt; robotul apasă butoanele pe care sunt scrise cifrele &amp;lt;code&amp;gt;4, 3, 3, 9,&amp;lt;/code&amp;gt; iar pe ecran va apărea &amp;lt;code&amp;gt;4339&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Cerințe ===&lt;br /&gt;
Să se scrie un program care rezolvă următoarele cerinţe:&lt;br /&gt;
&lt;br /&gt;
=== Date de intrare ===&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;robot3.in&amp;lt;/code&amp;gt; conţine pe prima linie un număr natural &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;, reprezentând cerinţa care urmează să fie rezolvată &amp;lt;code&amp;gt;(1, 2 sau 3)&amp;lt;/code&amp;gt;. Dacă &amp;lt;code&amp;gt;C=1&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;C=2&amp;lt;/code&amp;gt;, pe a doua linie a fişierului se află un roboprogram. Dacă &amp;lt;code&amp;gt;C=3&amp;lt;/code&amp;gt;, pe a doua linie a fişierului de intrare se află numărul natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Date de ieșire ===&lt;br /&gt;
Fişierul de ieşire &amp;lt;code&amp;gt;robot3.out&amp;lt;/code&amp;gt; va conţine o singură linie. Dacă &amp;lt;code&amp;gt;C=1&amp;lt;/code&amp;gt;, 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.&lt;br /&gt;
&lt;br /&gt;
Dacă &amp;lt;code&amp;gt;C=2&amp;lt;/code&amp;gt;, pe prima linie vor fi scrise cifrele afișate pe ecran în urma executării roboprogramului din fişierul de intrare. Dacă &amp;lt;code&amp;gt;C=3&amp;lt;/code&amp;gt;, pe prima linie va fi scris roboprogramul solicitat de cerinţa &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Restricții și precizări ===&lt;br /&gt;
• &amp;lt;code&amp;gt;0 ≤ N ≤ 1000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
• Lungimea roboprogramului citit din fişierul de intrare sau scris în fişierul de ieşire este &amp;lt;code&amp;gt;cel mult 1000&amp;lt;/code&amp;gt; de caractere.&lt;br /&gt;
&lt;br /&gt;
• Dacă mânerul este plasat în dreptul butonului &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; şi se deplasează spre dreapta, se va îndrepta către butonul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;; dacă deplasarea este spre stânga, se va îndrepta către butonul &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
• Pentru rezolvarea corectă a primei cerinţe se acordă 10 puncte, pentru rezolvarea corectă a celei de a doua cerințe se acordă 30 de puncte, iar pentru rezolvarea corectă a celei de a treia cerințe se acordă 50 de puncte. 10 puncte se acordă din oficiu.&lt;br /&gt;
&lt;br /&gt;
=== Exemplul 1: ===&lt;br /&gt;
&amp;lt;code&amp;gt;robot3.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 1&lt;br /&gt;
 D1AD2AS1AT&lt;br /&gt;
&amp;lt;code&amp;gt;robot3.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 3&lt;br /&gt;
&amp;lt;code&amp;gt;C=1&amp;lt;/code&amp;gt;, pentru acest test se rezolvă &amp;lt;code&amp;gt;cerința 1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Se afişează pe ecran &amp;lt;code&amp;gt;3 cifre (132)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exemplul 2: ===&lt;br /&gt;
&amp;lt;code&amp;gt;robot3.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 2&lt;br /&gt;
 S0AD2AS1AT&lt;br /&gt;
&amp;lt;code&amp;gt;robot3.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 021&lt;br /&gt;
&amp;lt;code&amp;gt;C=2&amp;lt;/code&amp;gt;, pentru acest test se rezolvă &amp;lt;code&amp;gt;cerința 2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Mânerul robotului se deplasează cu &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; unități la stânga, deci rămâne în dreptul butonului &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; și apasă, apoi se deplasează &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; unități spre dreapta şi ajunge în dreptul butonului &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, apasă, apoi se deplasează &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; unitate la stânga și ajunge în dreptul butonului &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; și apasă acest buton → &amp;lt;code&amp;gt;021&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Exemplul 3: ===&lt;br /&gt;
&amp;lt;code&amp;gt;robot3.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 3&lt;br /&gt;
 19332&lt;br /&gt;
&amp;lt;code&amp;gt;robot3.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 D1AS2AD4AAS1AT&lt;br /&gt;
&amp;lt;code&amp;gt;C=3&amp;lt;/code&amp;gt;, pentru acest test se rezolvă &amp;lt;code&amp;gt;cerința 3&amp;lt;/code&amp;gt;. Pentru a afișa cifra &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, mânerul robotului se deplasează &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; unitate la dreapta după care apasă &amp;lt;code&amp;gt;(D1A)&amp;lt;/code&amp;gt;. Pentru a afișa cifra &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;, din poziția curentă mânerul robotului se deplasează &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; unități la stânga şi apasă &amp;lt;code&amp;gt;(S2A)&amp;lt;/code&amp;gt;. Pentru a afișa cifra &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, din poziția curentă mânerul robotului se deplasează &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; unități la dreapta după care apasă &amp;lt;code&amp;gt;(D4A)&amp;lt;/code&amp;gt;. Pentru a afișa a doua cifra &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, mânerul robotului rămâne în poziția curentă și apasă butonul. Pentru a afișa cifra &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, din poziția curentă mânerul robotului se deplasează &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; unitate la stânga după care apasă &amp;lt;code&amp;gt;(S1A)&amp;lt;/code&amp;gt;. Programul se termină cu instrucțiunea &amp;lt;code&amp;gt;T → D1AS2AD4AAS1AT&amp;lt;/code&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
def main():&lt;br /&gt;
    # Deschidem fisierul de intrare si iesire&lt;br /&gt;
    with open(&amp;quot;robot.in&amp;quot;, &amp;quot;r&amp;quot;) as fin, open(&amp;quot;robot.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        # Citim numarul de cazuri de test &amp;#039;numar_c&amp;#039;.&lt;br /&gt;
        numar_c = int(fin.readline().strip())&lt;br /&gt;
&lt;br /&gt;
        # Citim sirul &amp;#039;numar_a&amp;#039; de caractere A, S, D.&lt;br /&gt;
        numar_a = fin.readline().strip()&lt;br /&gt;
&lt;br /&gt;
        # Definim functia &amp;#039;rezultat&amp;#039; care va scriem rezultatul in fisier in functie de diferenta dintre doua caractere.&lt;br /&gt;
        def rezultat(a, b):&lt;br /&gt;
            if a == b:&lt;br /&gt;
                fout.write(&amp;#039;A&amp;#039;)&lt;br /&gt;
            elif a &amp;lt; b:&lt;br /&gt;
                if b - a &amp;lt;= (a + 10 - b) % 10:&lt;br /&gt;
                    fout.write(f&amp;#039;D{b - a}A&amp;#039;)&lt;br /&gt;
                elif b - a &amp;gt; (a + 10 - b) % 10:&lt;br /&gt;
                    fout.write(f&amp;#039;S{(a + 10 - b) % 10}A&amp;#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                if a - b &amp;lt; (b + 10 - a) % 10:&lt;br /&gt;
                    fout.write(f&amp;#039;S{a - b}A&amp;#039;)&lt;br /&gt;
                else:&lt;br /&gt;
                    fout.write(f&amp;#039;D{(b + 10 - a) % 10}A&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
        # Verificam tipul de operatie specificat de &amp;#039;numar_c&amp;#039;.&lt;br /&gt;
        if numar_c == 1:&lt;br /&gt;
            # Calculam numarul de A-uri si il scriem in fisier.&lt;br /&gt;
            numar = numar_a.count(&amp;#039;A&amp;#039;)&lt;br /&gt;
            fout.write(str(numar))&lt;br /&gt;
        elif numar_c == 2:&lt;br /&gt;
            # Calculam pozitia finala in functie de operatiile S si D si o scriem in fisier.&lt;br /&gt;
            pozitie = 0&lt;br /&gt;
            for i in range(len(numar_a)):&lt;br /&gt;
                if numar_a[i] == &amp;#039;S&amp;#039;:&lt;br /&gt;
                    variabila = int(numar_a[i + 1])&lt;br /&gt;
                    pozitie = (pozitie + 10 - variabila) % 10&lt;br /&gt;
                elif numar_a[i] == &amp;#039;D&amp;#039;:&lt;br /&gt;
                    variabila = int(numar_a[i + 1])&lt;br /&gt;
                    pozitie = (pozitie + variabila) % 10&lt;br /&gt;
                elif numar_a[i] == &amp;#039;A&amp;#039;:&lt;br /&gt;
                    fout.write(str(pozitie))&lt;br /&gt;
        elif numar_c == 3:&lt;br /&gt;
            # Calculam rezultatul pentru fiecare pereche de caractere si scriem &amp;#039;T&amp;#039; la final.&lt;br /&gt;
            rezultat(0, int(numar_a[0]))&lt;br /&gt;
            for i in range(1, len(numar_a)):&lt;br /&gt;
                rezultat(int(numar_a[i - 1]), int(numar_a[i]))&lt;br /&gt;
            fout.write(&amp;#039;T&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>VanceaGabriel</name></author>
	</entry>
</feed>