Advertisement
Guest User

Untitled

a guest
May 30th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.66 KB | None | 0 0
  1. WINNERS = 0.upto(36).to_h { |n| [n, []] }
  2. AVAILABLE_BETS = []
  3.  
  4.  
  5. red = [32,19,21,25,34,27,36,30,23,5,16,1,14,9,18,7,12,3];
  6. # WINNERS = Array.new(37) { [] }
  7. #column1, column2, column3,
  8. [1,2,3].each do |id|
  9.   (id..36).step(3) {|number|
  10.     WINNERS[number] << "column#{id}"
  11.   }
  12. end
  13.  
  14. # the splits between 2 numbers (0 only does topline)
  15. 1.upto(35).each do |number|
  16.   #to the top
  17.   if number % 3 > 0
  18.     identifier = "split#{number}_#{number+1}"
  19.     WINNERS[number]   << identifier
  20.     WINNERS[number+1] << identifier
  21.   end
  22.   # to the right
  23.   if number+3 <= 36
  24.     identifier = "split#{number}_#{number+3}"
  25.     WINNERS[number]   << identifier
  26.     WINNERS[number+3] << identifier
  27.   end
  28. end
  29. # betting on top of the field will cover the whole row
  30. (1..36).step(3).each do |num|
  31.   identifier = "street#{num}"
  32.   WINNERS[num]   << identifier
  33.   WINNERS[num+1] << identifier
  34.   WINNERS[num+2] << identifier
  35. end
  36.  
  37. #sixlines
  38. (1..31).step(3).each do |num|
  39.   6.times {|i|  WINNERS[num+i] << "sixline#{num}"}
  40. end
  41.  
  42. # making the corners, all 4 fields
  43. [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|
  44.   identifier = "corner#{number}"
  45.   WINNERS[number] << identifier
  46.   WINNERS[number+1] << identifier
  47.   WINNERS[number+3] << identifier
  48.   WINNERS[number+4] << identifier
  49. end
  50. [0,1,2,3].each do |num|
  51.   WINNERS[num] << "top_line"
  52. end
  53.  
  54. # straight, dozens red/black high/low and even/odd
  55. WINNERS[0] << "straight0"
  56. (1..36).each do |num|
  57.   WINNERS[num] << "straight#{num}"
  58.   WINNERS[num] << "dozen#{( num / 12.0).ceil}"
  59.   WINNERS[num] << (num.odd? ? "odd" : "even")
  60.   WINNERS[num] << ((num > 18) ? "high" : "low")
  61.   WINNERS[num] << (red.include?(num) ?  "red" : "black")
  62. end
  63.  
  64.  
  65.  
  66. AVAILABLE_BETS = WINNERS.collect{|i, v| v.flatten}.flatten.sort.uniq
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74. class Profit
  75.  
  76.   def self.calculate(bets, winning_number)
  77.     total = 0
  78.     winning_bets = WINNERS[winning_number]
  79.     #find which of our bets won
  80.     winners = bets.collect{|k,_v| winning_bets.include?(k.to_s) ? k : nil }.compact
  81.     winners.collect{|name, amount| payout(name) * bets[name] }.sum    
  82.   end
  83.  
  84.   def self.payout(bet_name)
  85.     bet_name = bet_name.to_s
  86.     return 2 if ["even", "odd", "high", "low", "red", "black"].include?(bet_name)
  87.     return 3 if bet_name.starts_with?("dozen")
  88.     return 3 if bet_name.starts_with?("column")
  89.     return 6 if bet_name.starts_with?("sixline")
  90.     return 8 if bet_name.starts_with?("corner") || bet_name == "top_line"
  91.     return 12 if bet_name.starts_with?("street")
  92.     return 17 if bet_name.starts_with?("split")
  93.     return 36 if bet_name.starts_with?("straight")
  94.  
  95.     raise "unknown bet #{bet_name}"
  96.   end
  97.  
  98. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement