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

Nu exista diferente intre titluri.

Diferente intre continut:

Gigel a ieşit cu bine din supermarket dar a uitat să scaneze la ieşire o ciocolată. Paznicul îl observă, dar îl va lăsa să plece dacă trece de provocarea de mai jos.
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$).
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 (î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.
h2. Date de intrare
Î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.
Fişierul de intrare $monede3.in$ ...
!{width:500px}problema/monede3?monede3.png!
h2. Date de ieşire
h2. Interacţiune
În fişierul de ieşire $monede3.out$ ...
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. Restricţii
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.
* $... ≤ ... ≤ ...$
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. Exemplu
* $-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.
 
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_.
table(example). |_. monede3.in |_. monede3.out |
| This is some
  text written on
  multiple lines.
| This is another
  text written on
  multiple lines.
|
* Î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()$.
 
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.