Pyth, 118 바이트
M++28@j15973358 4G&qG2!%H4FN.pmv>dqhd\0cz\.I&&&hN<hN13eN<eNhgFPNaYK+++*365JhtN/+3J4smghdJthNeNInK60aY-K+12>K60;-eSYhSY
온라인을 시도해보십시오 데모 또는 테스트 스위트를 .
줄리안 달력과 그레고리력에 대한 필요한 지식
Julian과 Gregorian Calendar는 매우 비슷합니다. 각 달력은 1 년을 12 개월로 나누며 각 기간은 28-31 일입니다. 한 달의 정확한 날짜는 [31, 28/29 (depends on leap year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
입니다. 달력의 유일한 차이점은 윤년의 정의입니다. Julian Calendar에서 4로 나눌 수있는 해는 윤년입니다. 그레고리력은 좀 더 구체적입니다. 4로 나눌 수있는 모든 연도는 윤년으로, 100으로 나눌 수 있고 400으로 나눌 수없는 해를 제외하고는 윤년입니다.
따라서 20 세기에는 1 년만이 다릅니다. 1900 년은 Julian Calendar의 윤년이지만 Gregorian Calendar의 윤년은 아닙니다. 따라서 한 달력에는 존재하지만 다른 달력에는 존재하지 않는 유일한 날짜는 day 29.02.1900
입니다.
윤년 정의가 다르기 때문에 Julian 캘린더의 날짜와 Gregorian 캘린더의 차이가 있습니다. 이전 날짜의 경우 12 일 차이, 이후 날짜의 29.02.1900
경우 13 일 차이 29.02.1900
.
단순화 된 의사 코드
Y = [] # empty list
for each permutation N of the input date:
if N is valid in the Julian Calendar:
K = number of days since 0.01.1900
append K to Y
if K != 60: # 60 would be the 29.02.1900
L = K - (12 if K < 60 else 13)
append L to Y
print the difference between the largest and smallest value in Y
자세한 코드 설명
첫 번째 부분 M++28@j15973358 4G&qG2!%H4
은 함수를 정의합니다.이 함수 는 율리우스 력 으로 한 g(G,H)
달 G
의 일 수를 계산합니다 H
.
M def g(G,H): return
j15973358 4 convert 15973358 into base 4
@ G take the Gth element
+28 + 28
+ &qG2!%H4 + (G == 2 and not H % 4)
그리고 다음 부분은 for 루프와 if입니다. N
형식으로 해석 합니다 (month, year, day)
. 바이트를 절약하기 때문입니다.
FN.pmv>dqhd\0cz\.
cz\. split input by "."
mv>dqhd\0 map each d of ^ to: eval(d[d[0]=="0":])
FN.p for N in permutations(^):
I&&&hN<hN13eN<eNhgFPN
I if
hN month != 0
& and
<hN13 month < 13
& and
eN day != 0
& and
<eNhgFPN day < 1 + g(month,year):
aYK+++*365JhtN/+3J4smghdJthNeN
JhtN J = year
+*365J /+3J4 J*365 + (3 + J)/4
+ smghdJthN + sum(g(1+d,year) for d in [0, 1, ... month-2])
+ eN + day
K K = ^
aYK append K to Y
InK60aY-K+12>K60
InK60 if K != 60:
aY-K+12>K60 append K - (12 + (K > 60)) to Y
;-eSYhSY
; end for loop
-eSYhSY print end(sorted(Y)) - head(sorted(Y))
5, May 1975
있어야하는데31st
? 또한 윤년을 고려해야합니까?