問題
次の前提の下で、「毎月 25 日。ただしその日が土日または祝日なら、翌営業日に繰り下げる」 (請求書の支払期日の定番形)の本体式を書け。
premise JP {
calendar-system: Gregorian
tz: "Asia/Tokyo"
wkst: Mon
}
@JP
holidays2026 = [2026-01-01, 2026-01-12, 2026-02-11, 2026-02-23, 2026-03-20,
2026-04-29, 2026-05-03, 2026-05-04, 2026-05-05, 2026-05-06,
2026-07-20, 2026-08-11, 2026-09-21, 2026-09-22, 2026-09-23,
2026-10-12, 2026-11-03, 2026-11-23] covering: 2026..2026
satSun = everyDay |> filter(d => weekday(d) == Sat or weekday(d) == Sun)
bizDay = everyDay \ (satSun | holidays2026)
# ここに本体式を書く
正答
everyDay |> within(month) |> nth(25) |> roll(Following, on: bizDay)
判定基準: 評価範囲 2026-07-01..2026-11-01 で 2026-07-27, 2026-08-25, 2026-09-25, 2026-10-26(別解可)。
解説
前倒し(Preceding)で書く給料日の型との違いは規約の向きだけ——支払う側に有利な前倒しは Preceding・受け取る側の期日は Following が商慣習の型。7/25(土)→ 7/27(月)・10/25(日)→ 10/26(月)。 「どちらへ倒すかは業務の意味が決める」ので、要件文の「繰り上げ/繰り下げ」を読み落とすと Preceding/Following を取り違える——読解と作文の境目になる一語。 impl 実走検証済み(2026-08-01・公開 HEAD 9e46dcf)。
検証
# eval: 2026-07-01..2026-11-01
premise JP {
calendar-system: Gregorian
tz: "Asia/Tokyo"
wkst: Mon
}
@JP
holidays2026 = [2026-01-01, 2026-01-12, 2026-02-11, 2026-02-23, 2026-03-20,
2026-04-29, 2026-05-03, 2026-05-04, 2026-05-05, 2026-05-06,
2026-07-20, 2026-08-11, 2026-09-21, 2026-09-22, 2026-09-23,
2026-10-12, 2026-11-03, 2026-11-23] covering: 2026..2026
satSun = everyDay |> filter(d => weekday(d) == Sat or weekday(d) == Sun)
bizDay = everyDay \ (satSun | holidays2026)
everyDay |> within(month) |> nth(25) |> roll(Following, on: bizDay)
2026-07-27
2026-08-25
2026-09-25
2026-10-26
# 被覆サマリ
# holidays2026 covering 2026-01-01..2026-12-31 残走路 61 日