Cómo escribir código que modele la situación descrita en el rompecabezas ‘isleño de ojos azules’

Por lo tanto, no establecí el número de personas de ojos azules en exactamente 100. En cambio, hice que el color de los ojos fuera aleatorio con la posibilidad de que cada persona con ojos azules fuera 1 de cada 10.

vacío estático Main ()
{
var numBlueEyes = 0;
var rand = new Random ();
var numIslanders = 1000;
var isBlueEyed = new bool [numIslanders];
Console.Write (“Información secreta: isleño [s] con ojos azules:”);
para (int i = 0; i <numIslanders; ++ i)
{
// según la definición del problema 1 de cada 10 tiene ojos azules
var blueEyed = rand.Next (10) == 0;
isBlueEyed [i] = blueEyed;
si (blueEyed)
{
++ numBlueEyes;
Console.Write (i + “”);
}
}
// solo una probabilidad de 0.9 ^ numIslanders de que esto suceda, pero en aras de la exhaustividad
if (numBlueEyes == 0)
{
var unluckyGuy = rand.Next (numIslanders);
isBlueEyed [unluckyGuy] = verdadero;
numBlueEyes = 1;
Console.Write (unluckyGuy);
}
Console.WriteLine ();
Console.WriteLine (“Información secreta: Hay {0} {1} ojos azules {2} en esta isla \ n”,
numBlueEyes == 1? “is”: “are”, numBlueEyes, numBlueEyes == 1? “personas gente”);

var numPeopleDied = 0;

// Una vez que todos los ojos azules se hayan ido, el resto sabe que no tienen ojos azules
// Pero no saben si tienen ojos marrones, verdes o morados.
// Nunca tendrán que suicidarse.
for (int day = 1; day <= numIslanders && numPeopleDied <numBlueEyes; ++ day)
{
for (int islander = 0; islander <numIslanders; ++ islander)
{
var numPeopleIslanderSeesWithBlueEyes = isBlueEyed [islander]?
numBlueEyes – 1: numBlueEyes;

if (numPeopleIslanderSeesWithBlueEyes + 1 == día)
{
++ numPeopleDied;
if (numPeopleDied == 1)
{
Console.Write (“Islander [s] muriendo en el día {0}:”, día);
}
Console.Write (“” + isleño);
}
}
}
Console.ReadLine ();
}