今天差點要唱 我的心有一扇窗(天窗),
還好在最後的最後還是趕上了orz
其實昨天 po 出後,得到很多大大們的建議,
小的我覺得很開心,
本來想要照大大們的建議改的,
但剛才發現來不及=口=
只好擇日再戰orz
所以今天挑了別的題目進行挑戰!
正好我又記得今年的 2 月 2 日有一則新聞:
https://tw.news.yahoo.com/900-%E5%B9%B4%E9%9B%A3%E5%BE%97-%E9%81%87%E7%9A%84%E4%B8%96%E7%95%8C%E5%9B%9E%E6%96%87%E6%97%A5-20200202%E6%AD%A3%E5%8F%8D%E5%BF%B5%E9%83%BD-%E6%A8%A3-103500091.html
900 年難得一遇的世界完全對稱日 20200202正反念都一樣
2020 年 2 月 2 日,這一天不只是美國一年一度的土撥鼠節和美式足球世界超級盃的日子,還是 900 年來難得一遇的「世界完全對稱日」(Palindrome Day),日期寫成 20202020,數字如同照鏡子一般,不論從前面念、後面念,都是一樣的。
沒錯,今天就要用程式試著算出世界完全對稱日有哪些!
然後今天的文章不會像昨天有很多前置作業,
直接切入正題!
(好但這題我承認數學的成份不大orz)
因為是正反倒著唸都一樣,
所以想說就用年份倒著印月日出來,
如果倒著印出來的月日是正常日期格式,
就表示這樣的年月日就是世界完全對稱日!
let year = 2020;
let yearStr = year.toString(); // 要將年份倒著印回去,要記得轉成字串才能處理
let date = "";
console.log(`year: ${year}`);
for ( let i=yearStr.length-1; i>=0; i-- ){
console.log(`reverse year: ${yearStr[i]}`);
}
let year = 2020;
let yearStr = year.toString();
let monthStr = "";
let dateStr = "";
console.log(`year: ${year}`);
for ( let i=yearStr.length-1; i>=0; i-- ){
// console.log(`reverse year: ${yearStr[i]}`);
if ( i > 1 ){
monthStr += yearStr[i]; // 前 2 碼存成月份
} else{
dateStr += yearStr[i]; // 後 2 碼存成日期
}
}
let year = 2021; // 改成 2021 試試看
let yearStr = year.toString();
let monthStr = "";
let dateStr = "";
console.log(`year: ${year}`);
for ( let i=yearStr.length-1; i>=0; i-- ){
if ( i > 1 ){
monthStr += yearStr[i];
} else{
dateStr += yearStr[i];
}
}
console.log(`monthStr: ${monthStr}`);
console.log(`dateStr: ${dateStr}`);
let year = 2021;
let yearStr = year.toString();
let monthStr = "";
let dateStr = "";
console.log(`year: ${year}`);
for ( let i=yearStr.length-1; i>=0; i-- ){
if ( i > 1 ){
monthStr += yearStr[i];
} else{
dateStr += yearStr[i];
}
}
let month = parseInt(monthStr);
let date = parseInt(dateStr);
// 如果月份小於 12 且 日期小於 31 表示為正常日期
if ( month <= 12 && date <= 31 ){
console.log(`${yearStr}${monthStr}${dateStr} 是世界對稱日!`);
}
let year = 2031; // 故意改成 2031
let yearStr = year.toString();
let monthStr = "";
let dateStr = "";
console.log(`year: ${year}`);
for ( let i=yearStr.length-1; i>=0; i-- ){
// console.log(`reverse year: ${yearStr[i]}`);
if ( i > 1 ){
monthStr += yearStr[i];
} else{
dateStr += yearStr[i];
}
}
console.log(`monthStr: ${monthStr}`);
console.log(`dateStr: ${dateStr}`);
let month = parseInt(monthStr);
let date = parseInt(dateStr);
if ( month <= 12 && date <= 31 ){
console.log(`${yearStr}${monthStr}${dateStr} 是世界對稱日!`);
}
沒有印出世界完全對稱日的判斷,表示上面寫的邏輯是對的~
let yearStart = 2001;
let yearEnd = 2999;
let resultArray = []; // 世界對稱日結果陣列
for ( let year=yearStart; year<yearEnd; year++ ){
let yearStr = year.toString();
let monthStr = "";
let dateStr = "";
for ( let i=yearStr.length-1; i>=0; i-- ){
if ( i > 1 ){
monthStr += yearStr[i];
} else{
dateStr += yearStr[i];
}
}
let month = parseInt(monthStr);
let date = parseInt(dateStr);
if ( month <= 12 && date <= 31 ){
resultArray.push(`${yearStr}${monthStr}${dateStr}`);
}
}
console.log(`從 ${yearStart} 年到 ${yearEnd} 年的世界對稱日共有 ${resultArray.length} 個。`);
for ( let x=0; x<resultArray.length; x++ ){
console.log(`第 ${x+1} 個:${resultArray[x]}`);
}
從 2001 年到 2999 年的世界對稱日共有 38 個!
本日打完收工XD
我知道還有很多可以改的地方啦,
例如大月小月判斷之類的orz
( 2 字頭年份不會遇到這個問題,
但 1 字頭年份會遇到......)
還有,小的寫程式的能力真的還要很多地方需要加強我知道QQ
謝謝各位路過的大大總是不厭其煩的給了小的很多建議QAQ
小的會繼續往復健寫程式手感路上邁進的!
這篇文章發出去我應該就要趕快寫隔天的文章了.......
最後再跟有看這系列文章的大大們致個歉,只好期待 30 天後我會不會變強了XD"