This is a very late posting...and I see that James already posted the 
summary. I didn't have any time this past week/weekend to work on the 
quiz when I thought I would. So here it is....

Thanks,

Zach

-------Code ---------

#!/usr/bin/ruby

class LcdChar
   @@fragments = { 0 => '   ',
                   1 => ' - ',
                   2 => '|  ',
                   3 => '  |',
                   4 => '| |', }

   def initialize( arr )
     @fragments = arr
   end

   def each_fragment
     return unless block_given?
     @fragments.each{ |e| yield @@fragments[e] }
   end

end

class LcdDigit
   class << self
     @@digits = {1 => LcdChar.new( [ 0, 3, 0, 3, 0 ] ),
                 2 => LcdChar.new( [ 1, 3, 1, 2, 1 ] ),
                 3 => LcdChar.new( [ 1, 3, 1, 3, 1 ] ),
                 4 => LcdChar.new( [ 0, 4, 1, 3, 0 ] ),
                 5 => LcdChar.new( [ 1, 2, 1, 3, 1 ] ),
                 6 => LcdChar.new( [ 0, 2, 1, 4, 1 ] ),
                 7 => LcdChar.new( [ 1, 3, 0, 3, 0 ] ),
                 8 => LcdChar.new( [ 1, 4, 1, 4, 1 ] ),
                 9 => LcdChar.new( [ 1, 4, 1, 3, 0 ] ),
                 0 => LcdChar.new( [ 1, 4, 0, 4, 1 ] ) }

     def get_digit( num )
       num = num.to_i if( num.class == ''.class )
       @@digits[ num ]
     end
   end
end

class LcdPrintWriter
   class << self
     def size_str( str, size )
       nstr = str.dup
       nstr[1,1] = nstr[1,1]*size
       nstr
     end

     def print( digits, size=1 )
       rows = []
       digits.to_s.split( '' ).each do |n|
         row = 0
         horiz = true
         LcdDigit.get_digit( n ).each_fragment do |e|
           rows[row] ||= ''
           rows[row] << LcdPrintWriter.size_str( e, size )
           if not horiz
             (1...size).each do
               row += 1
               rows[row] ||= ''
               rows[row] << LcdPrintWriter.size_str( e, size )
             end
           end
           horiz = !horiz
           row += 1
         end
       end
       puts rows
     end
   end
end

if( (sw=ARGV.shift) =~ /-s/ ) then
   size = ARGV.shift
   num = ARGV.shift
   LcdPrintWriter.print( num , size.to_i )
else
   puts "Unknown option #{sw}\nSyntax: \n\tlcd.rb -s size number_to_print"
end