ホームページ >ウェブフロントエンド >jsチュートリアル >世界で完全対称の日を計算するjsコード、大まかなバージョン_javascriptスキル

世界で完全対称の日を計算するjsコード、大まかなバージョン_javascriptスキル

WBOY
WBOYオリジナル
2016-05-16 17:59:381036ブラウズ

たとえば、20111102
午後に退屈してコードを書きました。
退屈で書いただけです。
コードの最適化に興味のある方がいらっしゃいましたら、よろしくお願いします。

計算の結果、西暦 2000 年から 3000 年にかけて、世界中で完全な対称性が認められる日数は合計 36 日になります。
庭にいくつかのブログが表示されたら、以下に「run」を追加して HTML コードを直接実行できます。修正方法がわかりません。誰か教えてください。

コードをコピー コードは次のとおりです。


;

西暦 1000 年以降の回文 ;script>
/**
* 日付を標準の 8 ビット形式 (20111102 など) に変更します
* 日付を 4 つのセグメントに分割します: 世紀、年、月、日は 20 11 11 02
* の時間計算量年ごとのアルゴリズムは O(n3) で、最終結果は下 4 桁、月、日から取得できるため、より効率的です
* 閏年の 2 月の仮数は 9 であるため、人類の長い歴史を超えているので考慮する必要はありません
*/
;;(function(){
var theDateList=[];
//回文日が発生する世紀の最大値
var maxForCentury=30;
//回文日が発生する世紀の最小値
var minForCentury=20
//回文日が発生する可能性のある年数の最大値、ここでは大まかな処理のみが行われます
var maxFor Year=21;
var maxForDay=31;//閏年は除外されません
for(var i=1;i<=12;i ){
var stdyear,stdDay;
var stdMonth=getStandardDate(i);
if(getReverseDate(stdMonth)>maxForDay){
Continue;
maxForDay=getDate(i);
for(var k=1 ;kstdDay =getStandardDate(k);
stdyear=getReverseDate(stdMonth stdDay); >if(parseInt(getReverseDate(stdDay),10)>=minForCentury
&& parseInt(getReverseDate(stdDay),10)theDateList.push(stdyear stdMonth stdDay)
}
}
theDateList.sort(); //Sort
for( var i=0;iconsole.log(theDateList[i]);
console.log('Total %d records',theDateList.length)
/**
* 月に応じて当月の日数を計算します
* @param {int} val month
* @return {int}
*/
function getDate(val){
return val%2==0?30 :31;
}
/**
* 10 未満の日付値を標準の 8 桁の日付値に変換します
* @param {int} val 月または日
* @return {string} 標準形式
*/
関数 getStandardDate(val){
if(val<10){
return '0' val;
return val.toString();
}
/ **
* 反転された日付
* @param {string} date 月または日付の標準形式
* @return {string} 反転された標準形式
*/
function getReverseDate(date){
return date.split("").reverse()。 join("");
}
})();

🎜>

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。