```# Game description (from Bell's Board & Table Games from Many Civilizations):

# "Any  number of  players may  play  and each  throws the  die in  turn.
# The  player with  the lowest  throw begins  the game  and the  one with
# the highest  plays last.   The opening  player throws  the die  as many
# times  as he  wishes, each  time adding  the number  on the  upper face
# of the die to his score. If he throws an ace, however, he loses all the
# points for that  turn, and has to  pass the die on to  the next player.
# He  may  stop throwing  at  any  time and  hand  the  die on,  when  he
# keeps the points  scored in that turn  and adds it to  his total score.
# The first  player to  reach 100  points wins.  In succeeding  games the
# advantage of  an early throw is  decided afresh by each  player casting
# the die, lowest starting and the highest being last."

verbose = true

function pig(players)
n = length(players)
scores = zeros(Int, n)
while true
for i in 1:n
j = 1
score = 0
while true
if scores[i] + score >= 100 || !players[i](scores, i, j, score)
verbose && println("Player \$i passes")
break
end
k = rand(1:6)
verbose && println("Player \$i throws \$k")
if k == 1
score = 0
verbose && println("=> Zero!")
break
end
score += k
j += 1
end
scores[i] += score
verbose && score != 0 && println("  Earned \$score points => \$(scores[i])")
if scores[i] >= 100
verbose && println("Final scores: \$scores - Player \$i wins")
return i
end
end
end
end

function test_players(players, iterations)
global verbose
old_verbose = verbose
verbose = false

scores = zeros(length(players))
for i in 1:iterations
j = pig(players)
scores[j] += 1
end

verbose = true
scores /= iterations
end

# player(scores, i, j, current)
# - scores : an array of the total scores of all players
# -    i   : the index of this player
# -    j   : the number of this throw (in the current turn)
# - current: the accumulated score in the current turn

fivetimes(scores, i, j, current) = j <= 5
sixtimes(scores, i, j, current)  = j <= 6
twentier(scores, i, j, current)  = current < 20
twentyfourer(scores, i, j, current) = current < 24

function fighter(scores, i, j, current)
for k in 1:length(scores)
k != i && scores[k] > 75 && return j < 10
end
current < 24
end
```