Palline in scatola

Messaggioda axpgn » 28/10/2023, 15:41

Mi sono imbattuto in un problema carino, che ho risolto, ma mi pare che contenga un'incongruenza nel testo.
Che ne pensate?

We have four identical boxes. One of the boxes contains three black balls (BBB), another box has two black and one white balls (BBW), the third box has one black and two white balls (BWW), and the last box has three white balls (WWW). Four labels, BBB, BBW, BWW, and WWW, are put on the boxes, one per box. As is often the case in such puzzles, none of the labels match the contents, and this fact is common knowledge. Four sages get one box each. Each sage sees his label but doesn’t know the other’s labels. Without looking in the box, each sage is asked to take out two balls and guess the color of the third ball. All the sages are in the same room and can hear each other and see the colors of the balls that are taken out.

The first sage takes out two black balls and says, “I know the color of the third ball.”
The second sage takes out one black and one white ball and says, “I know the color of the third ball.”
The third sage takes out two white balls and says, “I don’t know the color of the third ball.”
The fourth sage says, without taking out any balls, “I know the color of all the balls in my box and also the content of all the other boxes.”
Can you figure out what’s in the boxes?



Cordialmente, Alex
axpgn
Cannot live without
Cannot live without
 
Messaggio: 21646 di 40678
Iscritto il: 20/11/2013, 22:03

Re: Palline in scatola

Messaggioda Quinzio » 31/10/2023, 22:35

Testo nascosto, fai click qui per vederlo
Direi che la soluzione e' questa:

Saggi:....... 1.BBB 2.BBW 3.WWW 4.BWW 0 1 3 2
Etichette:.. 1.BBW 2.BWW 3.BBB 4.WWW 1 2 0 3

Qui sotto c'e' il codice per il solver se qualcuno fosse interessato. :-)

Codice:
; Variable declarations
(declare-fun a0 () Int)
(declare-fun a1 () Int)
(declare-fun a2 () Int)
(declare-fun a3 () Int)
(declare-fun b0 () Int)
(declare-fun b1 () Int)
(declare-fun b2 () Int)
(declare-fun b3 () Int)

; Constraints
(assert (>= a0 0))
(assert (>= a1 0))
(assert (>= a2 0))
(assert (>= a3 0))
(assert (>= b0 0))
(assert (>= b1 0))
(assert (>= b2 0))
(assert (>= b3 0))
(assert (<= a0 3))
(assert (<= a1 3))
(assert (<= a2 3))
(assert (<= a3 3))
(assert (<= b0 3))
(assert (<= b1 3))
(assert (<= b2 3))
(assert (<= b3 3))

(assert (not(= a0 a1)))
(assert (not(= a0 a2)))
(assert (not(= a0 a3)))
(assert (not(= a1 a2)))
(assert (not(= a1 a3)))
(assert (not(= a2 a3)))
(assert (not(= b0 b1)))
(assert (not(= b0 b2)))
(assert (not(= b0 b3)))
(assert (not(= b1 b2)))
(assert (not(= b1 b3)))
(assert (not(= b2 b3)))

(assert (not(= a0 b0)))
(assert (not(= a1 b1)))
(assert (not(= a2 b2)))
(assert (not(= a3 b3)))

(assert (or(= a0 0) (= a0 1)))
(assert (or(= a1 1) (= a1 2)))
(assert (or(= a2 2) (= a2 3)))

(assert (or(= b0 0) (= b0 1)))
(assert (or(= b1 1) (= b1 2)))
(assert (or(= b2 0) (= b2 1)))

; Solve
(check-sat)
(get-model)
Ultima modifica di Quinzio il 02/11/2023, 21:50, modificato 2 volte in totale.
Quinzio
Cannot live without
Cannot live without
 
Messaggio: 5590 di 10548
Iscritto il: 24/08/2010, 06:50

Re: Palline in scatola

Messaggioda axpgn » 31/10/2023, 22:44

Ma no, il codice no, dai! :lol:
Il ragionamento, il ragionamento che uno dovrebbe fare qual è? Manca ... :smt102

Comunque, hai trovato l'incongruenza nel testo?
axpgn
Cannot live without
Cannot live without
 
Messaggio: 21647 di 40678
Iscritto il: 20/11/2013, 22:03

Re: Palline in scatola

Messaggioda Drazen77 » 01/11/2023, 11:04

Testo nascosto, fai click qui per vederlo
Il primo saggio ha la scatola con etichetta Nero-Nero-Bianco, vede due palline nere e capisce che anche la terza è nera.

Il secondo saggio ha la scatola con etichetta Nero-Bianco-Bianco, vede una pallina nera e una bianca e capisce che la terza è nera.

Il terzo saggio ha la scatola con etichetta Nero-Nero-Nero, vede due palline bianche, ma non può determinare il colore della terza pallina.

Il quarto saggio ha la scatola con etichetta Bianco-Bianco-Bianco.
Ha capito che il primo ha Nero-Nero-Nero, che il secondo ha Nero-Nero-Bianco e quindi l'unica combinazione che può avere è Nero-Bianco-Bianco.

