Această problemă este interactivă. Comisia are o valoare pozitivă pe biți, necunoscută vouă. Această valoare va fi modificată conform următoarei reguli.
- Voi veți transmite succesiv valori pozitive pe biți folosind o funcție pusă la dispoziție de către comisie.
- Comisia va efectua operația sau exclusiv pe biți (cunoscută drept
xor
) între valoare furnizată de voi și acea valoare necunoscută. - Asupra biților valorii obținute comisia va aplica o rotație circulară a biților cu un număr aleator între și de poziții (o rotație de poziții înseamnă mutarea secvenței formate din ultimii biti de pe ultimele poziții pe primele poziții).
Astfel se va obține noua valoare necunoscută în locul vechii valorii.
Aceste reguli se vor aplica de cel mult de ori. Dacă după un număr de aplicări a regulii valoarea necunoscută capătă valoarea sunteți magici si obțineți puncte (foarte importante în viitor). Dacă nu, nu veți obține nimic.
Programul vostru va trebui să conțină o funcție
void play()
Această funcție trebuie să apeleze de cel mult de ori funcția
int giveValue (int x)
Valoarea parametrului trebuie să fie egală exact cu valoarea pe care doriți să o transmiteți. Funcția giveValue
este pusă la dispoziția voastră de către comisie și va returna dacă ați ghicit numărul, altfel.
Restricții și precizări
- Funcția
play
va fi apelată de maxim de ori în cadrul unui test - Nu apelați funcția
giveValue
de mai mult de de ori în implementarea funcțieiplay
. - Numărul furnizat în funcția
giveValue
trebuie să se afle în intervalul - Nu trebuie să implementați funcția
main
- Trebuie să includeți fișierul
"magic.h"
Exemplu
Grader: play()
Concurent: giveValue(1)
Concurent: giveValue(2)
Concurent: giveValue(16)
Grader: Acordă punctaj!
Explicație
Valoarea secretă este .
Valoarea devine .
Valoarea devine după o rotație cu o poziție.
Valoarea devine .
Valoarea devine după o rotație cu poziții.
Valoarea devine .
Valoarea devine după o rotație cu poziții.
Valoarea necunoscută a fost transformată în după apeluri!