《Ruby Quiz》 中Quiz 2的解答

我的这个解法书里面没有,就贴出来吧。


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值