Celtics season tickets

A buddy of mine and I are splitting season tickets for the re-vamped Boston Celtics in 2007-2008. What’s the best way to equitably split the games? I turn to Ruby…

require 'date'
require 'time'

class Ticket
  def initialize(date, opponent, quality)
    @date     = date
    @opponent = opponent
    @quality  = quality
  end
  
  attr_accessor :date, :opponent, :quality
  
  def to_s
    @date.strftime("%A, %B %d") + " ~ " + @opponent + " (#{@quality})"
  end
  
end

celtics_home_games = []
set_one = []
set_two = []

celtics_home_games << Ticket.new(DateTime.new(2007, 11, 2), "Washington Wizards", 3)
celtics_home_games << Ticket.new(DateTime.new(2007, 11, 7), "Denver Nuggets", 3)
celtics_home_games << Ticket.new(DateTime.new(2007, 11, 9), "Atlanta Hawks", 1)
celtics_home_games << Ticket.new(DateTime.new(2007, 11, 14), "New Jersey Nets", 2)
celtics_home_games << Ticket.new(DateTime.new(2007, 11, 16), "Miami Heat", 3)
celtics_home_games << Ticket.new(DateTime.new(2007, 11, 21), "Golden State Warriors", 3)
celtics_home_games << Ticket.new(DateTime.new(2007, 11, 23), "Los Angeles Lakers", 3)
celtics_home_games << Ticket.new(DateTime.new(2007, 11, 29), "New York Knicks", 1)
celtics_home_games << Ticket.new(DateTime.new(2007, 12, 2), "Cleveland Cavaliers", 3)
celtics_home_games << Ticket.new(DateTime.new(2007, 12, 7), "Toronto Raptors", 2)
celtics_home_games << Ticket.new(DateTime.new(2007, 12, 12), "Sacremento Kings", 2)
celtics_home_games << Ticket.new(DateTime.new(2007, 12, 14), "Milwaukee Bucks", 1)
celtics_home_games << Ticket.new(DateTime.new(2007, 12, 19), "Detroit Pistons", 3)
celtics_home_games << Ticket.new(DateTime.new(2007, 12, 21), "Chicago Bulls", 3)
celtics_home_games << Ticket.new(DateTime.new(2007, 12, 23), "Orlando Magic", 2)
celtics_home_games << Ticket.new(DateTime.new(2008, 1, 2), "Houston Rockets", 3)
celtics_home_games << Ticket.new(DateTime.new(2008, 1, 4), "Memphis Grizzlies", 1)
celtics_home_games << Ticket.new(DateTime.new(2008, 1, 9), "Charlotte Bobcats", 1)
celtics_home_games << Ticket.new(DateTime.new(2008, 1, 14), "Washington Wizards", 2)
celtics_home_games << Ticket.new(DateTime.new(2008, 1, 16), "Portland Trailblazers", 3)
celtics_home_games << Ticket.new(DateTime.new(2008, 1, 18), "Philadelphia 76ers", 1)
celtics_home_games << Ticket.new(DateTime.new(2008, 1, 23), "Toronto Raptors", 2)
celtics_home_games << Ticket.new(DateTime.new(2008, 1, 25), "Minnesota Timberwolves", 2)
celtics_home_games << Ticket.new(DateTime.new(2008, 1, 31), "Dallas Mavericks", 3)
celtics_home_games << Ticket.new(DateTime.new(2008, 2, 6), "Los Angeles Clippers", 2)
celtics_home_games << Ticket.new(DateTime.new(2008, 2, 10), "San Antonio Spurs", 3)
celtics_home_games << Ticket.new(DateTime.new(2008, 2, 13), "New York Knicks", 1)
celtics_home_games << Ticket.new(DateTime.new(2008, 2, 27), "Cleveland Cavaliers", 3)
celtics_home_games << Ticket.new(DateTime.new(2008, 2, 29), "Charlotte Bobcats", 1)
celtics_home_games << Ticket.new(DateTime.new(2008, 3, 2), "Atlanta Hawks", 1)
celtics_home_games << Ticket.new(DateTime.new(2008, 3, 5), "Detroit Pistons", 3)
celtics_home_games << Ticket.new(DateTime.new(2008, 3, 7), "Chicago Bulls", 3)
celtics_home_games << Ticket.new(DateTime.new(2008, 3, 12), "Seattle Supersonics", 3)
celtics_home_games << Ticket.new(DateTime.new(2008, 3, 14), "Utah Jazz", 2)
celtics_home_games << Ticket.new(DateTime.new(2008, 3, 24), "Philadelphia 76ers", 1)
celtics_home_games << Ticket.new(DateTime.new(2008, 3, 26), "Phoenix Suns", 3)
celtics_home_games << Ticket.new(DateTime.new(2008, 3, 28), "New Orleans Hornets", 2)
celtics_home_games << Ticket.new(DateTime.new(2008, 3, 30), "Miami Heat", 3)
celtics_home_games << Ticket.new(DateTime.new(2008, 4, 2), "Indiana Pacers", 1)
celtics_home_games << Ticket.new(DateTime.new(2008, 4, 11), "Milwaukee Bucks", 1)
celtics_home_games << Ticket.new(DateTime.new(2008, 4, 16), "New Jersey Nets", 3)

