Diferente pentru problema/monede3 intre reviziile #9 si #31

Nu exista diferente intre titluri.

Diferente intre continut:

Gigel va fi legat la ochi, iar paznicul pune 4 monede pe colţurile unui pătrat din carton, fiecare având o poziţie aleatoare (cap - $0$ sau pajură - $1$). Scopul lui Gigel este ca toate cele patru monede să ajungă cu aceeaşi faţă în sus (toate cap sau toate pajură). Provocarea are cel mult 9 runde, în fiecare rundă se efectuează paşii de mai jos, în această ordine:
* paznicul roteşte pătratul de carton cu un unghi ales aleator dintre 0°, 90°, 180° şi 270°
* Gigel îi cere paznicului să inverseze între una şi patru monede, specificând colţurile mesei corespunzătoare monedelor pe care doreşte să le inverseze
* paznicul îi spune lui Gigel dacă după inversarea monedelor, scopul a fost atins (toate monedele au aceeaşi faţă); daca da, provocarea se termină şi Gigel a câştigat; dacă nu, se trece la runda următoare
* paznicul roteşte pătratul de carton (împreună cu monedele de pe colţuri) cu un unghi ales aleator dintre 0°, 90°, 180° şi 270°
* Gigel îi cere paznicului să inverseze între una şi patru monede, specificând colţurile mesei corespunzătoare monedelor pe care doreşte să le inverseze (notate cu $A$, $B$, $C$ şi $D$)
* paznicul îi spune lui Gigel dacă după inversarea monedelor, scopul a fost atins (toate monedele au aceeaşi faţă); dacă da, provocarea se termină şi Gigel a câştigat; dacă nu, se trece la runda următoare
Dacă la finalul a 9 runde Gigel încă nu a câştigat, provocarea se termină, iar Gigel pierde.
În partea stângă a figurii de mai jos este reprezentată masa paznicului la începutul unei runde. Paznicul decide aleator să rotească pătratul de carton cu 90°, rezultatul fiind reprezentat în partea dreaptă a figurii. Observaţi că doar monedele îşi schimbă poziţia (moneda cu faţa $1$ mutându-se de pe poziţia $B$ pe poziţia $C$), în timp ce colţurile mesei rămân fixe. Dacă în această rundă Gigel spune $C$, toate monedele vor avea faţa $0$ şi Gigel câştigă. La fel, dacă Gigel spune $ABD$, toate monedele vor avea faţa $1$ şi câştigă deasemenea.
!{width:500px}problema/monede3?monede3.png!
h2. Date de intrare
h2. Interacţiune
Fişierul de intrare $monede3.in$ ...
Aceasta este o problemă interactivă. În loc să citiţi datele dintr-un fişier de intrare şi să afişaţi rezultatul într-un fişier de ieşire, veţi interacţiona cu evaluatorul citind de la _standard input_ (de exemplu folosind $scanf$ sau $cin$ în C/C++) şi afişând în _standard output_ (de exemplu folosind $printf$ sau $cout$ în C/C++).
h2. Date de ieşire
Programul vostru va începe citind numărul de provocări la care participă Gigel. Pentru a ne asigura că metoda aleasă de voi rezolvă orice provocare în cel mult 9 runde, vor avea loc un număr de cel mult 100 de provocări. Imediat ce numărul de provocări a fost citit, va începe prima rundă a primei provocări.
În fişierul de ieşire $monede3.out$ ...
La fiecare rundă, programul vostru trebuie să afişeze un o linie (terminată cu $'\n'$), corespunzând poziţiilor monedelor pe care vrea să le inverseze. Caracterele afişate trebuie să fie distincte şi pot avea doar valorile $'A'$, $'B'$, $'C'$ sau $'D'$. După ce se afişează această linie, va trebui să citiţi rezultatul acţiunii voastre, exprimat printr-un număr întreg, ce poate avea valorile următoare:
h2. Restricţii
* $-1$: linia dată de voi este greşită
* $1$: aţi câştigat provocarea (toate monedele au aceeaşi faţă)
* $0$: încă nu aţi câştigat provocarea
* $... ≤ ... ≤ ...$
În cazul în care aţi câştigat provocarea, va începe imediat următoarea provocare. După ce aţi câştigat şi ultima provocare, programul vostru trebuie să îşi încheie execuţia. Dacă aţi primit răspunsul $0$ în toate cele 9 runde ale unei provocări sau aţi primit vreun răspuns $-1$, programul vostru trebuie să îşi încheie deasemenea execuţia.
h2. Exemplu
Pentru a vă asigura că linia afişată de voi ajunge la _standard output_ în momentul dorit, asiguraţi-vă că aţi pus $'\n'$ la finalul liniei, iar după afişare faceţi flush la _standard output_.
 
* În C sau C++, dacă aţi afişat folosind $printf$, apelaţi ulterior $fflush(stdout)$.
* În C++, dacă aţi afişat folosind $cout$, apelaţi ulterior $cout.flush()$.
* În Pascal, după afişare apelaţi $flush(output)$.
* În Java, după afişare apelaţi $System.out.flush()$.
* În Python, după afişare apelaţi $sys.stdout.flush()$.
table(example). |_. monede3.in |_. monede3.out |
| This is some
  text written on
  multiple lines.
| This is another
  text written on
  multiple lines.
|
h2. Exemplu
h3. Explicaţie
table(example). |_. stdin |_. stdout |_. Explicaţie |
| 2 |   | Numărul de provocări este 2. |
|   |   | Pentru prima provocare s-a generat aleator configuraţia [0 1 0 0], care în prima rundă s-a rotit aleator cu 90°, deci avem [0 0 1 0]. |
|   | AC | Se inversează monedele de la poziţiile A şi C, deci [0 0 1 0] -> [1 0 0 0] |
| 0  |   | Încă nu am câştigat, provocarea continuă. |
|   |   | Pătratul se roteşte aleator cu 270°, [1 0 0 0] -> [0 0 0 1]. |
|   | ABC | Se inversează monedele de la poziţiile A, B şi C, deci [0 0 0 1] -> [1 1 1 1] |
| 1 |   | Am câştigat prima provocare după două runde. |
|   |   | Începe provocarea a doua. Se generează aleator configuraţia [0 1 0 1], care se roteşte aleator cu 0°. |
|   | ABCD | Se inversează toate monedele, deci [0 1 0 1] -> [1 0 1 0] |
| 0  |   | Încă nu am câştigat, provocarea continuă. |
|   |   | Pătratul se roteşte aleator cu 90°, [1 0 1 0] -> [0 1 0 1]. |
|   | C | Se inversează moneda C, deci [0 1 0 1] -> [0 1 1 1] |
| 0  |   | Încă nu am câştigat, provocarea continuă. |
|   |   | Pătratul se roteşte aleator cu 90°, [0 1 1 1] -> [1 0 1 1]. |
|   | B | Se inversează moneda B, deci [1 0 1 1] -> [1 1 1 1] |
| 1 |   | Am câştigat a doua (ultima) provocare după trei runde. |
|   |   | Programul ar trebui să îşi încheie execuţia. |
...
_Observaţie:_ Există posibilitatea ca în configuraţia iniţială toate monedele să aibă aceeaşi faţă.
== include(page="template/taskfooter" task_id="monede3") ==

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.