From: Sea&Gull Date: 2005-01-09T23:51:27+09:00 Subject: Re: [QUIZ] LCD Numbers (#14) Hi! Thanks for the quiz, it was really fun to code :-) Here is my variant: ##################################################### #!/usr/bin/env ruby def usage print "\n\nUsage: lcd.rb [-s ] \n\n", " -s digit size (positive integer), default is 2\n", " digits digits to display as lcd\n\n\n" exit 1 end def draw_part_of_digit(d, s, state) case state when "top" print " #{(d == 1 or d == 4) ? ' ' * s : '-' * s} " when "up_half" print "#{(d.between?(1, 3) or d == 7) ? ' ' : '|'}", ' ' * s, "#{d.between?(5, 6) ? ' ' : '|'}" when "middle" print " #{(d.between?(0, 1) or d == 7) ? ' ' * s : '-' * s} " when "down_half" print "#{(d == 0 or d == 2 or d == 6 or d == 8) ? '|' : ' '}", ' ' * s, "#{d == 2 ? ' ' : '|'}" when "bottom" print " #{(d == 1 or d == 4 or d == 7) ? ' ' * s : '-' * s} " end # case end digits = [] size = 2 if ARGV.join(" ") =~ /^(-s ([1-9]\d*) ){0,1}(\d+)$/ size = $2.to_i if $2 $3.each_byte {|i| digits << i - 48} else usage end state = "top" (3 + size * 2).times { |i| case i when 1 : state = "up_half" when 1 + size : state = "middle" when 2 + size : state = "down_half" when 2 + size * 2 : state = "bottom" end digits.length.times { |j| draw_part_of_digit(digits[j], size, state); print ' ' } print "\n" } ##################################################### -- s&g