challenge 年間カレンダー

nを入力としてn年の年間カレンダーを返すプログラムを作ってください
少なくとも日曜日と土曜日が判別出来るようにしてください
出力は標準出力でもファイルでも構いません
デザインは各自のお好みで

出力例1:
(y-calendar 2008)=>
#=Saturday, @=Sunday
2008/1 1 2 3 4 #5 @6 7 ...
2008/2 1 #2 @3 4 5 6 7 ...
...
2008/12 1 2 3 4 5 #6 @7 ...

出力例2:
(y-calendar 2008)=>
        M T W T F S S M
2008/ 1   1 2 3 4 5 6 7 ...
2008/ 2         1 2 3 4 ...
...
2008/12 1 2 3 4 5 6 7 8 ...

出力例3:
(y-calendar 2008)は2008.htmlを出力する
2008.htmlの中身
----
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
       "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>2008 calendar</title>
<style type="text/css">
* {font-family: monospace;}
span {margin: 0px 3px;}
span.sunday {color:red;font-weight:bold;}
span.saturday {color:blue;font-weight:bold;}
dd ul li{display:inline;}
</style>
</head>
<body>
<h1>2008 calendar</h1>
<dl>
<dt>2008/1</dt>
<dd><ul>
<li><span class="weekday">1</span></li>
<li><span class="weekday">2</span></li>
<li><span class="weekday">3</span></li>
<li><span class="weekday">4</span></li>
<li><span class="saturday">5</span></li>
<li><span class="sunday">6</span></li>
...
</ul></dd>
...
</dl>
</body>
</html>
----

Posted feedbacks - Lua

 Lua始めました。
 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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
-- 閏年かどうか判定
L = 
function (y)
    if y % 400 == 0 then return 1 end
    if y % 100 == 0 then return 0 end
    if y %   4 == 0 then return 1 end
    return 0
end

-- 指定された日の曜日を取得
W = 
function (y, m, d)
    return tonumber(os.date('%w', os.time({ year = y, month = m, day = d })))
end

(function (v)
    local d = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
    local w = { 'Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa' }
    local m, t, y

    if #v ~= 2 then
        io.stderr:write('usage: ' .. v[0] .. ' [month] [year]\n')
        return 1
    end

    m, y = tonumber(v[1]), tonumber(v[2])

    if m == nil or y == nil then
        io.stderr:write('usage: ' .. v[0] .. ' [month] [year]\n')
        return 1
    end

    if m < 1 or m > 12 then
        io.stderr:write('cal: illegal month value: use 1-12\n')
        return 1
    end
    if y < 1 or y > 9999 then
        io.stderr:write('cal: illegal year value: use 1-9999\n')
        return 1
    end

    -- 閏日を補正
    d[2] = d[2] + L(y)

    t = string.format('%4d/%2d', y, m) .. '\n'
     .. table.concat(w, ' ') .. '\n'
     .. string.rep('   ', W(y, m, 1))
    for i = 1, d[m] do
        t = t .. string.format('%2d', i)
        t = W(y, m, i) < 6 and t .. ' ' or t .. '\n'
    end
    print(t)

    return 0
end)(arg)

Index

Feed

Other

Link

Pathtraq

loading...