예를 들어 20111102
오후에 심심해서 하나 썼습니다.
그냥 심심해서 썼습니다.
코드 최적화에 관심이 있으신 분 계시다면 정말 감사합니다
계산해 보면 서기 2000년부터 3000년까지 전 세계에서 완벽한 대칭이 가능한 날은 총 36일입니다.
정원에서 어떤 블로그를 보면 아래에 "실행"을 추가하여 HTML 코드를 직접 실행할 수 있습니다. 고치는 방법을 모르겠는데 알려주실 수 있나요
;
서기 1000년 이후의 회문
< ;script>
/**
* 날짜를 20111102와 같은 표준 8비트 형식으로 변경합니다.
* 이를 4개의 세그먼트로 나눕니다: 세기, 연도, 월, 일을 나타내는 20 11 11 02
* 시간 복잡도 연도별 알고리즘은 O(n3)이고 마지막 4자리인 월, 일에서 최종 결과를 얻을 수 있어 더 효율적입니다
* 윤년의 2월 가수는 9이므로 인류의 오랜 역사를 뛰어넘기 때문에 고려할 필요가 없습니다
*/
;;(function(){
var theDateList=[];
//회문일의 최대 세기 값
var maxForCentury=30;
//회문일이 발생할 수 있는 세기의 최소값
var minForCentury=20;
//회문일이 발생할 수 있는 연도의 최대값, 대략적인 값 처리는 여기에서 수행됩니다
var maxForYear=21;
var maxForDay=31;//윤년은 제외되지 않습니다
for(var i=1;i<=12;i ){
var stdYear ,stdDay;
var stdMonth=getStandardDate(i);
/*
if(getReverseDate(stdMonth)>maxForDay){
계속; maxForDay=getDate(i);
for(var k=1 ;kstdDay =getStandardDate(k)
stdYear=getReverseDate(stdMonth stdDay)
parseInt(getReverseDate(stdDay),10)>=minForCentury
&&parseInt(getReverseDate(stdDay),10)theDateList.push(stdYear stdMonth stdDay)
}
}
theDateList.sort(); //정렬
for( var i=0;iconsole.log(theDateList[i])
}
console.log('총 %d개 레코드',theDateList.length)
/**
* 월을 기준으로 이번 달의 일수 계산
* @param {int} val Month
* @return {int}
*/
function getDate(val){
return val%2==0?30:31;
}
/**
* 10 미만의 날짜 값을 표준 8자리 날짜 값으로 변환
* @param {int} val 월 또는 일
* @return {string} 표준 형식
*/
function getStandardDate(val){
if(val<10){
return '0' val; return val.toString();
}
/ **
* 날짜 반전
* @param {string} date 월 또는 날짜의 표준 형식
* @return {string} 반전 표준 형식
*/
function getReverseDate(date){
return date.split("").reverse().join(" ");
}
})();
< ;/html>