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 - Python

標準出力へ。

1
2
3
4
import sys
import calendar

calendar.prcal(int(sys.argv[1]))

Python/Tkinterで組んでみました。組んだはいいが、結構重い・・・(レイアウトを工夫すればもっと速くできるかもしれませんが)

 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
56
57
58
59
60
61
62
63
64
65
66
67
# coding: shift_jis

import Tkinter as Tk
import calendar
import sys

def grid_configure(frame, col_count, row_count):
    for col in xrange(col_count):
        frame.grid_columnconfigure(col, weight=1)
    for row in xrange(row_count):
        frame.grid_rowconfigure(row, weight=1)

class MonthPanel(Tk.Frame):
    def __init__(self, master, year, month):
        Tk.Frame.__init__(self, master)

        label = Tk.Label(self, text=u"%d月" % month)
        label.pack(side=Tk.TOP, fill=Tk.X)

        frame = Tk.Frame(self)
        frame.pack(side=Tk.TOP, fill=Tk.BOTH, expand=True)

        grid_configure(frame, 7, 7)

        def create_label(row, col):
            label = Tk.Label(frame, bg="white")
            label.grid(row=row, column=col, sticky="news", padx=1, pady=1)
            return label

        labels = [[create_label(row, col) for col in xrange(7)] for row in xrange(7)]

        def text(col, row, s, color="white"):
            labels[row][col].configure(text=s, bg=color)

        for col, s in enumerate(u"日月火水木金土"):
            if col == 0:
                color = "#F7CACA"
            elif col == 6:
                color = "#CEFFFF"
            else:
                color = "#E7FFE7"
            text(col, 0, s, color)

        for row, a in enumerate(calendar.Calendar(6).monthdayscalendar(year, month)):
            for col, day in enumerate(a):
                if day:
                    text(col, row + 1, day)

def main():
    if len(sys.argv) != 2:
        sys.stderr.write("usage: year\n")
        return
    year = int(sys.argv[1])

    root = Tk.Tk()
    root.title(u"%d年 年間カレンダー" % year)

    grid_configure(root, 4, 3)

    for i in xrange(12):
        frame = MonthPanel(root, year, i + 1)
        frame.grid(row=i/4, column=i%4, sticky="news", padx=2, pady=2)

    root.mainloop()

if __name__ == '__main__':
    main()

Index

Feed

Other

Link

Pathtraq

loading...