JavaScriptで次のn個のうるう年を取得する方法
本記事では、正の整数 n を受け取り、次の n 個のうるう年を配列として返す関数を作成します。この問題は、以下の3つのパートに分けて考えると分かりやすくなります。
パート1:JavaScriptで現在の年を取得する
まず、Date オブジェクトの新しいインスタンスから現在の年を取得します。コードは次のとおりです。
// Dateオブジェクトのインスタンスから現在の年を取得 const year = new Date().getFullYear();
パート2:うるう年の判定
次に、数値を受け取り、その年がうるう年かどうかを真偽値(boolean)で返す関数 isLeap() を作成します。
ある年がうるう年とみなされるのは、以下の2つの条件のうち少なくとも1つを満たす場合です。
- 400 の倍数である
- 4 の倍数であり、かつ 100 の倍数ではない
これらの条件を踏まえて、isLeap() 関数を実装してみましょう。
// うるう年かどうかを判定する関数
const isLeap = year => {
return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);
};パート3:次の n 個のうるう年を見つける
最後に、これらを組み合わせて、現在の翌年から順に年を確認し、見つかったうるう年を配列に格納していく関数 nextNLeap() を実装します。while ループで配列の要素数が n に達するまで繰り返すのがポイントです。
サンプルコード
// うるう年かどうかを判定する関数
const isLeap = year => {
return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);
};
// 次の n 個のうるう年を配列で返す関数
const nextNLeap = n => {
const arr = [];
let year = new Date().getFullYear() + 1;
while(arr.length < n){
if(isLeap(year++)){
arr.push(year - 1);
}
}
return arr;
};
console.log(nextNLeap(5));
console.log(nextNLeap(25));出力結果
コンソールには次のように出力されます。
[ 2024, 2028, 2032, 2036, 2040 ]
[
2024, 2028, 2032, 2036, 2040,
2044, 2048, 2052, 2056, 2060,
2064, 2068, 2072, 2076, 2080,
2084, 2088, 2092, 2096, 2104,
2108, 2112, 2116, 2120, 2124
]なお、2100 年が含まれていない点にも注目してください。2100 年は 4 の倍数ではありますが、100 の倍数でもあるため、うるう年とはならないのです。このように、うるう年のルールを正しく実装することで、長期間にわたっても正確な計算が可能になります。
-
JavaScriptで特定の年がうるう年かどうかを判定するプログラムの作成方法
JavaScriptで特定の年がうるう年かどうかを確認する方法 JavaScriptである年がうるう年かどうかを判定するには、その年を「4」で割った余りが0になるかどうかを調べます。ここでは、ユーザーが入力した年をもとに、うるう年かどうかを判定するシンプルなプログラムを紹介します。 サンプルコード <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" conten
-
JavaScriptで連結リストの各ノードの「次に大きい値」を効率的に求める方法
問題概要JavaScriptで、連結リストの先頭ノード(head)を唯一の引数として受け取る関数を作成することを考えます。この連結リストには数値データが格納されており、リスト内の各ノードには「次に大きい値(next larger value)」が存在する場合があります。ノードiに対して next_larger(node_i) とは、j > i かつ node_j.val > node_i.val を満たすノードの中で、j が最小になるような node_j.val のことです。そのような j が存在しない場合、次に大きい値は 0 となります。つまり私たちの関数は、リスト内の各要素に対