我的这个解法书里面没有,就贴出来吧。
module LCD
SCREEN=[
[0,1,3,4,5,6], # 0 LCD
[3,6], # 1 LCD
[0,2,3,4,5], # 2 LCD
[0,2,3,5,6], # 3 LCD
[1,2,3,6], # 4 LCD
[0,1,2,5,6], # 5 LCD
[0,1,2,4,5,6], # 6 LCD
[0,3,6], # 7 LCD
[0,1,2,3,4,5,6], # 1 LCD
[0,1,2,3,6] # 1 LCD
]
CHARS=["_","|", "_", "|", "|", "_", "|"]
FILL=[lambda{ |size| Array.new(size){ |i| [0,1+i]}}, # 0
lambda{ |size| Array.new(size){ |i| [1+i,0] }}, # 1
lambda{ |size| Array.new(size){ |i| [size,1+i] }}, # 2
lambda{ |size| Array.new(size){ |i| [1+i,size+1] }}, # 3
lambda{ |size| Array.new(size){ |i| [size+1+i,0] }}, # 4
lambda{ |size| Array.new(size){ |i| [2*size,1+i] }}, # 5
lambda{ |size| Array.new(size){ |i| [size+1+i, size+1] }}, # 6
]
def init_array(size)
ret = Array.new(3+size*2){ Array.new(3+size){ ' '}}
end
def lcd_single(num, size=1)
"\n"+join(fill(init_array(size), SCREEN[num],size))
end
def lcd(num, size=1)
data = []
num.to_s.each_byte do |c|
data.push(fill(init_array(size), SCREEN[c.chr.to_i],size))
end
join(sum(data))
end
def sum(data)
data.inject do |sum, item|
sum.each_index do |index|
sum[index] = sum[index] + item[index]
end
end
end
def fill(data,screen,size)
screen.each do |item|
FILL[item].call(size).each do |row,col|
data[row][col]=CHARS[item]
end
end
data
end
def join(data)
data.map{ |row| row.join}.join("\n")
end
end