From: Nathaniel Talbott Date: 2005-01-10T06:03:07+09:00 Subject: [SOLUTION] Ruby Quiz #14 LCD Numbers --Apple-Mail-9-295837381 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed This was the first quiz I participated in (I've been waiting for one I could whip out real quick), and it made a nice programming warm-up after being away over the holidays. I added one small bit of functionality: a colon, so I could do time displays. However, the colon looked ugly when expanded, so I made it so it only expands vertically, not horizontally. The template-based approach I used could probably be used (with a bit of tweaking) to allow prettier displays, but I didn't want to show off how much I stink at ASCII art by trying myself :-) Thanks for the quiz! Nathaniel Terralien, Inc. <:((>< --Apple-Mail-9-295837381 Content-Transfer-Encoding: 7bit Content-Type: application/octet-stream; x-unix-mode=0744; name="lcd" Content-Disposition: attachment; filename=lcd #!/usr/bin/env ruby module LCD class Template def self.height(size) 3 + (2 * size) end def initialize(string, option) case option when "h" @horizontal_stable = true end @lines = string.gsub(/\./, ' ').split("\n") end def actual_line(line, size) case when line == 0 0 when line == (self.class.height(size) - 1) 4 when line < (size + 1) 1 when line == (size + 1) 2 else 3 end end def display(line, size) l = @lines[actual_line(line, size)].dup l[1, 1] *= size unless(@horizontal_stable) l end end TEMPLATES = {} DATA.read.scan(/=([^\n])([a-z]?)\n([^=]+)/m){|c, option, t| TEMPLATES[c] = Template.new(t, option)} def self.display(string, size=1) output = "" input = string.split(//) Template.height(size).times do |i| line = [] input.each do |character| line << TEMPLATES[character].display(i, size) end output << "#{line.join(" " * size)}\n" end output end end if(__FILE__ == $0) require 'optparse' size = 1 ARGV.options do |o| o.on("-sSIZE", "--size", Integer){|size|} end.parse! puts LCD::display(ARGV.first, size) end __END__ =0 .-. |.| ... |.| .-. =1 ... ..| ... ..| ... =2 .-. ..| .-. |.. .-. =3 .-. ..| .-. ..| .-. =4 ... |.| .-. ..| ... =5 .-. |.. .-. ..| .-. =6 .-. |.. .-. |.| .-. =7 .-. ..| ... ..| ... =8 .-. |.| .-. |.| .-. =9 .-. |.| .-. ..| .-. =:h ... ... .-. ... .-. --Apple-Mail-9-295837381--