--Boundary_(ID_7mMBSYuPFLAZYI71WIEG/w)
Content-type: text/plain; charset=ISO-8859-1; format=flowed
Content-transfer-encoding: 7BIT
Following (and attached) is the copy of my code. The main logic of it
is very simple:
1. Create "bye" teams until there is a power of two
2. From an array sorted by "goodness" of a team, make matches by taking
a team from the two ends.
A nice and short version which does the above is below (and attached as
tournielean.rb). I actually wrote this version after writing the other
version because most of the entries to Ruby Quiz seem to be short.
./tournielean n where n is the number of teams to run it.
#! /usr/bin/ruby
class Numeric
# Is the given number a power of self?
# 16.isPowerOf(2) true
# 100.isPowerOf(2) false
def isPowerOf(other)
i
while (other ** i < elf)
return true if other ** i self
i +
end
false
end
end
class Tournament
# Recieves a list of team names in order of ranking with the best first.
def initialize(teams)
@eligible eams
@round
end
def createNextRound
out Round #{@round + }: "
inCurrentRound ]
until (@eligible.length.isPowerOf(2))
out + #{@eligible.first} vs. bye, "
inCurrentRound.push @eligible.shift
end
until (@eligible.empty?)
winner eligible.shift
loser eligible.pop
out + #{winner} vs. #{loser}, "
inCurrentRound.push(winner)
end
@eligible nCurrentRound
out[0, out.length - 2] + "."
end
def createAllRounds
out "
until (@eligible.length 1)
out << createNextRound << "\n"
end
out# + "Winner: #{@eligible[0]}"
end
end
t ournament.new((1..(ARGV[0].to_i)).to_a)
puts t.createAllRounds
--Boundary_(ID_7mMBSYuPFLAZYI71WIEG/w)
Content-type: application/x-ruby; name=tournielean.rb
Content-transfer-encoding: base64
Content-disposition: inline; filename=tournielean.rb
IyEgL3Vzci9iaW4vcnVieQoKY2xhc3MgTnVtZXJpYwoJIyBJcyB0aGUgZ2l2ZW4gbnVtYmVy
IGEgcG93ZXIgb2Ygc2VsZj8KCSMgMTYuaXNQb3dlck9mKDIpID09IHRydWUKCSMgMTAwLmlz
UG93ZXJPZigyKSA9PSBmYWxzZQoJZGVmIGlzUG93ZXJPZihvdGhlcikKCQlpID0gMAoJCXdo
aWxlIChvdGhlciAqKiBpIDw9IHNlbGYpCgkJCXJldHVybiB0cnVlIGlmIG90aGVyICoqIGkg
PT0gc2VsZgoJCQlpICs9IDEKCQllbmQKCQlmYWxzZQoJZW5kCmVuZAoKY2xhc3MgVG91cm5h
bWVudAoJIyBSZWNpZXZlcyBhIGxpc3Qgb2YgdGVhbSBuYW1lcyBpbiBvcmRlciBvZiByYW5r
aW5nIHdpdGggdGhlIGJlc3QgZmlyc3QuCglkZWYgaW5pdGlhbGl6ZSh0ZWFtcykKCQlAZWxp
Z2libGUgPSB0ZWFtcwoJCUByb3VuZCA9IDAKCWVuZAoJCglkZWYgY3JlYXRlTmV4dFJvdW5k
CgkJb3V0ID0gIlJvdW5kICN7QHJvdW5kICs9IDF9OiAiCgkJaW5DdXJyZW50Um91bmQgPSBb
XQoJCQoJCXVudGlsIChAZWxpZ2libGUubGVuZ3RoLmlzUG93ZXJPZigyKSkKCQkJb3V0ICs9
ICIje0BlbGlnaWJsZS5maXJzdH0gdnMuIGJ5ZSwgIgoJCQlpbkN1cnJlbnRSb3VuZC5wdXNo
IEBlbGlnaWJsZS5zaGlmdAoJCWVuZAoJCQoJCXVudGlsIChAZWxpZ2libGUuZW1wdHk/KQoJ
CQl3aW5uZXIgPSBAZWxpZ2libGUuc2hpZnQKCQkJbG9zZXIgPSBAZWxpZ2libGUucG9wCgkJ
CQoJCQlvdXQgKz0gIiN7d2lubmVyfSB2cy4gI3tsb3Nlcn0sICIKCQkJCgkJCWluQ3VycmVu
dFJvdW5kLnB1c2god2lubmVyKQoJCWVuZAoJCQoJCUBlbGlnaWJsZSA9IGluQ3VycmVudFJv
dW5kCgkJb3V0WzAsIG91dC5sZW5ndGggLSAyXSArICIuIgoJZW5kCgkKCWRlZiBjcmVhdGVB
bGxSb3VuZHMKCQlvdXQgPSAiIgoJCXVudGlsIChAZWxpZ2libGUubGVuZ3RoID09IDEpCgkJ
CW91dCA8PCBjcmVhdGVOZXh0Um91bmQgPDwgIlxuIgoJCWVuZAoJCW91dCMgKyAiV2lubmVy
OiAje0BlbGlnaWJsZVswXX0iCgllbmQKZW5kCgp0ID0gVG91cm5hbWVudC5uZXcoKDEuLihB
UkdWWzBdLnRvX2kpKS50b19hKQpwdXRzIHQuY3JlYXRlQWxsUm91bmRz
--Boundary_(ID_7mMBSYuPFLAZYI71WIEG/w)--