Discordian date: Difference between revisions

Added Prolog Solution
(Also add example output to the 8086 version)
(Added Prolog Solution)
Line 3,228:
St. Tib's Day, 3182 YOLD
Boomtime, The Aftermath 50, 3182 YOLD
</pre>
 
=={{header|Prolog}}==
{{works with|SWI Prolog}}
<lang 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').</lang>
 
{{out}}
<pre>
2022-04-20: Setting Orange, day 37 of Discord in the YOLD 3188
2020-05-24: Prickle-Prickle, day 71 of Discord in the YOLD 3186
2020-02-29: St. Tib's Day in the YOLD 3186
2019-07-15: Sweetmorn, day 50 of Confusion in the YOLD 3185. Celebrate Confuflux!
2025-03-19: Pungenday, day 5 of Discord in the YOLD 3191. Celebrate Mojoday!
2017-12-08: Boomtime, day 50 of The Aftermath in the YOLD 3183. Celebrate Afflux!
</pre>
 
1,777

edits