Nemo #5579(2008/01/30 17:31 GMT) [ PostScript ] Rating0/0=0.00
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
Rating0/0=0.00-0+
[ reply ]
Nemo
#5579()
[
PostScript
]
Rating0/0=0.00
%!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 TestLeapYearRating0/0=0.00-0+
[ reply ]