81 lines
2.3 KiB
Prolog
81 lines
2.3 KiB
Prolog
% See https://en.wikipedia.org/wiki/Discordian_calendar
|
|
|
|
main:-
|
|
test(2022, 4, 20),
|
|
test(2020, 5, 24),
|
|
test(2020, 2, 29),
|
|
test(2019, 7, 15),
|
|
test(2025, 3, 19),
|
|
test(2017, 12, 8).
|
|
|
|
test(Gregorian_year, Gregorian_month, Gregorian_day):-
|
|
ddate(Gregorian_year, Gregorian_month, Gregorian_day,
|
|
Discordian_date),
|
|
format('~|~`0t~d~2+-~|~`0t~d~2+-~|~`0t~d~2+: ~w~n', [Gregorian_year,
|
|
Gregorian_month, Gregorian_day, Discordian_date]).
|
|
|
|
ddate(Gregorian_year, 2, 29, Discordian_date):-
|
|
convert_year(Gregorian_year, Discordian_year),
|
|
swritef(Discordian_date, 'St. Tib\'s Day in the YOLD %w',
|
|
[Discordian_year]),
|
|
!.
|
|
ddate(Gregorian_year, Gregorian_month, Gregorian_day,
|
|
Discordian_date):-
|
|
convert_year(Gregorian_year, Discordian_year),
|
|
day_of_year(Gregorian_month, Gregorian_day, Daynum),
|
|
Season is Daynum//73,
|
|
Weekday is Daynum mod 5,
|
|
Day_of_season is 1 + Daynum mod 73,
|
|
season(Season, Season_name),
|
|
week_day(Weekday, Day_name),
|
|
(holy_day(Season, Day_of_season, Holy_day) ->
|
|
swritef(Discordian_date, '%w, day %w of %w in the YOLD %w. Celebrate %w!',
|
|
[Day_name, Day_of_season, Season_name, Discordian_year, Holy_day])
|
|
;
|
|
swritef(Discordian_date, '%w, day %w of %w in the YOLD %w',
|
|
[Day_name, Day_of_season, Season_name, Discordian_year])
|
|
).
|
|
|
|
convert_year(Gregorian_year, Discordian_year):-
|
|
Discordian_year is Gregorian_year + 1166.
|
|
|
|
day_of_year(M, D, N):-
|
|
month_days(M, Days),
|
|
N is Days + D - 1.
|
|
|
|
month_days(1, 0).
|
|
month_days(2, 31).
|
|
month_days(3, 59).
|
|
month_days(4, 90).
|
|
month_days(5, 120).
|
|
month_days(6, 151).
|
|
month_days(7, 181).
|
|
month_days(8, 212).
|
|
month_days(9, 243).
|
|
month_days(10, 273).
|
|
month_days(11, 304).
|
|
month_days(12, 334).
|
|
|
|
season(0, 'Chaos').
|
|
season(1, 'Discord').
|
|
season(2, 'Confusion').
|
|
season(3, 'Bureacracy').
|
|
season(4, 'The Aftermath').
|
|
|
|
week_day(0, 'Sweetmorn').
|
|
week_day(1, 'Boomtime').
|
|
week_day(2, 'Pungenday').
|
|
week_day(3, 'Prickle-Prickle').
|
|
week_day(4, 'Setting Orange').
|
|
|
|
holy_day(0, 5, 'Mungday').
|
|
holy_day(0, 50, 'Chaoflux').
|
|
holy_day(1, 5, 'Mojoday').
|
|
holy_day(1, 50, 'Discoflux').
|
|
holy_day(2, 5, 'Syaday').
|
|
holy_day(2, 50, 'Confuflux').
|
|
holy_day(3, 5, 'Zaraday').
|
|
holy_day(3, 50, 'Bureflux').
|
|
holy_day(4, 5, 'Maladay').
|
|
holy_day(4, 50, 'Afflux').
|