#!/usr/bin/env ruby

def step(barrels, slaves, n_parts)
  hit = barrels / n_parts
  miss = barrels - ((barrels / [slaves, n_parts].min))
  return [{ barrels: hit, slaves: slaves - 1 },
          { barrels: miss, slaves: slaves }]
end

results = { 0 => [{ barrels: 250, slaves: 4, steps: [] }] }
(1..3).each do |step|
  results[step] = []
  results[step - 1].each do |res|
    (2..10).each do |n|
      hit, miss = step(res[:barrels], res[:slaves], n)
      steps = [*res[:steps], n]
      hit[:steps] = steps
      miss[:steps] = steps
      results[step] << hit
      results[step] << miss
    end
  end
end

results[3].sort_by { |r| r[:steps] }.each_slice(8) { |res| p res if res.map { |r| r[:barrels] }.inject(:+) <= 8 }