발렌타인 데이는 올해 Doomsday와 일치합니다.다시.
그만큼 둠스데이 규칙은 깔끔합니다. 여기에 아이디어의 일부를 설명하는 JSL 스니펫이 있습니다.
For( year = 1901, year <= 2099, year++, // 1900 was not a leap year and 2100 won't be
really =
Day Of Week( Date DMY( if(mod(year,4),3,4), 1, year ) ) == // 3rd day of January, 3 years out of 4
Day Of Week( Date DMY( if(mod(year,4),28,29), 2, year ) ) == // last day of February (29 on leap years)
Day Of Week( Date DMY( 14, 3, year ) ) == // PI-day
Day Of Week( Date DMY( 4, 4, year ) ) == // even months, same day, after February
Day Of Week( Date DMY( 6, 6, year ) ) == //
Day Of Week( Date DMY( 8, 8, year ) ) == //
Day Of Week( Date DMY( 10, 10, year ) ) == //
Day Of Week( Date DMY( 12, 12, year ) ) == //
Day Of Week( Date DMY( 7, 11, year ) ) == // familiar store name in US
Day Of Week( Date DMY( 11, 7, year ) ) == //
Day Of Week( Date DMY( 9, 5, year ) ) == // 9-to-5 working hours
Day Of Week( Date DMY( 5, 9, year ) ) == //
Day Of Week( Date DMY( 4, 7, year ) ) == // US Independence Day
Day Of Week( Date DMY( 26, 12, year ) ); // boxing day
If( !really, Show( year ) );
);
Write( "done\!n" );
Write( {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday"}[Day Of Week( Date DMY( 4, 4, 2015 ) )] );
규칙의 멋진 부분은 1년 내내(적어도 2월 이후에는) 연중 내내 같은 요일에 해당하는 날짜의 기억에 남는 패턴입니다.2015년 Doomsday는 토요일입니다. ; 2015년 4월 4일, 2015년 6월 6일, 2015년 8월 8일, 2015년 10월 10일, 2015년 12월 12일은 모두 토요일이며, 7월 11일, 11월 7일, 5월 9일 및 9월 9일도 마찬가지입니다. 5. DMY 또는 MDY.우리에게 운이 좋은 윤일은 연초에 상당히 일찍 발생합니다. 그렇지 않으면 규칙이 더 나빠질 것입니다.
mod() 함수는 윤년에 따라 1월과 2월의 올바른 날짜를 선택하기 위해 위의 JSL에서 사용됩니다.2000년은 400으로 나누어지기 때문에 윤년이었습니다. 100으로 나누어지는 대부분의 해는 윤년이 아니므로 for 루프의 한계가 있습니다.
특히 거의 모든 다른 프로그래밍 언어에 익숙한 프로그래머라면 JSL의 == 비교 체인에 대해 궁금할 수 있습니다.JMP는 실제로 그렇게 합니다.예를 들어 (혼합하지 마십시오 < 그리고 > ),
1 < 2 < 3 < 4 < 5
1
그리고
1 < 2 < 4 < 3 < 5
0
위의 JSL에서 == 체인의 결과는 다음에 할당됩니다. 정말; 값은 1이므로 !정말 테스트는 0이고 JSL은 모두 테스트를 통과하기 때문에 연도를 인쇄하지 않습니다.for 루프에 1900 또는 2100을 추가하면 Doomsday 규칙이 잘못되어서가 아니라 위의 JSL이 1월과 2월의 올바른 날짜를 선택하지 않기 때문에 인쇄됩니다.
최종 진술도 약간의 설명이 필요합니다.
Write( {"일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"}[요일( 날짜 DMY( 4, 4, 2015 ) )] );
토요일
이것은 write() 함수에 대한 하나의 호출입니다. { 중괄호 } 안의 날짜 목록은 [ 대괄호 ] 안의 표현식 아래 첨자입니다.DayOfWeek는 제공된 날짜에 대해 일요일에 1을 반환하고 토요일에 7을 반환합니다.4월 4일은 언제나 종말의 날입니다.
2017년 9월 30일 수정: 서식 복구