Jump to content
  • 0
l'homme

Le corbeau

Question

    Dans un rêve, j'affrontais un corbeau au jeu suivant:

Il avait installé côte à côte un tas de quatre cailloux, un autre de cinq cailloux, un troisième de sept cailloux et un dernier de huit cailloux.

Tour à tour nous devions retirer autant de cailloux que nous voulions dans UN SEUL tas. Il me laissait commencer.

Si je retirais le dernier caillou en jeu le corbeau me permettait de me réveiller. Sinon, il insistait pour rejouer.

     Malgré le talent infaillible du volatile me voilà réveillé. Quel a été mon premier coup?

Share this post


Link to post
Share on other sites

12 answers to this question

Recommended Posts

  • 0

j'ai du mal a visualiser comment le premier coup peut etre déterminant, sauf si on ajoute une regle comme quoi on ne peut pas prendre tout les cailloux

2 hypothèses

- on prend tous les cailloux d'un tas, rien n'empeche le corbeau de prendre tous les cailloux du tas suivant

  + que le reveur prenne la totalité du 3° tas, le corbeau fait de meme et gagne

  + que le reveur prenne la totalité du 3° tas, le corbeau fait de meme avec le 4° tas et le reveur est obligé de finir un tas contenant cailloux le corbeau finissant le 4°

- le reveur prend tous les cailloux sauf un

  + le corbeau s'arrange pour faire la meme chose sur un autre tas et finit par gagner

Share this post


Link to post
Share on other sites
  • 0

Pour visualiser comment le premier coup est drastiquement important, je suggère d'étudier dans un premier temps des parties plus simples.

Exemple: moins de tas, moins de cailloux dans chaque tas.

Share this post


Link to post
Share on other sites
  • 0
il y a 43 minutes, timout a dit :

+ que le reveur prenne la totalité du 3° tas, le corbeau fait de meme avec le 4° tas et le reveur est obligé de finir un tas contenant cailloux le corbeau finissant le 4°

j'avais fait une erreur dans ma formulation

+ que le reveur prenne la totalité du 3° tas sauf un caillou, le corbeau fait de meme avec le 4° tas et le reveur est obligé de finir un tas contenant un cailloux le corbeau finissant le 4°

Edited by timout

Share this post


Link to post
Share on other sites
  • 0
Révélation

 

Perdu = p ; Gagné = g

J'énumère toutes les combinaisons en partant de la fin (je ne mets pas les séparations entre les chiffres).

0000 p

n000 g

1100 p

n100 g si n>1

2200 p

n200 g si n>2

...

par récurrence (n=>n+1)

nn00 p

np00 g si n>p

 

Commençons avec un 3e tas pas vide :

pnn0 g (vider p !)

3210 p

n210 g si n>3 =>3210

n310 g si n>2 =>3210

n320 g si n>1 =>3210

5410 p

n410 g si n>5

n510 g si n>4

n540 g si n>1

6420 p

n420 g si n>6

n620 g si n>4

n640 g si n>2

6530 p

n530 g si n>6

n630 g si n>5

n650 g si n>3

7430 p

n430 g si n>7

n730 g si n>4

n740 g si n>3

7520 p

n520 g si n>7

n720 g si n>5

n750 g si n>2

7610 p

n610 g si n>7

n710 g si n>6

n760 g si n>1

J'en tire la conclusion que

npq0 est gagnant quoi qu'il arrive si p et q inférieurs à 8 et n supérieur ou égal à 8 (les 21 possibilités pour pq ayant été énumérées).

 

Restent les possibilités avec 4 tas :

1111 p

n111 g si n>1

2211 p

n211 g si n>2

n221 g si n>2

2222 p

n222 g si n>2

3311 p

n311 g si n>3

n331 g si n>3

n321 g => virer n

....

 

 

 

 

 

 

 

 

Alors c'est décidé : tout en finesse :


liste=[]
for i in range(9):
    for j in range(9):
        for k in range(9):
            for l in range(9):
                 if not(sorted([i,j,k,l]) in liste):
                     liste.append(sorted([i,j,k,l]))
