Saucy, Ruby
def saucy(total_degrees, degrees_left, total_people, people_left)
current_winner_path = './data/saucy_current_winner'
previous_cake_path = './data/saucy_previous_cake'
first_move = (total_people == people_left)
current_winner = first_move ? 0 : File.read(current_winner_path).to_i
previous_cake = first_move ? total_degrees : File.read(previous_cake_path).to_i
last_slice = previous_cake - degrees_left
current_winner = [current_winner, last_slice].max
File.open(previous_cake_path, 'w') { |f| f.puts(degrees_left) }
File.open(current_winner_path, 'w'){ |f| f.puts(current_winner) }
if first_move
degrees_left
else
average_left = degrees_left.fdiv(people_left).ceil
beats_past_players = current_winner + 1
beats_future_players = degrees_left/2 - people_left**2
[average_left, beats_past_players, beats_future_players].max
end
end
p saucy(*ARGV.map(&:to_i))
Saucy is willing to accept slightly less than half of the remaining cake, so long as it's more than anyone else has gotten or is likely to get (based on secret sauce).