Сегодня долго спорили с Димкой про парадокс Монти Хола . Было решено написать программку.
Вот она на руби:
def game options = {:size => 10000, :with_change => true}
times_i_won = 0
options[:size].times do |index|
boxes = [:keys, :cabbage, :cabbage].sort_by { rand }
what_i_pick = boxes[rand(3)]
if options[:with_change]
times_i_won += 1 if what_i_pick == :cabbage
else
times_i_won += 1 if what_i_pick == :keys
end
end
times_i_won
end
size = 10000
puts "with change #{game :size => size, :with_change => true} times I won"
puts "without change #{game :size => size, :with_change => false} times I won"
output
with change 6692 times I won
without change 3310 times I won
Вот она на Java от Димы:
package dmitrygusev;
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random winGenerator = new Random();
Random shotGenerator = new Random();
int losses = 0;
int wins = 0;
for (int n = 0; n < 10000; n++) {
int win = winGenerator.nextInt(3);
for (int i = 0; i < 3; i++) {
System.out.print((win == i ? 1 : 0) + "\t");
}
int shot = shotGenerator.nextInt(3);
System.out.print("shot = " + shot + "\t");
if (win == shot) {
losses++;
System.out.println("Loss");
} else {
wins++;
System.out.println("Win");
}
}
System.out.println("Losses = " + losses);
System.out.println("Wins = " + wins);
}
}
output
...
0 0 1 shot = 0 Win
0 0 1 shot = 0 Win
0 0 1 shot = 1 Win
0 1 0 shot = 0 Win
Losses = 3316
Wins = 6684
0 comments:
Post a Comment