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 <size>] <digits>\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