E dire che ci eri andato così vicino! Il primo deve usare un codice che permetta agli altri di indovinare il colore del proprio cappello. Avevi usato 'cappelli uguali', ma in realtà è più semplice.
Da qualche parte ho una soluzione che ci va molto vicino... se la trovo la metto qui, vi farà capire come funziona.
La soluzione giusta non ve la do!
Trovata:
Allora, l'idea è questa: i primi 10 comunicano ai 990 rimanenti, quanti cappelli bianchi ci sono tra questi 990.
Quindi ognuno degli ultimi 10 conta quanti cappelli bianchi ci sono nei primi 990. Qundi ognuno di questi sa quanti sono i cappelli bianchi tra i primi 990 concorrenti.
Quindi questi comunicano questo numero ai primi 990 concorenti, e lo fanno nell'unico modo possibile potendo dire solo bianco e nero: compongono questo numero usando una numerazione in base 2.
Quindi supponiamo che se bianco = 1 e nero = 0, a partire dall'ultimo ognuno dice un colore (cifra) che compone il numer di cappelli bianchi (tralascio di spiegare percheè ne servono 10, ma a questo punto è banale)
Quando il decimo avrà parlato siamo nella siatazione in cui devono parlare 990 concorrenti, che però sanno quanti tra loro hanno il cappello bianco. A questo punto il 990esimo conta i cappelli bianchi davanti a lui: se ne conta tanti quanto è il numero che è stato "passato " dai primi 10 concorrenti, di sicuro il suo cappello è nero, altrimenti sarà bianco, e quello davanti di conseguenza sa che compreso lui, a questo punto ci deve essere un bianco in meno. Così anche lui saprà quanti nono i cappelli bianchi che ci sono nella fila a partire da lui e rifa gli stessi ragionamenti fatti e così via fino al primo della fila.
Questa soluzione usa il numero
esatto dei cappelli bianchi. Non è necessario averlo, ma più di così non vi dico!