# gagné +1 perdu -1 pas su 0
long=len(liste)
gagne=[-1]+(long-1)*[0]
jouer=long*[[]]
acontinuer=True
while acontinuer:
    acontinuer=False
    for i in range(long):
        ii=liste[i]
        if gagne[i]==0:
            tousperdants=True
            liste2=[]
            for j in range(ii[0]):
                t=sorted([j,ii[1],ii[2],ii[3]])
                if not(t in liste2):
                    liste2.append(t)
            for k in range(ii[1]):
                t=sorted([ii[0],k,ii[2],ii[3]])
                if not(t in liste2):
                    liste2.append(t)
            for l in range(ii[2]):
                t=sorted([ii[0],ii[1],l,ii[3]])
                if not(t in liste2):
                    liste2.append(t)
            for m in range(ii[3]):
                t=sorted([ii[0],ii[1],ii[2],m])
                if not(t in liste2):
                    liste2.append(t)
            for n in liste2:
                u=gagne[liste.index(n)]
                if u==0:
                    tousperdants=False
                    acontinuer=True
                elif u==-1:
                    tousperdants=False
                    gagne[i]=1
                    jouer[i]=n
                    break
            if tousperdants:
                gagne[i]=-1
print(jouer[liste.index([4,5,7,8])])

et la réponse du programme : [4,5,6,7]

Par conséquent, on enlève 2 cailloux aux tas de 8 cailloux.

Mais non je ne suis pas un bourrin :tetemur:

Share this post


Link to post
Share on other sites
  • 0

euh, en relisant l'enoncé je me rends compte d'un truc, quand le reveur commence a piocher dans un tas, il dois continuer de piocher dans le meme tas ?

Share this post


Link to post
Share on other sites
  • 0
il y a une heure, timout a dit :

euh, en relisant l'enoncé je me rends compte d'un truc, quand le reveur commence a piocher dans un tas, il dois continuer de piocher dans le meme tas ?

non, il pioche dans le as qu'il veut après

Share this post


Link to post
Share on other sites
  • 0
Il y a 10 heures, ribi a dit :
  Révéler le contenu masqué

 

Perdu = p ; Gagné = g

J'énumère toutes les combinaisons en partant de la fin (je ne mets pas les séparations entre les chiffres).

0000 p

n000 g

1100 p

n100 g si n>1

2200 p

n200 g si n>2

...

par récurrence (n=>n+1)

nn00 p

np00 g si n>p

 

Commençons avec un 3e tas pas vide :

pnn0 g (vider p !)

3210 p

n210 g si n>3 =>3210

n310 g si n>2 =>3210

n320 g si n>1 =>3210

5410 p

n410 g si n>5

n510 g si n>4

n540 g si n>1

6420 p

n420 g si n>6

n620 g si n>4

n640 g si n>2

6530 p

n530 g si n>6

n630 g si n>5

n650 g si n>3

7430 p

n430 g si n>7

n730 g si n>4

n740 g si n>3

7520 p

n520 g si n>7

n720 g si n>5

n750 g si n>2

7610 p

n610 g si n>7

n710 g si n>6

n760 g si n>1

J'en tire la conclusion que

npq0 est gagnant quoi qu'il arrive si p et q inférieurs à 8 et n supérieur ou égal à 8 (les 21 possibilités pour pq ayant été énumérées).

 

Restent les possibilités avec 4 tas :

1111 p

n111 g si n>1

2211 p

n211 g si n>2

n221 g si n>2

2222 p

n222 g si n>2

3311 p

n311 g si n>3

n331 g si n>3

n321 g => virer n

....

 

 

 

 

 

 

 

 

Alors c'est décidé : tout en finesse :



liste=[]
for i in range(9):
    for j in range(9):
        for k in range(9):
            for l in range(9):
                 if not(sorted([i,j,k,l]) in liste):
                     liste.append(sorted([i,j,k,l]))