A questo punto per esclusione capiamo che il terzo ha Bianco-Bianco-Bianco.
Drazen77
Senior Member
Senior Member
 
Messaggio: 708 di 1311
Iscritto il: 17/08/2017, 17:59

Re: Palline in scatola

Messaggioda axpgn » 01/11/2023, 12:03

@Drazen77
Testo nascosto, fai click qui per vederlo
E se il primo saggio ha l'etichetta $BBB$ ? Mi sembra che hai tralasciato un po' di casi ...


Lo stesso vale anche per @Quinzio ...
axpgn
Cannot live without
Cannot live without
 
Messaggio: 21648 di 40678
Iscritto il: 20/11/2013, 22:03

Re: Palline in scatola

Messaggioda Drazen77 » 01/11/2023, 13:12

Testo nascosto, fai click qui per vederlo
axpgn ha scritto:@Drazen77
E se il primo saggio ha l'etichetta $BBB$ ? Mi sembra che hai tralasciato un po' di casi ...

Non è che li abbia tralasciati, li ho eliminati:
Se il primo avesse avuto l'etichetta $BBB$ avrebbe avuto palline $BBW$, il secondo avrebbe avuto palline $BWW$ e il terzo avrebbe saputo rispondere sapendo di avere palline $WWW$
Drazen77
Senior Member
Senior Member
 
Messaggio: 709 di 1311
Iscritto il: 17/08/2017, 17:59

Re: Palline in scatola

Messaggioda axpgn » 01/11/2023, 13:53

Se spieghi per bene tutti i passaggi, potremmo vedere se hai visto giusto oppure NO ...
axpgn
Cannot live without
Cannot live without
 
Messaggio: 21649 di 40678
Iscritto il: 20/11/2013, 22:03

Re: Palline in scatola

Messaggioda Drazen77 » 01/11/2023, 17:18

Testo nascosto, fai click qui per vederlo
Il primo può avere l'etichetta $WWW$, $BWW$, $BBB$, o $BBW$.
Primo caso: può avere l'etichetta $WWW$? No, perché dopo aver pescato due nere non avrebbe saputo indovinare la terza.
Secondo caso: può avere l'etichetta $BWW$? No, perché dopo aver pescato due nere non avrebbe saputo indovinare la terza.
Terzo caso: può avere l'etichetta $BBB$? No, perché in questo caso saprebbe di avere in mano $BBW$, però...
Caso 3a: Il primo ha l'etichetta $BBB$ e il secondo $WWW$
Caso 3b: Il primo ha l'etichetta $BBB$ e il secondo $BBW$
Caso 3c: Il primo ha l'etichetta $BBB$ e il secondo $BWW$

Caso 3a: Il secondo non può avere l'etichetta $WWW$, perché dopo aver pescato una nera e una bianca non avrebbe saputo indovinare la terza.
Caso 3b: Il secondo può avere l'etichetta $BBW$ e dopo aver pescato una nera e una bianca capirebbe di avere in mano $BWW$.
In questo caso il terzo potrebbe avere l'etichetta $BWW$ e saprebbe di avere in mano $WWW$, ma questo non può essere, perché ha detto di non conoscere il colore della terza pallina.
Allora il terzo potrebbe avere l'etichetta $WWW$ e saprebbe di avere in mano $WWB$, ma questo non può essere, perché ha detto di non conoscere il colore della terza pallina.
Caso 3c: Il secondo potrebbe avere l'etichetta $BWW$ e penserebbe di avere in mano $BBW$ (come il primo).
In questo caso il terzo potrebbe avere l'etichetta $WWW$ e saprebbe di avere in mano $BWW$, ma questo non può essere, perché ha detto di non conoscere il colore della terza pallina.
Allora il terzo potrebbe avere l'etichetta $BBW$ e potrebbe dire di non conoscere il colore della terza pallina.
A questo punto, però, il quarto non potrebbe dire di conoscere le palline del primo e del secondo.

Quindi l'unico caso buono è il quarto caso: il primo ha l'etichetta $BBW$ e dopo aver pescato due nere capisce di avere in mano $BBB$.
Caso 4a: Il primo ha l'etichetta $BBW$ e il secondo $WWW$
Caso 4b: Il primo ha l'etichetta $BBW$ e il secondo $BBB$
Caso 4c: Il primo ha l'etichetta $BBW$ e il secondo $BWW$

Caso 4a: Il secondo non può avere l'etichetta $WWW$, perché dopo aver pescato una nera e una bianca non avrebbe saputo indovinare la terza.
Caso 4b: Il secondo non può avere l'etichetta $BBB$, perché dopo aver pescato una nera e una bianca non avrebbe saputo indovinare la terza.
Caso 4c: Il secondo ha l'etichetta $BWW$ e capisce di avere in mano $BBW$. Questo è l'unico caso buono.

