icps

notes

Holiday

http://www.319papago.idv.tw/holiday/2017-hr/2017_HR.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
def read(year)
    require 'rubyXL'
    file_path = "#{year}.xlsx"
    workbook  = RubyXL::Parser.parse(file_path)
    worksheet = workbook[0]

    row = worksheet.map {|row| row && row.cells.each { |cell| cell && cell.value != nil}}.size
    #找高間隔
    yl  = (1..row-1).map {|y| y + 1 if worksheet[y][1].value == "日" }.compact.push(row)
    #計算幾排
    hl  = yl.take(4).each_with_index.map {|y, idx| (yl[idx+1] - y - 2) / 2 }
    #寬間隔(固定)
    xl  = [1,  8, 15]
    (0..3).map do |y|
        (0..2).map do |x|
            (0..(7 * hl[y]-1)).map do |i|
                cx = xl[x] + i % 7
                cy = yl[y] + (i / 7) * 2
                cell = worksheet[cy][cx]
                if cell.value
                    cell.fill_color == "FFFF99FF" ? 1 : 0
                end
            end.join
        end
    end.flatten(1)
end

def holiday
    [["1000011000001100000110000011000", "0011000001100011111100011001", "0011000001100000110000011000000", "100111110000011000001100000110", "0000110000011000001100000110000", "011000001100000111000011000001", "1000001100000110000011000001100", "0001100000110000011000001100000", "110000011000001100000111000011", "0000011001001100000110000011000", "001100000110000011000001100000", "1100000110000011000000100000111"],
     ["1000110000011000000100000110000", "0111111111000001100000010001", "1110000011000001100000110000011", "000111100000110000011000001100", "0001100000110000011000001100000", "110000111000001100000110000011", "0000011000001100000110000011000", "0011000001100000110000011000001", "100000110000111000001100000110", "0000010001111000001100000110000", "011000001100000110000011000001", "1000001100000110000011000001100"]]
end

def check_holiday(y, m, d)
    true if holiday[y-2018][m-1][d-1] == "1"
end
# [read(107), read(108)]
# check_holiday(2019, 12, 28)