# gagné +1 perdu -1 pas su 0
long=len(liste)
gagne=[-1]+(long-1)*[0]
jouer=long*[[]]
acontinuer=True
while acontinuer:
    acontinuer=False
    for i in range(long):
        ii=liste[i]
        if gagne[i]==0:
            tousperdants=True
            liste2=[]
            for j in range(ii[0]):
                t=sorted([j,ii[1],ii[2],ii[3]])
                if not(t in liste2):
                    liste2.append(t)
            for k in range(ii[1]):
                t=sorted([ii[0],k,ii[2],ii[3]])
                if not(t in liste2):
                    liste2.append(t)
            for l in range(ii[2]):
                t=sorted([ii[0],ii[1],l,ii[3]])
                if not(t in liste2):
                    liste2.append(t)
            for m in range(ii[3]):
                t=sorted([ii[0],ii[1],ii[2],m])
                if not(t in liste2):
                    liste2.append(t)
            for n in liste2:
                u=gagne[liste.index(n)]
                if u==0:
                    tousperdants=False
                    acontinuer=True
                elif u==-1:
                    tousperdants=False
                    gagne[i]=1
                    jouer[i]=n
                    break
            if tousperdants:
                gagne[i]=-1
print(jouer[liste.index([4,5,7,8])])

et la réponse du programme : [4,5,6,7]

Par conséquent, on enlève 2 cailloux aux tas de 8 cailloux.

Mais non je ne suis pas un bourrin :tetemur:

Bravo ribi pour cette méthode délicate!! Je ne m'attendais pas à ce que ce soit possible de trouver comme ça😂

Il existe cependant une technique très rapide pour savoir quoi faire à ce jeu quelle que soit la disposition initiale. Je la mets en masqué pour qui veut… 

Révélation

     Il y a n tas, contenant r1..rn cailloux. (Tout ces nombres sont des entiers positifs ou nuls).

- Ecrire tous les rn en binaire.

- Faire la somme S des rn avec toutefois cette règle étrange:

1+1=0

-si S=0, laisser jouer son adversaire

-sinon, trouver un coup tel la somme soit rabattue à 0

 

     L'infaillibilité de cette technique est marrante à prouver...

 

Share this post


Link to post
Share on other sites
  • 0

j'avoue que j'ai du mal a visualiser, meme après avoir lu les spoiler
soit j'ai mal compris l'énoncé, mais je ne vois pas ce que ca change de piocher autre chose que 2 cailloux dans le tas de 8
il me faudrait le décompte  par l'exemple avec les 4 tas de 4, 5, 7 et 8 cailloux

En prenant à minima  2 tas de 1 cailloux (a), il est evident qu'il laisse le corbeau jouer

avec 1+2, il prend 1 dans le tas de 2

avec 1+3 d'après ta méthode il laisse le corbeau jouer, mais qu'est ce qui l'empeche de prendre 2 dans le tas de 3 et se retrouver dans la configuration (a) ?

Share this post


Link to post
Share on other sites
  • 0
il y a 45 minutes, timout a dit :

j'avoue que j'ai du mal a visualiser, meme après avoir lu les spoiler
soit j'ai mal compris l'énoncé, mais je ne vois pas ce que ca change de piocher autre chose que 2 cailloux dans le tas de 8
il me faudrait le décompte  par l'exemple avec les 4 tas de 4, 5, 7 et 8 cailloux

En prenant à minima  2 tas de 1 cailloux (a), il est evident qu'il laisse le corbeau jouer

avec 1+2, il prend 1 dans le tas de 2

avec 1+3 d'après ta méthode il laisse le corbeau jouer, mais qu'est ce qui l'empeche de prendre 2 dans le tas de 3 et se retrouver dans la configuration (a) ?

 

Pour mieux visualiser l'addition étrange que j'ai présenté, imaginez que l'on fait une addition en binaire en oubliant systématiquement les retenues.

 

avec 1+3:

 

1=01 et 3=11 en binaire

 

Alors 1+3 = 01+11 = (0+1,1+1) = 10 = 2. Donc il ne faut pas laisser le corbeau jouer.

 

 

Share this post


Link to post
Share on other sites
  • 0

