Skip to content

Instantly share code, notes, and snippets.

@robertsosinski
Created January 4, 2017 22:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save robertsosinski/6c48a113ca222fe1fde5b41e4ad8cfe8 to your computer and use it in GitHub Desktop.
Save robertsosinski/6c48a113ca222fe1fde5b41e4ad8cfe8 to your computer and use it in GitHub Desktop.
Dice Rolling
$odds = 0
def sumProbability(dice, target)
if dice == 1
"1 / 6"
else
prob = 6 ** dice
total = 6 * dice
if target < dice
"0"
elsif target > total
"0"
else
perform_roll(dice, [], target) / prob
"#{$odds} / #{prob}"
end
end
end
def perform_roll(rolls_left, acc, target)
if rolls_left == 0
sum = acc.inject(0) {|i, m| i + m}
yes = sum == target
puts("#{acc.inspect} : #{target} = #{yes} : #{$odds}")
if sum == target
$odds += 1
end
else
6.times do |i|
perform_roll(rolls_left - 1, acc + [i + 1], target)
end
end
end
#sumProbability(1,5) = 1/6
#sumProbability(2,2) = 1/36
#sumProbability(2,4) = (2, 2)*1, (1, 3)*2 = 3/36
#sumProbability(3,5) = (1,1,3)*3, (1,2,2)*3 = 6/216
puts sumProbability(3, 5)
[1, 1, 1] : 5 = false : 0
[1, 1, 2] : 5 = false : 0
[1, 1, 3] : 5 = true : 0
[1, 1, 4] : 5 = false : 1
[1, 1, 5] : 5 = false : 1
[1, 1, 6] : 5 = false : 1
[1, 2, 1] : 5 = false : 1
[1, 2, 2] : 5 = true : 1
[1, 2, 3] : 5 = false : 2
[1, 2, 4] : 5 = false : 2
[1, 2, 5] : 5 = false : 2
[1, 2, 6] : 5 = false : 2
[1, 3, 1] : 5 = true : 2
[1, 3, 2] : 5 = false : 3
[1, 3, 3] : 5 = false : 3
[1, 3, 4] : 5 = false : 3
[1, 3, 5] : 5 = false : 3
[1, 3, 6] : 5 = false : 3
[1, 4, 1] : 5 = false : 3
[1, 4, 2] : 5 = false : 3
[1, 4, 3] : 5 = false : 3
[1, 4, 4] : 5 = false : 3
[1, 4, 5] : 5 = false : 3
[1, 4, 6] : 5 = false : 3
[1, 5, 1] : 5 = false : 3
[1, 5, 2] : 5 = false : 3
[1, 5, 3] : 5 = false : 3
[1, 5, 4] : 5 = false : 3
[1, 5, 5] : 5 = false : 3
[1, 5, 6] : 5 = false : 3
[1, 6, 1] : 5 = false : 3
[1, 6, 2] : 5 = false : 3
[1, 6, 3] : 5 = false : 3
[1, 6, 4] : 5 = false : 3
[1, 6, 5] : 5 = false : 3
[1, 6, 6] : 5 = false : 3
[2, 1, 1] : 5 = false : 3
[2, 1, 2] : 5 = true : 3
[2, 1, 3] : 5 = false : 4
[2, 1, 4] : 5 = false : 4
[2, 1, 5] : 5 = false : 4
[2, 1, 6] : 5 = false : 4
[2, 2, 1] : 5 = true : 4
[2, 2, 2] : 5 = false : 5
[2, 2, 3] : 5 = false : 5
[2, 2, 4] : 5 = false : 5
[2, 2, 5] : 5 = false : 5
[2, 2, 6] : 5 = false : 5
[2, 3, 1] : 5 = false : 5
[2, 3, 2] : 5 = false : 5
[2, 3, 3] : 5 = false : 5
[2, 3, 4] : 5 = false : 5
[2, 3, 5] : 5 = false : 5
[2, 3, 6] : 5 = false : 5
[2, 4, 1] : 5 = false : 5
[2, 4, 2] : 5 = false : 5
[2, 4, 3] : 5 = false : 5
[2, 4, 4] : 5 = false : 5
[2, 4, 5] : 5 = false : 5
[2, 4, 6] : 5 = false : 5
[2, 5, 1] : 5 = false : 5
[2, 5, 2] : 5 = false : 5
[2, 5, 3] : 5 = false : 5
[2, 5, 4] : 5 = false : 5
[2, 5, 5] : 5 = false : 5
[2, 5, 6] : 5 = false : 5
[2, 6, 1] : 5 = false : 5
[2, 6, 2] : 5 = false : 5
[2, 6, 3] : 5 = false : 5
[2, 6, 4] : 5 = false : 5
[2, 6, 5] : 5 = false : 5
[2, 6, 6] : 5 = false : 5
[3, 1, 1] : 5 = true : 5
[3, 1, 2] : 5 = false : 6
[3, 1, 3] : 5 = false : 6
[3, 1, 4] : 5 = false : 6
[3, 1, 5] : 5 = false : 6
[3, 1, 6] : 5 = false : 6
[3, 2, 1] : 5 = false : 6
[3, 2, 2] : 5 = false : 6
[3, 2, 3] : 5 = false : 6
[3, 2, 4] : 5 = false : 6
[3, 2, 5] : 5 = false : 6
[3, 2, 6] : 5 = false : 6
[3, 3, 1] : 5 = false : 6
[3, 3, 2] : 5 = false : 6
[3, 3, 3] : 5 = false : 6
[3, 3, 4] : 5 = false : 6
[3, 3, 5] : 5 = false : 6
[3, 3, 6] : 5 = false : 6
[3, 4, 1] : 5 = false : 6
[3, 4, 2] : 5 = false : 6
[3, 4, 3] : 5 = false : 6
[3, 4, 4] : 5 = false : 6
[3, 4, 5] : 5 = false : 6
[3, 4, 6] : 5 = false : 6
[3, 5, 1] : 5 = false : 6
[3, 5, 2] : 5 = false : 6
[3, 5, 3] : 5 = false : 6
[3, 5, 4] : 5 = false : 6
[3, 5, 5] : 5 = false : 6
[3, 5, 6] : 5 = false : 6
[3, 6, 1] : 5 = false : 6
[3, 6, 2] : 5 = false : 6
[3, 6, 3] : 5 = false : 6
[3, 6, 4] : 5 = false : 6
[3, 6, 5] : 5 = false : 6
[3, 6, 6] : 5 = false : 6
[4, 1, 1] : 5 = false : 6
[4, 1, 2] : 5 = false : 6
[4, 1, 3] : 5 = false : 6
[4, 1, 4] : 5 = false : 6
[4, 1, 5] : 5 = false : 6
[4, 1, 6] : 5 = false : 6
[4, 2, 1] : 5 = false : 6
[4, 2, 2] : 5 = false : 6
[4, 2, 3] : 5 = false : 6
[4, 2, 4] : 5 = false : 6
[4, 2, 5] : 5 = false : 6
[4, 2, 6] : 5 = false : 6
[4, 3, 1] : 5 = false : 6
[4, 3, 2] : 5 = false : 6
[4, 3, 3] : 5 = false : 6
[4, 3, 4] : 5 = false : 6
[4, 3, 5] : 5 = false : 6
[4, 3, 6] : 5 = false : 6
[4, 4, 1] : 5 = false : 6
[4, 4, 2] : 5 = false : 6
[4, 4, 3] : 5 = false : 6
[4, 4, 4] : 5 = false : 6
[4, 4, 5] : 5 = false : 6
[4, 4, 6] : 5 = false : 6
[4, 5, 1] : 5 = false : 6
[4, 5, 2] : 5 = false : 6
[4, 5, 3] : 5 = false : 6
[4, 5, 4] : 5 = false : 6
[4, 5, 5] : 5 = false : 6
[4, 5, 6] : 5 = false : 6
[4, 6, 1] : 5 = false : 6
[4, 6, 2] : 5 = false : 6
[4, 6, 3] : 5 = false : 6
[4, 6, 4] : 5 = false : 6
[4, 6, 5] : 5 = false : 6
[4, 6, 6] : 5 = false : 6
[5, 1, 1] : 5 = false : 6
[5, 1, 2] : 5 = false : 6
[5, 1, 3] : 5 = false : 6
[5, 1, 4] : 5 = false : 6
[5, 1, 5] : 5 = false : 6
[5, 1, 6] : 5 = false : 6
[5, 2, 1] : 5 = false : 6
[5, 2, 2] : 5 = false : 6
[5, 2, 3] : 5 = false : 6
[5, 2, 4] : 5 = false : 6
[5, 2, 5] : 5 = false : 6
[5, 2, 6] : 5 = false : 6
[5, 3, 1] : 5 = false : 6
[5, 3, 2] : 5 = false : 6
[5, 3, 3] : 5 = false : 6
[5, 3, 4] : 5 = false : 6
[5, 3, 5] : 5 = false : 6
[5, 3, 6] : 5 = false : 6
[5, 4, 1] : 5 = false : 6
[5, 4, 2] : 5 = false : 6
[5, 4, 3] : 5 = false : 6
[5, 4, 4] : 5 = false : 6
[5, 4, 5] : 5 = false : 6
[5, 4, 6] : 5 = false : 6
[5, 5, 1] : 5 = false : 6
[5, 5, 2] : 5 = false : 6
[5, 5, 3] : 5 = false : 6
[5, 5, 4] : 5 = false : 6
[5, 5, 5] : 5 = false : 6
[5, 5, 6] : 5 = false : 6
[5, 6, 1] : 5 = false : 6
[5, 6, 2] : 5 = false : 6
[5, 6, 3] : 5 = false : 6
[5, 6, 4] : 5 = false : 6
[5, 6, 5] : 5 = false : 6
[5, 6, 6] : 5 = false : 6
[6, 1, 1] : 5 = false : 6
[6, 1, 2] : 5 = false : 6
[6, 1, 3] : 5 = false : 6
[6, 1, 4] : 5 = false : 6
[6, 1, 5] : 5 = false : 6
[6, 1, 6] : 5 = false : 6
[6, 2, 1] : 5 = false : 6
[6, 2, 2] : 5 = false : 6
[6, 2, 3] : 5 = false : 6
[6, 2, 4] : 5 = false : 6
[6, 2, 5] : 5 = false : 6
[6, 2, 6] : 5 = false : 6
[6, 3, 1] : 5 = false : 6
[6, 3, 2] : 5 = false : 6
[6, 3, 3] : 5 = false : 6
[6, 3, 4] : 5 = false : 6
[6, 3, 5] : 5 = false : 6
[6, 3, 6] : 5 = false : 6
[6, 4, 1] : 5 = false : 6
[6, 4, 2] : 5 = false : 6
[6, 4, 3] : 5 = false : 6
[6, 4, 4] : 5 = false : 6
[6, 4, 5] : 5 = false : 6
[6, 4, 6] : 5 = false : 6
[6, 5, 1] : 5 = false : 6
[6, 5, 2] : 5 = false : 6
[6, 5, 3] : 5 = false : 6
[6, 5, 4] : 5 = false : 6
[6, 5, 5] : 5 = false : 6
[6, 5, 6] : 5 = false : 6
[6, 6, 1] : 5 = false : 6
[6, 6, 2] : 5 = false : 6
[6, 6, 3] : 5 = false : 6
[6, 6, 4] : 5 = false : 6
[6, 6, 5] : 5 = false : 6
[6, 6, 6] : 5 = false : 6
6 / 216
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment