My own solution. It looks a long but it's mostly the digits, arguments
and usage.
James Edward Gray II
#!/usr/bin/env ruby
DIGITS = [
[ " - ",
"| |",
" ",
"| |",
" - " ],
[ " ",
" |",
" ",
" |",
" " ],
[ " - ",
" |",
" - ",
"| ",
" - " ],
[ " - ",
" |",
" - ",
" |",
" - " ],
[ " ",
"| |",
" - ",
" |",
" " ],
[ " - ",
"| ",
" - ",
" |",
" - " ],
[ " - ",
"| ",
" - ",
"| |",
" - " ],
[ " - ",
" |",
" ",
" |",
" " ],
[ " - ",
"| |",
" - ",
"| |",
" - " ],
[ " - ",
"| |",
" - ",
" |",
" - " ]
]
def scale( num, size )
bigger = [ ]
num.each do |l|
row = l.dup
row[1, 1] = row[1, 1] * size
if row =~ /\|/
size.times { bigger << row }
else
bigger << row
end
end
bigger
end
s = 2
if ARGV.size >= 2 and ARGV[0] == '-s' and ARGV[1] =~ /^[1-9]\d*$/
ARGV.shift
s = ARGV.shift.to_i
end
unless ARGV.size == 1 and ARGV[0] =~ /^\d+$/
puts "Usage: #$0 [-s SIZE] DIGITS"
exit
end
n = ARGV.shift
num = [ ]
n.each_byte do |c|
num << [" "] * (s * 2 + 3) if num.size > 0
num << scale(DIGITS[c.chr.to_i], s)
end
num = ([""] * (s * 2 + 3)).zip(*num)
num.each { |l| puts l.join }
__END__