Quindi, il primo ha etichetta $BBW$ e capisce di avere in mano $BBB$.
Il secondo ha etichetta $BWW$ e capisce di avere in mano $BBW$.
Il terzo ha etichetta $BBB$ e non può indovinare la terza pallina.
Il quarto ha etichetta $WWW$, sa che il primo (che aveva pescato $BB$ non può avere in mano $BBB$) e capisce di poter essere l'unico ad avere in mano $BBB$. Di conseguenza capisce che il terzo ha in mano $WWW$, che il secondo ha in mano $BBW$ e che il primo ha in mano $BBB$.
Drazen77
Senior Member
Senior Member
 
Messaggio: 710 di 1311
Iscritto il: 17/08/2017, 17:59

Re: Palline in scatola

Messaggioda Quinzio » 01/11/2023, 18:16

axpgn ha scritto:Lo stesso vale anche per @Quinzio ...


Testo nascosto, fai click qui per vederlo
Ok, ma veramente avevo gia' messo tutto nel codice... :roll:

Lo rimetto, con dei commenti

Le prime righe dichiarano le funzioni/variabili, si possono tralasciare per la comprensione
Codice:
; Variable declarations
(declare-fun a0 () Int)
(declare-fun a1 () Int)
(declare-fun a2 () Int)
(declare-fun a3 () Int)
(declare-fun b0 () Int)
(declare-fun b1 () Int)
(declare-fun b2 () Int)
(declare-fun b3 () Int)

Poi ci sono i vincoli.
I primi sono dichiarazioni banali ma necessarie.
I saggi sono a0, a1, a2, a3 e le etichette sono le "b".
Ogni saggio possiede una scatola numerata da 0 a 3:
0 BBB
1 BBW
2 BWW
3 WWW
Idem per le etichette.
Codice:
; Constraints
(assert (>= a0 0))
(assert (>= a1 0))
(assert (>= a2 0))
(assert (>= a3 0))
(assert (>= b0 0))
(assert (>= b1 0))
(assert (>= b2 0))
(assert (>= b3 0))
(assert (<= a0 3))
(assert (<= a1 3))
(assert (<= a2 3))
(assert (<= a3 3))
(assert (<= b0 3))
(assert (<= b1 3))
(assert (<= b2 3))
(assert (<= b3 3))

I saggi possiedono tutti scatole diverse, anche le etichette appartengono a scatole diverse.
Il codice che segue e' un modo per assegnare 4 numeri a 4 variabili. Forse c'e' un modo piu' veloce, non so.
Codice:
(assert (not(= a0 a1)))
(assert (not(= a0 a2)))
(assert (not(= a0 a3)))
(assert (not(= a1 a2)))
(assert (not(= a1 a3)))
(assert (not(= a2 a3)))
(assert (not(= b0 b1)))
(assert (not(= b0 b2)))
(assert (not(= b0 b3)))
(assert (not(= b1 b2)))
(assert (not(= b1 b3)))
(assert (not(= b2 b3)))

L"etichetta assegnata a una scatola (assegnata al saggio) non corrisponde.
Codice:
(assert (not(= a0 b0)))
(assert (not(= a1 b1)))
(assert (not(= a2 b2)))
(assert (not(= a3 b3)))

Il saggio a0 possiede la BBB o BBW, quindi la scatola 0 o 1 nel codice.
Per gli altri saggi valgono considerazioni simili.
Codice:
(assert (or(= a0 0) (= a0 1)))
(assert (or(= a1 1) (= a1 2)))
(assert (or(= a2 2) (= a2 3)))

I primi due sanno che scatola hanno quindi l'etichetta e' congruente (si poteva gia' assegnare il valore).
I saggio a2 non sa qual e' la sua scatola, quindi non ha la sua e non ha la 2 o la 3 (altirmenti lo saprebbe)
Codice:
(assert (or(= b0 0) (= b0 1)))
(assert (or(= b1 1) (= b1 2)))
(assert (or(= b2 0) (= b2 1)))

Infine si puo' trovare la soluzione con un 'theorem prover'.
https://compsys-tools.ens-lyon.fr/z3/
Codice:
; Solve
(check-sat)
(get-model)
Quinzio
Cannot live without
Cannot live without
 
Messaggio: 5594 di 10548
Iscritto il: 24/08/2010, 06:50

Re: Palline in scatola

Messaggioda axpgn » 01/11/2023, 21:58

@Drazen77
Testo nascosto, fai click qui per vederlo
Quando analizzi la situazione di un saggio non puoi considerare quello che viene DETTO dopo, altrimenti ti perdi qualcosa ...


@Quinzio
Testo nascosto, fai click qui per vederlo
Quinzio ha scritto:Ok, ma veramente avevo gia' messo tutto nel codice... :roll:

Lo avrai anche messo ma se lo capisci solo tu per me è un problema :wink:

Comunque la questione è un'altra ... non avendo analizzato tu personalmente il problema, hai dato per scontato che fosse coerente e l'hai passato al "risolutore" però così non è ...


Domani posto la mia versione ...
axpgn
Cannot live without
Cannot live without
 
Messaggio: 21650 di 40678
Iscritto il: 20/11/2013, 22:03

Prossimo

Torna a Giochi matematici

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite