🔖

コード書きの練習 五日目(ツェラーの公式の実装)

2023/04/30に公開

ツェラーの公式とは、日付から曜日を求めることが出来る公式です。フェアフィールドの公式を利用しています。詳細は http://hp.vector.co.jp/authors/VA007833/math_note/zeller_Fairfield.html をご覧ください。

やってみた

module Practice
using Test

function fairfield(year, month, day)
    if (month == 1 || month == 2)
        year = year - 1
        month = month + 12
    end

    365(year - 1) + floor(year / 4) - floor(year / 100) +
    floor(year / 400) +
    31 +
    28 +
    floor((306(month + 1) / 10)) - 122 + day
end

function zehher(year, month, day)
    rem(fairfield(year, month, day), 7)
end

function zehherString(year, month, day)
    dict = Dict(
        0 => "日曜日",
        1 => "月曜日",
        2 => "火曜日",
        3 => "水曜日",
        4 => "木曜日",
        5 => "金曜日",
        6 => "土曜日",
    )

    dict[zehher(year, month, day)]
end

function main()
    @testset "0:日曜日、1:月曜日、2:火曜日、省略、6:土曜日である" begin
        @test zehher(1950, 6, 25) == 0
        @test zehher(1955, 11, 1) == 2
        @test zehher(2020, 7, 24) == 5
        @test zehher(2023, 1, 1) == 0
        @test zehher(2023, 4, 30) == 0
    end

    @testset "曜日を数字ではなく、日本語の文字列で表現しました" begin
        @test zehherString(1950, 6, 25) == "日曜日"
        @test zehherString(1955, 11, 1) == "火曜日"
        @test zehherString(2020, 7, 24) == "金曜日"
        @test zehherString(2023, 1, 1) == "日曜日"
        @test zehherString(2023, 4, 30) == "日曜日"
    end
end
end

if abspath(PROGRAM_FILE) == @__FILE__
    using .Practice

    Practice.main()
end

雑記

ね、眠い。。。次回は、素数と完全数の判定の実装予定です。

Discussion