```Ruby Quiz <james / grayproductions.net> wrote:

> This week's quiz is to write a program that displays LCD style numbers at

Here's my solution:

**************************** [begin code ] ****************************

#!/usr/local/bin/ruby -w

require 'getoptlong'

# ---------------------------------------------------------------------

class Digit

@@chars = [ " ", "-", "|" ]
@@segments =
[
[ [0,1,0], [2,0,2], [0,0,0], [2,0,2], [0,1,0] ], # 0
[ [0,0,0], [0,0,2], [0,0,0], [0,0,2], [0,0,0] ], # 1
[ [0,1,0], [0,0,2], [0,1,0], [2,0,0], [0,1,0] ], # 2
[ [0,1,0], [0,0,2], [0,1,0], [0,0,2], [0,1,0] ], # 3
[ [0,0,0], [2,0,2], [0,1,0], [0,0,2], [0,0,0] ], # 4
[ [0,1,0], [2,0,0], [0,1,0], [0,0,2], [0,1,0] ], # 5
[ [0,1,0], [2,0,0], [0,1,0], [2,0,2], [0,1,0] ], # 6
[ [0,1,0], [0,0,2], [0,0,0], [0,0,2], [0,0,0] ], # 7
[ [0,1,0], [2,0,2], [0,1,0], [2,0,2], [0,1,0] ], # 8
[ [0,1,0], [2,0,2], [0,1,0], [0,0,2], [0,1,0] ]  # 9
]

def initialize( num, size )
@matrix = @@segments[ num ]
@height = @matrix.size
self.scale_to_size( size ) if size > 1
end

def scale_to_size( size )
t = size - 1
@matrix.each { |l| t.times { l.insert(-2, 0) } }
@matrix.each { |l| l.fill(1, l.index(1),size) if l.include?(1) }
t.times { @matrix.insert( 1, @matrix[1]) }
t.times { @matrix.insert(-2, @matrix[-2]) }
@height = @matrix.size
end

def display_line( line )
@matrix[ line ].each { |c| print @@chars[c] }
print " "
end

end

# ---------------------------------------------------------------------

class LCD

def initialize( num, size=1 )
@digits = Array.new
num.each_byte { |b| @digits << Digit.new( b.to_i - 48, size ) }
end

def display
for line in 0... / digits.first.height
@digits.each { |d| d.display_line( line ) }
puts
end
end

end

# ---------------------------------------------------------------------

def print_usage( message=nil )
puts "Usage: lcd [-s size] digits"
end

# ---------------------------------------------------------------------

print_usage & exit if ARGV.empty?

size = 2
opts = GetoptLong.new( ["--size", "-s", GetoptLong::REQUIRED_ARGUMENT] )
opts.each { |opt, val| size = val.to_i if opt == "--size" }

print_usage & exit if ARGV.empty?

digits = ARGV[0].gsub( /[^0-9]/, "" )
lcd = LCD.new( digits, size )
lcd.display

# ---------------------------------------------------------------------

**************************** [end code ] ******************************

--
Luc Heinrich - lucsky / mac.com

```