Array cell_per_number中引用的值是什么

时间:2017-03-02 17:46:14

标签: ruby

这是GitHub问题的解决方案。我正在查看解决方案,我想知道数组中的数字是指什么

LED时钟:你(自愿)在一个完全黑暗的房间里,除了 来自旧的LED数字闹钟的灯光。这是其中之一 使用HH:MM时间格式的4个7段显示的时钟。时钟是 配置为以24小时格式显示时间,前导数字将是 如果不使用则为空白。什么是房间到达之间的时间段 最暗的时候最黑暗?

def compute_brightness(units)
    cells_per_number = [ 6, 2, 5, 5, 4, 5, 6, 3, 7, 6 ]

    units.each_with_object({}) do |t, hash|
      digits = t.split('')
      hash[t] = digits.map { |d| cells_per_number[d.to_i] }.reduce(:+)
    end
end

2 个答案:

答案 0 :(得分:1)

这些数字指的是" on"显示相应的数字时。显示数字" 0时,"六个部分是" on" (除中心段以外),因此索引0处的数字为6.当显示1时,只有两个段是" on,"所以索引1的数字是2.你明白了。

    _                               _               _
0) | | = 6      1)   | = 2      2)  _| = 5      3)  _| = 5
   |_|               |             |_               _|

                    _               _               _
4) |_| = 4      5) |_  = 5      6) |_  = 6      7)   | = 3
     |              _|             |_|               |

    _               _
8) |_| = 7      9) |_| = 6
   |_|              _|

答案 1 :(得分:0)

@Jordan已经回答了您的具体问题,但代码并不是解决上述问题的完整解决方案。这是一种方法。

lpd = { 0=>6, 1=>2, 2=>5, 3=>5, 4=>4, 5=>5, 6=>6, 7=>3, 8=>7, 9=>6 }

def min_leds(lpd, range)
  leds(lpd, range).min_by(&:last).first
end

def max_leds(lpd, range)
  leds(lpd, range).max_by(&:last)
end

def leds(lpd, range)
  lpd.select { |k,_| range.cover?(k) }
end

darkest = 
  [ *[
       [max_leds(lpd, (1..1)), max_leds(lpd, (0..2))],
       [[0,0], max_leds(lpd, (1..9))]
     ].max_by { |(_,a), (_,b)| a+b },
    max_leds(lpd, (0..5)),
    max_leds(lpd, (0..9))
  ].transpose.first.join.insert(2,':')
  #=> "10:08"

lightest = [0, min_leds(lpd, (1..9)),
            min_leds(lpd, (0..5)),
            min_leds(lpd, (0..9))
           ].join.insert(2,':')
  #=> "0111"

为了使解决方案更加真实,应该将烧坏的LED位置的数组(可能是空的)传递给方法。