Comment detail

除算・余剰を使わずに閏年 (Nested Flatten)
PostScript で。我ながら汚ないコード。
紀元前はマイナス符号で与えてやって下さい。
# 紀元前対応をやってみたら無駄に複雑に...
# 動作はあってますよね?

AD: 2008: true
AD: 2007: false
AD: 2000: true
AD: 1900: false
AD: 1500: true
AD: 100: true
AD: 8: true
AD: 4: false
BC: 4: false
BC: 8: true
BC: 9: false
BC: 10: false
BC: 11: true
 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
%!PS

/IsLeapYear {
    dup 1582 ge { % Gregorian Calendar AD 1582-
        10 string cvs dup
        0 2 getinterval cvi
        exch 2 2 getinterval cvi
        dup 0 eq dup not % mod 100
        3 -1 roll 3 and 0 eq % mod 4
        and
        exch 3 -1 roll 3 and 0 eq and or % mod 400
    } { % Julian Calendar BC 45 - AD 1582
        dup -8 le { % BC44 - BC8
            neg
            dup 10 ge {
                10 string cvs
                dup 0 1 getinterval cvi exch 1 1 getinterval cvi add
            } if
            dup dup dup 2 eq exch 5 eq or exch 8 eq or exch 11 eq or % mod 3
        } {
            dup 8 lt { % BC7 - AD 7
                pop
                false
            } { % AD 8- AD 1582
                3 and 0 eq
            } ifelse
        } ifelse
    } ifelse
} def

% Test Code -----------------------

/TestLeapYear {
    dup dup 0 eq exch -45 lt or {
        10 string cvs print ( is Invalid ) =
    } {
        dup dup 0 lt {
            (BC: ) print neg
        } {
            (AD: ) print
        } ifelse
        10 string cvs print (: ) print
        IsLeapYear =
    } ifelse
} def

/TestLeapYear2 {
    2008 -1 -50 {
        TestLeapYear
    } for
} def

% TestLeapYear2

2008 TestLeapYear

Index

Feed

Other

Link

Pathtraq

loading...