Hong-Phuc Bui
20 hours ago aafb72c1dc3c1674e4b3c55586384bfdb7ff2be7
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
import sys
 
def wochentag(d:int, m:int, y:int) -> int:
    y0 = y - (14 - m) // 12
    x = y0 + y0//4 - y0//100 + y0//400
    m0 = m + 12*( (14-m)//12 ) - 2
    return (d + x + (31*m0)//12) % 7
 
 
def berechne_ueberhang_tage(wochentag:int) -> int:
    """Nach Gepflogenheit in deutches Kalender-System fängt eine Woche mit Montag an.
 
    Mo -> Keinen Überhang; 
    Di -> 1 Überhang; 
    Mi -> 2 Überhange; 
    Do -> 3 Überhange; 
    Fr -> 4 Überhange; 
    Sa -> 5 Überhange; 
    So -> 6 Überhange
    """
    return (wochentag - 1) % 7
 
 
def ist_schaltjahr(y:int) -> bool:
    return (y % 4 == 0) and ( (y%100 != 0) or (y%400 == 0) )
 
 
def letzter_tag(m: int, y:int) -> int:
    tage = [None, 31, 28, 31, 30, 
    31, 30, 31, 31, 
    30, 31, 30, 31]
    if m != 2: return tage[m]
    return 29 if ist_schaltjahr(y) else 28
 
 
def print_kalender(m: int, y: int):    
    monaten = [None, 
            "Januar",    "Februar", "März",     "April",
            "Mai",       "Juni",    "July",     "August",
            "September", "Oktober", "November", "Dezember"]
    # Ausgabe des Monat und Jahr
    print(f"{monaten[m]} {y}")
    wochentage = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]
    print(" ".join(wochentage))
    
    # Ausgabe der Überhang von letzen Monat
    erster_wochentag = wochentag(1, m, y)
    ueberhang = berechne_ueberhang_tage(erster_wochentag)
    spalten_breite = len(wochentage[0]) + 1 
    ueberhang_zeichen = " "*(spalten_breite * ueberhang)
    print(ueberhang_zeichen, end="")
    
    # Ausgabe des Kalenders
    spalten_idx = ueberhang
    tag = 1
    letzter_tag_im_monat = letzter_tag(m, y)
    while tag <= letzter_tag_im_monat:
        print(f"{tag:2d}", end=" ")
        tag += 1
        spalten_idx += 1
        if spalten_idx % 7 == 0: print()
 
 
m, y = int(sys.argv[1]), int(sys.argv[2])
print_kalender(m, y)
 
print()