Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- WINNERS = 0.upto(36).to_h { |n| [n, []] }
- AVAILABLE_BETS = []
- red = [32,19,21,25,34,27,36,30,23,5,16,1,14,9,18,7,12,3];
- # WINNERS = Array.new(37) { [] }
- #column1, column2, column3,
- [1,2,3].each do |id|
- (id..36).step(3) {|number|
- WINNERS[number] << "column#{id}"
- }
- end
- # the splits between 2 numbers (0 only does topline)
- 1.upto(35).each do |number|
- #to the top
- if number % 3 > 0
- identifier = "split#{number}_#{number+1}"
- WINNERS[number] << identifier
- WINNERS[number+1] << identifier
- end
- # to the right
- if number+3 <= 36
- identifier = "split#{number}_#{number+3}"
- WINNERS[number] << identifier
- WINNERS[number+3] << identifier
- end
- end
- # betting on top of the field will cover the whole row
- (1..36).step(3).each do |num|
- identifier = "street#{num}"
- WINNERS[num] << identifier
- WINNERS[num+1] << identifier
- WINNERS[num+2] << identifier
- end
- #sixlines
- (1..31).step(3).each do |num|
- 6.times {|i| WINNERS[num+i] << "sixline#{num}"}
- end
- # making the corners, all 4 fields
- [1,2, 4,5, 7,8, 10,11, 13,14, 16,17, 19,20, 22,23, 25,26, 28,29, 31,32].each do |number|
- identifier = "corner#{number}"
- WINNERS[number] << identifier
- WINNERS[number+1] << identifier
- WINNERS[number+3] << identifier
- WINNERS[number+4] << identifier
- end
- [0,1,2,3].each do |num|
- WINNERS[num] << "top_line"
- end
- # straight, dozens red/black high/low and even/odd
- WINNERS[0] << "straight0"
- (1..36).each do |num|
- WINNERS[num] << "straight#{num}"
- WINNERS[num] << "dozen#{( num / 12.0).ceil}"
- WINNERS[num] << (num.odd? ? "odd" : "even")
- WINNERS[num] << ((num > 18) ? "high" : "low")
- WINNERS[num] << (red.include?(num) ? "red" : "black")
- end
- AVAILABLE_BETS = WINNERS.collect{|i, v| v.flatten}.flatten.sort.uniq
- class Profit
- def self.calculate(bets, winning_number)
- total = 0
- winning_bets = WINNERS[winning_number]
- #find which of our bets won
- winners = bets.collect{|k,_v| winning_bets.include?(k.to_s) ? k : nil }.compact
- winners.collect{|name, amount| payout(name) * bets[name] }.sum
- end
- def self.payout(bet_name)
- bet_name = bet_name.to_s
- return 2 if ["even", "odd", "high", "low", "red", "black"].include?(bet_name)
- return 3 if bet_name.starts_with?("dozen")
- return 3 if bet_name.starts_with?("column")
- return 6 if bet_name.starts_with?("sixline")
- return 8 if bet_name.starts_with?("corner") || bet_name == "top_line"
- return 12 if bet_name.starts_with?("street")
- return 17 if bet_name.starts_with?("split")
- return 36 if bet_name.starts_with?("straight")
- raise "unknown bet #{bet_name}"
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement