Think Twice
IT技術メモ | プログラミングお題のメモ
Created: 2012-08-01 / Updated: 2023-09-06

[お題] うるう年チェック


当メモは2012-08-01に投稿されたものを加筆修正し、再掲したものです。
みなさまもお好きな言語で解いてみてくださいね。

目次


お題

Copy
うるう年チェックを行うプログラムを作成せよ。

うるう年の定義は以下とする:
 ・西暦年が4で割り切れる年は(原則として)うるう年。
 ・ただし、西暦年が100で割り切れる年は(原則として)平年。
 ・ただし、西暦年が400で割り切れる年は必ずうるう年。

Groovyで解いてみた

2023-09-06 更新
Copy
// Integerに閏年判定メソッドを追加
Integer.metaClass {
  isLeapYear = {
    Date.parse('yyyy-MM-dd', "${delegate}-12-31")[Calendar.DAY_OF_YEAR] == 366
  }
}

assert 2012.leapYear,  '4で割り切れるの年は閏年'
assert !2100.leapYear, 'でも100で割り切れる年は閏年ではない'
assert !2200.leapYear, 'でも100で割り切れる年は閏年ではない'
assert !2300.leapYear, 'でも100で割り切れる年は閏年ではない'
assert !2500.leapYear, 'でも100で割り切れる年は閏年ではない'
assert 2000.leapYear,  'でもでも400で割り切れる年はやっぱり閏年'
assert 2400.leapYear,  'でもでも400で割り切れる年はやっぱり閏年'

参考サイト

Javaで解いてみた

2023-09-06 更新

Javaであれば、java.time.YearisLeapを使うことでチェック可能です。

Copy
package sample;

import java.time.Year;

public class Main {
    public static void main(String[] args) {
        System.out.println("2020 " + Year.isLeap(2020)); // => true  4で割り切れるの年は閏年
        System.out.println("2100 " + Year.isLeap(2100)); // => false でも100で割り切れる年は閏年ではない
        System.out.println("2400 " + Year.isLeap(2400)); // => true  でもでも400で割り切れる年はやっぱり閏年
    }    
}
実行結果
Copy
2020 true
2100 false
2400 true

参照


参考

参照