/* To begin or not to begin in Picat. https://brainstellar.com/puzzles/probability/1002 """ A & B are alternately picking balls from a bag without replacement. The bag has k black balls and 1 red ball. Winner is the one who picks the red ball. Who is more likely to win, the on who starts first, or second? Answer: Begin! Solution: ... Hence, doesnt matter who starts first when k is odd. The first player has higher chance of winning when k is even """ For odd k: 1/2 For even k: starter wins with p = (k div 2)+1 / (k+1) Cf my Gamble model gamble_to_begin_or_not_to_begin.rkt This program was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import ppl_distributions, ppl_utils. import util. main => go. /* k = 1 var : winner Probabilities: 1: 0.5030000000000000 0: 0.4970000000000000 mean = 0.503 k = 2 var : winner Probabilities: 0: 0.6643000000000000 1: 0.3357000000000000 mean = 0.3357 k = 3 var : winner Probabilities: 0: 0.5031000000000000 1: 0.4969000000000000 mean = 0.4969 k = 4 var : winner Probabilities: 0: 0.5944000000000000 1: 0.4056000000000000 mean = 0.4056 k = 5 var : winner Probabilities: 1: 0.5000000000000000 0: 0.5000000000000000 mean = 0.5 k = 6 var : winner Probabilities: 0: 0.5769000000000000 1: 0.4231000000000000 mean = 0.4231 k = 7 var : winner Probabilities: 1: 0.5007000000000000 0: 0.4993000000000000 mean = 0.5007 k = 8 var : winner Probabilities: 0: 0.5578000000000000 1: 0.4422000000000000 mean = 0.4422 k = 9 var : winner Probabilities: 0: 0.5004999999999999 1: 0.4995000000000000 mean = 0.4995 k = 10 var : winner Probabilities: 0: 0.5495000000000000 1: 0.4505000000000000 mean = 0.4505 */ go ?=> member(K,1..10), println(k=K), reset_store, run_model(10_000,$model(K),[show_probs_trunc,mean]), nl, % show_store_lengths,nl, fail, nl. go => true. f(A,I) = Res => if A.first == red then Res = I else Res = f(A.tail,I+1) end. model(K) => Balls = ones(K,black) ++ [red], S = draw_without_replacement(Balls), A = f(S,0), Winner = A mod 2, % add("a",A), add("winner",Winner).