Sunteți pe pagina 1din 8

Jocul NIM Se pare c Nim este unul dintre cele mai vechi jocuri logice i, ca foarte multe jocuri

interesante, el vine dinspre China. n forma sa standard, jocul se desfoar astfel: Se aeaz pe mas mai multe iruri de obiecte. Pe rnd, juctorii iau dintr-un ir un numr de obiecte. Cel care ridic ultimul obiect ctig. Variante ale jocului au fost jucate nc din antichitate. Cele mai noi referiri europene la Nim dateaz de la nceputul secolului XVI, iar numele su a fost dat de ctre Charles L. Bouton de la Universitatea Harvard (cel care a finalizat i teoria jocurilor n 1901), ns numelui nu i s-a atribuit nicio explicaie. Cel mai probabil numele deriv din termenul german nimm! care nseamn ia! . Unii atrag atenia asupra faptului c rotind NIM la 180 se obine WIN. De obicei, la Nim, juctorul care ia ultimul obiect ctig, dar mai poate fi jucat i sub forma c persoana care face ultima mutare (cel care ridica ultimul obiect) pierde partida. Jocul are nenumrate variante, unele relativ sofisticate, altele simple deghizri ale jocului prezentat mai sus. Iat cteva variante ale jocului: Moneda de argint S ne imaginm o band de hrtie mprit n celule pe care sunt aezate mai multe monede, cel mult una n fiecare csu. Pe rnd, fiecare juctor mut cte o moned, spre stnga, cte csue dorete, dar numai n csue goale i fr ca monedele s sar una peste alta. Cel care nu mai poate muta pierde. Jocul este o varianta a Nim-ului, irurile de obiecte fiind de dimensiuni egale cu numrul de csue dintre monedele vecine de pe banda noastr de hrtie. O varianta mai interesanta este cea in care una dintre monede este marcat ntr-un fel oarecare (este de argint), iar monedele se presupun a cdea n extremitatea stng a benzii (ntr-o pung). Se muta la fel ca mai nainte ns partida se ncheie n momentul n care moneda de argint cade n pung. Juctorul care a efectuat aceast operaiune pierde partida.

Nim - varianta 1 Se aeaz mai multe monede pe o band de hrtie mprit n celule numerotate. La fiecare mutare, juctorii au dreptul s deplaseze cte o moned spre celula zero, cte celule doresc. ntr-o celul pot sta simultan oricte monede. Situaia din figur corespunde unui joc Nim standard cu 4 iruri de obiecte, avnd cate 2 , 2 , 4 i respectiv 7 obiecte fiecare.

Nim - varianta 2 Pe o tabl dreptunghiular se aeaz la ntmplare cte dou piese pe fiecare linie, piesa unui juctor n stnga i a celuilalt juctor n dreapta. Juctorul din stnga mut spre dreapta iar cel din dreapta spre stnga, o singura pies la mutare, peste cte csue doresc, fr a putea sri peste piesa advers de pe acea linie. Cel care nu mai poate muta pierde. De data aceasta, irurile de obiecte din jocul Nim standard asociat conin attea obiecte cte csue goale se gsesc pe fiecare linie ntre cele dou piese.

Nimcros Jocul este o combinaie ntre Nim i Tic-Tac-Toe, anume, pe o tabl 3X3, fiecare juctor marcheaz la fiecare mutare cte una, dou sau trei csue libere, aflate, dac sunt dou sau trei pe aceiai linie vertical sau orizontal. Ca la Nim, ctig cel care face ultima mutare, marcnd deci ultima csu liber a tablei. Jocul este mai dificil dect Tit-Tac-Toe, nu se poate termina remiz i n 1980 nu se tia nc dac are sau nu strategie de ctig pentru vreunul dintre juctori. De fapt analiza jocului nu este prea dificil (excluznd situaiile simetrice, nu exist dect n jur de 80 de configuraii ale tablei) i rezultatul este c primul juctor pierde ntotdeauna (cu condiia ca adversarul su s joace corect). Pentru aceasta avem de considerat 3 posibiliti de a marca o singur csu la prima mutare, patru posibiliti de a marca 2 csue i 2 posibiliti se a marca 3 csue. Replicile celui de-al doilea juctor sunt indicate prin piese .

o o o o o o

o o o o o o

o o o o o

Indiferent cum continu primul juctor, al doilea l poate conduce la o configuraie cu 2 cmpuri libere pe linii/coloane diferite, cu 4 cmpuri n aceasta situaie sau cu 2 perechi de cmpuri aliniate.

Nim deghizat Pe o tabl de ah (8X8) se aeaz la ntmplare 8 pioni albi i 8 negri, n modul indicat n figur, adic un pion alb i unul negru pe fiecare linie, piesa alba fiind n dreapta. Pe rnd, fiecare juctor mut o piesa proprie, nainte sau napoi pe linia pe care se gsete, peste cte csue dorete. Singura restricie este c nu se sare peste piesa advers ntlnit n cale. Juctorul care nu mai poate muta pierde partida.

