module Bet::BetCalculations::Combinatorial
Public Instance Methods
full_cover(prices, opts = {})
click to toggle source
# File lib/bet/bet_calculations/combinatorial.rb, line 37 def full_cover(prices, opts = {}) prices = parse_prices(prices) opts = parse_opts(opts) opts = { min_size: 1 }.merge(opts) num_bets = (opts[:min_size]..prices.length).to_a.map do |n| (1..prices.length).to_a.combination(n).to_a.length end.reduce(:+) winning_prices = if prices.first.is_a?(Array) prices.select{ |_,v| win_place_lose?(v) == :win }.map(&:first) else prices end returns = (opts[:min_size]..winning_prices.length).to_a.map do |n| winning_prices.combination(n).map do |multis| acca(multis, stake: opts[:stake])[:returns] end.reduce(:+) end.reduce(:+) outlay = num_bets * opts[:stake] profit = returns - outlay { returns: returns, profit: profit, outlay: outlay } end