Aller au contenu

Énigmes

    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?

Partager ce message


Lien à poster
Partager sur d’autres sites

12 réponses à cette énigme

Messages recommandés

  • 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

Partager ce message


Lien à poster
Partager sur d’autres 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.

Partager ce message


Lien à poster
Partager sur d’autres 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°

Modifié par timout

Partager ce message


Lien à poster
Partager sur d’autres 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:

Partager ce message


Lien à poster
Partager sur d’autres 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 ?

Partager ce message


Lien à poster
Partager sur d’autres 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

Partager ce message


Lien à poster
Partager sur d’autres 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...

 

Partager ce message


Lien à poster
Partager sur d’autres 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) ?

Partager ce message


Lien à poster
Partager sur d’autres 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.

 

 

Partager ce message


Lien à poster
Partager sur d’autres 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

Partager ce message


Lien à poster
Partager sur d’autres 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...

Partager ce message


Lien à poster
Partager sur d’autres 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

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

  • En ligne récemment   0 membre est en ligne

    Aucun utilisateur enregistré regarde cette page.

×
×
  • Créer...

Information importante

En utilisant ce site, vous acceptez notre Politique de confidentialité et nos Conditions d’utilisation
Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.