IntList drawers = new IntList(); int trials = 100000; int succes_count; void setup() { for (int i = 0; i < 100; i++) { drawers.append(i); } println(trials + " trials\n"); //Random strategy println("Random strategy"); succes_count = trials; for (int i = 0; i < trials; i++) { drawers.shuffle(); for (int prisoner = 0; prisoner < 100; prisoner++) { boolean found = false; for (int attempt = 0; attempt < 50; attempt++) { if (drawers.get(int(random(drawers.size()))) == prisoner) { found = true; break; } } if (!found) { succes_count--; break; } } } println(" Succeses: " + succes_count); println(" Succes rate: " + 100.0 * succes_count / trials + "%\n"); //Optimal strategy println("Optimal strategy"); succes_count = trials; for (int i = 0; i < trials; i++) { drawers.shuffle(); for (int prisoner = 0; prisoner < 100; prisoner++) { boolean found = false; int next = prisoner; for (int attempt = 0; attempt < 50; attempt++) { next = drawers.get(next); if (next == prisoner) { found = true; break; } } if (!found) { succes_count--; break; } } } println(" Succeses: " + succes_count); print(" Succes rate: " + 100.0 * succes_count / trials + "%"); }