puts "Number of 3's ~ " + celtics_home_games.select { |g| g.quality == 3 }.size.to_s
puts "Number of 2's ~ " + celtics_home_games.select { |g| g.quality == 2 }.size.to_s
puts "Number of 1's ~ " + celtics_home_games.select { |g| g.quality == 1 }.size.to_s

opening_night = celtics_home_games[0]

(celtics_home_games - [opening_night]).sort_by { |g| [g.quality, g.date] }.each_with_index do |game, index| 
  if index % 2 == 0
    set_one << game
  else
    set_two << game
  end
end

puts "\nShared game ~ " + opening_night.to_s

puts "\nSet 1 ~"
set_one.sort_by { |g| g.date }.each { |g| puts g }

puts "\nSet 2 ~"
set_two.sort_by { |g| g.date }.each { |g| puts g }

And the results:

Number of 3’s ~ 19
Number of 2’s ~ 10
Number of 1’s ~ 12

Shared game ~ Friday, November 02 ~ Washington Wizards (3)

Set 1 ~
Wednesday, November 07 ~ Denver Nuggets (3)
Friday, November 09 ~ Atlanta Hawks (1)
Wednesday, November 14 ~ New Jersey Nets (2)
Wednesday, November 21 ~ Golden State Warriors (3)
Sunday, December 02 ~ Cleveland Cavaliers (3)
Wednesday, December 12 ~ Sacremento Kings (2)
Friday, December 14 ~ Milwaukee Bucks (1)
Friday, December 21 ~ Chicago Bulls (3)
Wednesday, January 09 ~ Charlotte Bobcats (1)
Monday, January 14 ~ Washington Wizards (2)
Wednesday, January 16 ~ Portland Trailblazers (3)
Friday, January 25 ~ Minnesota Timberwolves (2)
Sunday, February 10 ~ San Antonio Spurs (3)
Wednesday, February 13 ~ New York Knicks (1)
Sunday, March 02 ~ Atlanta Hawks (1)
Wednesday, March 05 ~ Detroit Pistons (3)
Wednesday, March 12 ~ Seattle Supersonics (3)
Friday, March 14 ~ Utah Jazz (2)
Sunday, March 30 ~ Miami Heat (3)
Wednesday, April 02 ~ Indiana Pacers (1)

Set 2 ~
Friday, November 16 ~ Miami Heat (3)
Friday, November 23 ~ Los Angeles Lakers (3)
Thursday, November 29 ~ New York Knicks (1)
Friday, December 07 ~ Toronto Raptors (2)
Wednesday, December 19 ~ Detroit Pistons (3)
Sunday, December 23 ~ Orlando Magic (2)
Wednesday, January 02 ~ Houston Rockets (3)
Friday, January 04 ~ Memphis Grizzlies (1)
Friday, January 18 ~ Philadelphia 76ers (1)
Wednesday, January 23 ~ Toronto Raptors (2)
Thursday, January 31 ~ Dallas Mavericks (3)
Wednesday, February 06 ~ Los Angeles Clippers (2)
Wednesday, February 27 ~ Cleveland Cavaliers (3)
Friday, February 29 ~ Charlotte Bobcats (1)
Friday, March 07 ~ Chicago Bulls (3)
Monday, March 24 ~ Philadelphia 76ers (1)
Wednesday, March 26 ~ Phoenix Suns (3)
Friday, March 28 ~ New Orleans Hornets (2)
Friday, April 11 ~ Milwaukee Bucks (1)
Wednesday, April 16 ~ New Jersey Nets (3)

We’ll have to trade a Philly game for an Atlanta game, but overall, pretty good for an hour’s work while watching South Park and The Daily Show…