------ art_59785_30970447.1165855345394
Content-Type: multipart/alternative;
boundary --- art_59786_23962453.1165855345394"
------ art_59786_23962453.1165855345394
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
Please find my solution hereafter, I somehow do not like it because it is
unreadable, I wanted to show what ruby can do and that it can do it in
different ways, i liked the Quiz, save the output part, which was a
chellange but not really ruby specificly, well that is why my solution is so
unreadable, a readable solution might not differ very much from Smalltalk or
Java, structurally I mean ;)
Thx for the Quiz.
665/167 > cat screen.rb
class Screen
def initialize size, &blk
@lines rray.new( size ){ [] }
instance_eval &blk if blk
end
private
def at c, pos_line, pos_col
@lines[pos_line-1][pos_col-1]
end
def out stream tdout
stream.puts self
end
def str_at s, pos_line, pos_col
s.each_byte do
|c|
at c, pos_line, pos_col
pos_col +
end
end
def str_align s, align, pos_line, pos_col
str_at "%#{align}s" % s.to_s, pos_line, pos_col
end
def to_s
@lines.map{ |line| line.map{ |c| c.nil? ? " " :
c.chr}.join}.join("\n")
end
end
666/168 > cat sol.rb
require 'screen'
class Tournament
def initialize n
@n .to_i
abort "illegal number #@n" unless @n > 0
@outputs ]
[*0..(@n - 1).to_s(2).length].inject([0]){
|pairs,n|
@outputs.unshift pairs
pairs.map{|p| [p, ( 1 << n ) * 2 - 1 - p]}.flatten
}
@outputs.map!{ |col| col.map!{|i| i < @n ? i + 1 : :bye} }
end
def print
data outputs
Screen.new data.first.length * 2 do
data.each_with_index do
|output, col|
output.each_with_index do
|player, row|
main_row **col + row*2**(col+1)
str_align player, 4, main_row,
6*col+5
str_at "-"*5 << "+", main_row,
6*col+9 unless
output.length 1
if col > 1 then
(2**(col-1)-1).times do
|t|
at ?|, main_row
-1-t, 6*col+8
at ?|, main_row
+1+t, 6*col+8
end
end
end
end
out
end
end
end
Tournament.new( ARGV.first || "14" ).print
Robert
--
"The real romance is out ahead and yet to come. The computer revolution
hasn't started yet. Don't be misled by the enormous flow of money into bad
defacto standards for unsophisticated buyers using poor adaptations of
incomplete ideas."
- Alan Kay
------ art_59786_23962453.1165855345394
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
<br>Please find my solution hereafter, I somehow do not like it because it is unreadable, I wanted to show what ruby can do and that it can do it in different ways, i liked the Quiz, save the output part, which was a chellange but not really ruby specificly, well that is why my solution is so unreadable, a readable solution might not differ very much from Smalltalk or Java, structurally I mean ;)
<br>Thx for the Quiz.<br><div><span class="gmail_quote"><br>665/167 > cat screen.rb<br><br>class Screen<br> def initialize size, &blk<br> @lines = Array.new(ize ){ [] }<br> instance_eval &blk if blk
<br> end<br> private<br> ef at c, pos_line, pos_col<br> @lines[pos_line-1][pos_col-1] = c<br> end<br> def out stream=$stdout<br> stream.puts self<br> end
<br> def str_at s, pos_line, pos_col<br> s.each_byte do<br> |c|<br> at c, pos_line, pos_col<br> pos_col += 1<br> nd
<br> end<br> def str_align s, align, pos_line, pos_col<br> str_at "%#{align}s" % s.to_s, pos_line, pos_col<br> end<br> def to_s<br> @lines.map{ |line| line.map{
|c| c.nil? ? " " : c.chr }.join}.join("\n")<br> end<br>end<br><br>666/168 > cat sol.rb<br>require 'screen'<br>class Tournament<br> def initialize n<br> @n = n.to_i<br> abort "illegal number #@n" unless @n > 0
<br> @outputs = []<br> [*0..(@n - 1).to_s(2).length].inject([0]){<br> |pairs,n|<br> @outputs.unshift pairs<br> pairs.map{|p|
[p, ( 1 << n ) * 2 - 1 - p]}.flatten<br> }<br> @outputs.map!{ |col| col.map!{|i| i < @n ? i + 1 : :bye} }<br> end<br> def print<br> data = @outputs<br>
Screen.new data.first.length * 2 do<br> data.each_with_index do<br> |output, col|<br> output.each_with_index do<br> |player, row|
<br> main_row = 2**col + row*2**(col+1)<br> str_align player, 4, main_row, 6*col+5<br> str_at "-"*5 << "+", main_row, 6*col+9 unless
<br> output.length3D= 1<br> if col > 1 then<br> (2**(col-1)-1).times do<br> |t|
<br> at ?|, main_row -1-t, 6*col+8<br> at ?|, main_row +1+t, 6*col+8<br> end
<br> end<br><br> end<br><br> end<br> out<br> end<br> end<br>end<br><br>Tournament.new
( ARGV.first || "14" ).print<br><br>Robert<br></span></div><br>--br>"The real romance is out ahead and yet to come. The computer revolution hasn't started yet. Don't be misled by the enormous flow of money into bad defacto standards for unsophisticated buyers using poor adaptations of incomplete ideas."
<br><br>- Alan Kay
------ art_59786_23962453.1165855345394--
------ art_59785_30970447.1165855345394
Content-Type: application/x-ruby; name=sol.rb
Content-Transfer-Encoding: base64
X-Attachment-Id: f_evl4zmqq
Content-Disposition: attachment; filename="sol.rb"
cmVxdWlyZSAnc2NyZWVuJwpjbGFzcyBUb3VybmFtZW50CglkZWYgaW5pdGlhbGl6ZSBuCgkJQG4g
PSBuLnRvX2kKCQlhYm9ydCAiaWxsZWdhbCBudW1iZXIgI0BuIiB1bmxlc3MgQG4gPiAwCgkJQG91
dHB1dHMgPSBbXQoJCVsqMC4uKEBuIC0gMSkudG9fcygyKS5sZW5ndGhdLmluamVjdChbMF0pewoJ
CQl8cGFpcnMsbnwKCQkJQG91dHB1dHMudW5zaGlmdCBwYWlycwoJCQlwYWlycy5tYXB7fHB8IFtw
LCAoIDEgPDwgbiApICogMiAtIDEgLSBwXX0uZmxhdHRlbgoJCX0KCQlAb3V0cHV0cy5tYXAheyB8
Y29sfCBjb2wubWFwIXt8aXwgaSA8IEBuID8gaSArIDEgOiA6YnllfSB9CgllbmQKCWRlZiBwcmlu
dAoJCWRhdGEgPSBAb3V0cHV0cwoJCVNjcmVlbi5uZXcgZGF0YS5maXJzdC5sZW5ndGggKiAyIGRv
CgkJCWRhdGEuZWFjaF93aXRoX2luZGV4IGRvCgkJCQl8b3V0cHV0LCBjb2x8CgkJCQlvdXRwdXQu
ZWFjaF93aXRoX2luZGV4IGRvCgkJCQkJfHBsYXllciwgcm93fAoJCQkJCW1haW5fcm93ID0gMioq
Y29sICsgcm93KjIqKihjb2wrMSkKCQkJCSAgICAgICAgc3RyX2FsaWduIHBsYXllciwgNCwgbWFp
bl9yb3csIDYqY29sKzUKCQkJCQlzdHJfYXQgIi0iKjUgPDwgIisiLCBtYWluX3JvdywgNipjb2wr
OSB1bmxlc3MKCQkJCQkJb3V0cHV0Lmxlbmd0aCA9PSAxCgkJCQkJaWYgY29sID4gMSB0aGVuCgkJ
CQkJCSgyKiooY29sLTEpLTEpLnRpbWVzIGRvCgkJCQkJCQl8dHwKCQkJCQkJCWF0ID98LCBtYWlu
X3JvdyAtMS10LCA2KmNvbCs4CgkJCQkJCQlhdCA/fCwgbWFpbl9yb3cgKzErdCwgNipjb2wrOAoJ
CQkJCQllbmQKCQkJCQllbmQKCQkJCQkKCQkJCWVuZAoKCQkJZW5kCgkJCW91dAoJCWVuZAoJZW5k
CmVuZAoKVG91cm5hbWVudC5uZXcoIEFSR1YuZmlyc3QgfHwgIjE0IiApLnByaW50Cg ------ art_59785_30970447.1165855345394
Content-Type: application/x-ruby; name=screen.rb
Content-Transfer-Encoding: base64
X-Attachment-Id: f_evl51bd8
Content-Disposition: attachment; filename="screen.rb"
CmNsYXNzIFNjcmVlbgoJZGVmIGluaXRpYWxpemUgc2l6ZSwgJmJsawoJCUBsaW5lcyA9IEFycmF5
Lm5ldyggc2l6ZSApeyBbXSB9CgkJaW5zdGFuY2VfZXZhbCAmYmxrIGlmIGJsawoJZW5kCglwcml2
YXRlCglkZWYgYXQgYywgcG9zX2xpbmUsIHBvc19jb2wKCQlAbGluZXNbcG9zX2xpbmUtMV1bcG9z
X2NvbC0xXSA9IGMKCWVuZAoJZGVmIG91dCBzdHJlYW09JHN0ZG91dAoJCXN0cmVhbS5wdXRzIHNl
bGYKCWVuZAoJZGVmIHN0cl9hdCBzLCBwb3NfbGluZSwgcG9zX2NvbAoJCXMuZWFjaF9ieXRlIGRv
CgkJCXxjfAoJCQlhdCBjLCBwb3NfbGluZSwgcG9zX2NvbAoJCQlwb3NfY29sICs9IDEKCQllbmQK
CWVuZAoJZGVmIHN0cl9hbGlnbiBzLCBhbGlnbiwgcG9zX2xpbmUsIHBvc19jb2wKCQlzdHJfYXQg
IiUje2FsaWdufXMiICUgcy50b19zLCBwb3NfbGluZSwgcG9zX2NvbAoJZW5kCglkZWYgdG9fcwoJ
CUBsaW5lcy5tYXB7IHxsaW5lfCBsaW5lLm1hcHsgfGN8IGMubmlsPyA/ICIgIiA6IGMuY2hyIH0u
am9pbn0uam9pbigiXG4iKQoJZW5kCmVuZAoK
------ art_59785_30970447.1165855345394--