Project

rrschedule

0.01
No commit activity in last 3 years
No release in over 3 years
RRSchedule helps you create round-robin schedules
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

~> 1.11
~> 10.0
 Project Readme

RRSchedule

RRSchedule makes it easier to generate round-robin schedules for sport leagues.

It takes into consideration the number of available playing surfaces and game times and split games into gamedays that respect these contraints.

Installation

gem install rrschedule
require 'rrschedule'

Prepare the schedule

schedule=RRSchedule::Schedule.new(
  #array of teams that will compete against each other. If you group teams into multiple flights (divisions),
  #a separate round-robin is generated in each of them but the "physical constraints" are shared
  :teams => [
    %w(A1 A2 A3 A4 A5 A6 A7 A8),
    %w(B1 B2 B3 B4 B5 B6 B7 B8)
  ],

  #Setup some scheduling rules
  :rules => [
    RRSchedule::Rule.new(:wday => 3, :gt => ["7:00PM","9:00PM"], :ps => ["field #1", "field #2"]),
    RRSchedule::Rule.new(:wday => 5, :gt => ["7:00PM"], :ps => ["field #1"])
  ],
      
  #First games are played on...
  :start_date => Date.parse("2010/10/13"),
  
  #array of dates to exclude
  :exclude_dates => [Date.parse("2010/11/24"),Date.parse("2010/12/15")],
                    
  #Number of times each team must play against each other (default is 1)
  :cycles => 1,
   
  #Shuffle team order before each cycle. Default is true
  :shuffle => true
)

Generate the schedule

schedule.generate

Playing with the output

human readable schedule

puts schedule.to_s

Iterate through schedule

schedule.gamedays.each do |gd|
  puts gd.date.strftime("%Y/%m/%d")
  puts "===================="
  gd.games.each do |g|
    puts g.team_a.to_s + " Vs " + g.team_b.to_s + " on playing surface ##{g.playing_surface} at #{g.game_time.strftime("%I:%M %p")}"     
  end
  puts "\n"
end

Display each round of the round-robin(s) without any date/time or playing location info

puts s.rounds.collect{|r| r.to_s}

Issues / Other

Hope this gem will be useful to some people!

You can read my blog