j'ai bien compris l'addition en binaire, ce que je ne visualise pas c'est pourquoi se baser sur l'addition alors que soit le corbeau soit le reveur peut prendre n cailloux, je pense que cela était valable plutot si l'on prenait les cailloux un par un, c'est pourquoi je demandais la solution avec le nombre de cailloux pris par chacun a chaque tour afin que je comprenne mieux le choix imposé de 2 au départ et la possibilité pour le corbeau par la suite

Share this post


Link to post
Share on other sites
  • 0

Mon programme me donne tous les coups perdants :

Révélation

[[0, 0, 0, 0], [0, 0, 1, 1], [0, 0, 2, 2], [0, 0, 3, 3], [0, 0, 4, 4], [0, 0, 5, 5], [0, 0, 6, 6], [0, 0, 7, 7], [0, 0, 8, 8], [0, 1, 2, 3], [0, 1, 4, 5], [0, 1, 6, 7], [0, 2, 4, 6], [0, 2, 5, 7], [0, 3, 4, 7], [0, 3, 5, 6], [1, 1, 1, 1], [1, 1, 2, 2], [1, 1, 3, 3], [1, 1, 4, 4], [1, 1, 5, 5], [1, 1, 6, 6], [1, 1, 7, 7], [1, 1, 8, 8], [1, 2, 4, 7], [1, 2, 5, 6], [1, 3, 4, 6], [1, 3, 5, 7], [2, 2, 2, 2], [2, 2, 3, 3], [2, 2, 4, 4], [2, 2, 5, 5], [2, 2, 6, 6], [2, 2, 7, 7], [2, 2, 8, 8], [2, 3, 4, 5], [2, 3, 6, 7], [3, 3, 3, 3], [3, 3, 4, 4], [3, 3, 5, 5], [3, 3, 6, 6], [3, 3, 7, 7], [3, 3, 8, 8], [4, 4, 4, 4], [4, 4, 5, 5], [4, 4, 6, 6], [4, 4, 7, 7], [4, 4, 8, 8], [4, 5, 6, 7], [5, 5, 5, 5], [5, 5, 6, 6], [5, 5, 7, 7], [5, 5, 8, 8], [6, 6, 6, 6], [6, 6, 7, 7], [6, 6, 8, 8], [7, 7, 7, 7], [7, 7, 8, 8], [8, 8, 8, 8]]

et effectivement le "ou exclusif" sur les bits donne bien 0...

Share this post


Link to post
Share on other sites
  • 0
Il y a 7 heures, timout a dit :

j'ai bien compris l'addition en binaire, ce que je ne visualise pas c'est pourquoi se baser sur l'addition alors que soit le corbeau soit le reveur peut prendre n cailloux, je pense que cela était valable plutot si l'on prenait les cailloux un par un, c'est pourquoi je demandais la solution avec le nombre de cailloux pris par chacun a chaque tour afin que je comprenne mieux le choix imposé de 2 au départ et la possibilité pour le corbeau par la suite

Il n'y a pas vraiment de partie type, tour par tour. En effet, dès que le corbeau est mis en échec ses coups sont tous équivalents, car menant à une défaite certaine.

     Ce qui se passe, c'est qu'à chaque fois que la somme vaut 0, le moindre coup rend la somme non nulle.

Mais dès que la somme est non nulle, il existe un coup pour rabattre la somme sur 0. De quoi jouer au ping pong

 

Donc si S=0 => perdant et S > 0 => gagnant, et qu'on envoie bien le corbeau en 4 5 6 7 (là, S = 0), alors à chaque coup on saura mettre le corbeau en situation perdante, tandis que celui-ci sera obligé de nous remettre en situation gagnante.

Et ce jusqu'à la situation perdante finale: 0 partout.

     En revanche, si on fait un autre coup, le corbeau aura S non nul et il renversera le processus.

 

    Vous pourrez vous marrer sur la plage cet été en battant n'importe qui  😎

Ca fait trois ans que je bats mes nièces en faisant style que je fais des énormes stratégies, ça les impressionne ha ha ha

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

En utilisant ce site, vous acceptez notre Privacy Policy et nos Terms of Use
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.