Dei la prima vedere s-ar prea c jocul poate continua la nesfrit, de fapt, fiind o varianta de Nim, jocul are strategie de ctig pentru unul dintre juctori, n funcie de spaiile dintre pioni la nceputul partidei. Orice retragere a unui juctor mrete aceste spaii, dar adversarul poate muta nainte pentru a anula aceasta retragere. Dac poziia iniial, evalund spaiile dintre piese, este o poziie Nim ctigtoare pentru primul juctor, atunci se intr direct n strategia Nim-ului. Dac poziia nu este ctigtoare, nici retragerea i nici avansarea de piese nu ne salveaz. Pe scurt , nvingtorul trebuie sa avanseze cu attea csue cu cte se retrage adversarul i se joac ca la Nim atunci cnd adversarul nainteaz. n particular, n situaia din figur primul juctor ctig mutnd pe linia a 5-a cu 3 csue nainte, apoi imitndu-l pe adversar (rmn cte dou linii cu distana 0, 1, 2, 3 ntre piese).

Strategia de ctig Jocul Nim i variantele sale au fost mult timp studiate i sunt cunoscute strategii de ctig pentru majoritatea variantelor. De exemplu pentru Nim strategia este urmtoarea: scriem n baza 2 numrul obiectelor din fiecare ir, aezm numerele unele sub altele i le adunm modulo 2 pe fiecare coloan. Daca exist coloane pe care obinem cifra 1 la rezultat, atunci primul juctor are strategie de ctig: identificm cea mai din stnga cifr 1 obinut astfel, alegem un 1 pe coloana respectiv i n linia corespunztoare l nlocuim pe acel 1 cu 0, apoi nlocuim spre dreapta orice 1 cu 0 i orice 0 cu 1 n toate coloanele pentru care la rezultat s-a obinut tot cifra 1. Operaia corespunde micorrii numrului reprezentat n baza 2 pe linia respectiv, deci ridicrii unui numr de obiecte din irul corespunztor. Drept urmare a cestei operaii suma modulo 2 pe fiecare coloan va fi 0. Indiferent ce va juca acum al doilea juctor, el va modifica numrul obiectelor ntr-un fel care va conduce la noi cifre de 1 n suma modulo 2, din nou primul juctor va putea proceda ca mai sus, deci ntotdeauna i va rmne ceva de ridicat. Desigur, daca nu apar dect cifre de 0 n urma nsumrii modulo 2 a scrierilor n baza 2 a numrului obiectelor din fiecare ir, atunci al doilea juctor poate ctiga, aplicnd formula anterioar. O varianta cu strategie similara este cea n care la fiecare mutare nu pot fi luate dect cel mult k obiecte dintr-un ir, k fiind prezentat de la nceputul partidei. Problem: Realizai un program Pascal pentru jocul cu ajutorul computerului al jocului NIM, pornind de la n iruri (1 n 10) date, fiecare cu un numr cunoscut de elemente (mai mic dect 32). program nim; uses crt; type vect=array[1..10] of byte; var n,i,j,k,l,runda:integer; a,b,s:vect; ok:boolean; begin clrscr; textcolor(9); writeln('*** JOCUL NIM ***'); {citire date intrare} write('Dati numarul de randuri: ');read(n); writeln('Introduceti numarul de elemente situate pe fiecare rand: '); for i:=1 to n do begin write('Numarul de elemente de pe randul ',i,' : ');

read(a[i]); end; ok:=false; runda:=0; repeat runda:=runda+1; writeln(' Runda ',runda); writeln(' Au ramas : '); for i:=1 to n do write(a[i],', '); if odd(runda) then begin {mutare jucator 1} write('Introduceti randul dupa care luati elemente: ');read(i); write('Introduceti numarul de elemente luat: ');read(j); a[i]:=a[i]-j; end else {mutare jucator 2(computer)} begin {verifica daca exista o strategie de castig} for i:=1 to 5 do s[i]:=0; for i:=1 to n do if a[i]>0 then begin {transforma k=a[i] in baza 2 si aduna cu xor la s[i]} k:=a[i]; j:=5; while k<>0 do begin s[j]:=s[j] xor (k mod 2); k:=k div 2; j:=j-1; end; end; k:=0; for i:=1 to 5 do k:=k+s[i]; if k=0 then {daca toate elementele din s[i] sunt 0 se alege o mutare aleatoare} begin repeat i:=random(n)+1; until a[i]<>0; repeat j:=random(31)+1; until j<=a[i]; a[i]:=a[i]-j; writeln('Au fost luate ',j,' elemente de pe randul ',i);

end else {daca exista o strategie de castig, determina linia pe care se va face mutarea} begin {identificam prima coloana unde suma modulo 2 este 1} k:=1; while s[k]=0 do k:=k+1; {cautam prima linie care are 1 pe aceasta coloana k} i:=0; repeat i:=i+1; l:=a[i]; j:=5; while l<>0 do begin b[j]:=l mod 2; l:=l div 2; j:=j-1; end; until b[k]=1; {calculam cate elemente se vor lua din linia i} for j:=k to 5 do if s[j]=1 then b[j]:=1-b[j]; l:=1; j:=0; for k:=5 downto 1 do begin j:=j+b[k]*l; {folosim l pt puterile lui 2} l:=l*2; end; for k:=1 to 5 do b[k]:=0; j:=a[i]-j; a[i]:=a[i]-j; writeln('Au fost luate ',j,' elemente de pe randul ',i); end; end; {verifica daca mai sunt mutari posibile} k:=0; for i:=1 to n do k:=k+a[i]; if k=0 then ok:=true; until ok; writeln; textcolor(13); if odd(runda) then write(' Cunosti secretul. Ai invins calculatorul!') else write(' Nu mai exista mutari. Ai fost invins!');

readkey; end. Bibliografie Gheorghe Pun - Jocuri logice competitive, Editura Sport-Turism, Bucureti, 1990

S-ar putea să vă placă și