W nawiązaniu do zagadki: http://www.rozgrywka.pl/content/view/26/5/
Chciałem napisać symulacje rozwiązania 1 (Studniówka). Według autora tekstu, średni czas wyjścia z więzienia to 260 lat. W mojej symulacji doszli już do ponad 12 mln lat i dalej siedzą. Gdzieś popełniłem błąd?
PS. mój pierwszy kod w Scali, za wszelkie uwagi co do jego konstrukcji będę wdzięczny.
object Prisoners {
def run() {
var day = 0;
var prisoners = ArrayBuffer.fill(100)(0)
var lampOff = true
while(true) {
day += 1
var choosen = Math.abs(Random.nextInt() % 100);
if (day % 100 == 0) {
if (lampOff && prisoners(choosen) == 0) {
println("Koniec. Dzień: " + day)
return
}
else {
var present = 0
prisoners.foreach(present += _)
var absent = 100 - present
prisoners = ArrayBuffer.fill(100)(0)
lampOff = true
println("Niestety. Dni: " + day + " Byli: " + present + " Nie byli: " + absent)
}
}
else {
if (lampOff && prisoners(choosen) == 1) {
lampOff = false
}
else {
prisoners(choosen) = 1
}
}
}
}
}