How to resolve the algorithm Discordian date step by step in the D programming language
Published on 12 May 2024 09:40 PM
How to resolve the algorithm Discordian date step by step in the D programming language
Table of Contents
Problem Statement
Convert a given date from the Gregorian calendar to the Discordian calendar.
Let's start with the solution:
Step by Step solution about How to resolve the algorithm Discordian date step by step in the D programming language
Source code in the d programming language
import std.stdio, std.datetime, std.conv, std.string;
immutable seasons = ["Chaos", "Discord", "Confusion",
"Bureaucracy", "The Aftermath"],
weekday = ["Sweetmorn", "Boomtime", "Pungenday",
"Prickle-Prickle", "Setting Orange"],
apostle = ["Mungday", "Mojoday", "Syaday",
"Zaraday", "Maladay"],
holiday = ["Chaoflux", "Discoflux", "Confuflux",
"Bureflux", "Afflux"];
string discordianDate(in Date date) pure {
immutable dYear = text(date.year + 1166);
immutable isLeapYear = date.isLeapYear;
if (isLeapYear && date.month == 2 && date.day == 29)
return "St. Tib's Day, in the YOLD " ~ dYear;
immutable doy = (isLeapYear && date.dayOfYear >= 60) ?
date.dayOfYear - 1 :
date.dayOfYear;
immutable dsDay = (doy % 73)==0? 73:(doy % 73); // Season day.
if (dsDay == 5)
return apostle[doy / 73] ~ ", in the YOLD " ~ dYear;
if (dsDay == 50)
return holiday[doy / 73] ~ ", in the YOLD " ~ dYear;
immutable dSeas = seasons[(((doy%73)==0)?doy-1:doy) / 73];
immutable dWday = weekday[(doy - 1) % 5];
return format("%s, day %s of %s in the YOLD %s",
dWday, dsDay, dSeas, dYear);
}
unittest {
assert(Date(2010, 7, 22).discordianDate ==
"Pungenday, day 57 of Confusion in the YOLD 3176");
assert(Date(2012, 2, 28).discordianDate ==
"Prickle-Prickle, day 59 of Chaos in the YOLD 3178");
assert(Date(2012, 2, 29).discordianDate ==
"St. Tib's Day, in the YOLD 3178");
assert(Date(2012, 3, 1).discordianDate ==
"Setting Orange, day 60 of Chaos in the YOLD 3178");
assert(Date(2010, 1, 5).discordianDate ==
"Mungday, in the YOLD 3176");
assert(Date(2011, 5, 3).discordianDate ==
"Discoflux, in the YOLD 3177");
}
void main(string args[]) {
int yyyymmdd, day, mon, year, sign;
if (args.length == 1) {
(cast(Date)Clock.currTime).discordianDate.writeln;
return;
}
foreach (i, arg; args) {
if (i > 0) {
//writef("%d: %s: ", i, arg);
yyyymmdd = to!int(arg);
if (yyyymmdd < 0) {
sign = -1;
yyyymmdd = -yyyymmdd;
}
else {
sign = 1;
}
day = yyyymmdd % 100;
if (day == 0) {
day = 1;
}
mon = ((yyyymmdd - day) / 100) % 100;
if (mon == 0) {
mon = 1;
}
year = sign * ((yyyymmdd - day - 100*mon) / 10000);
writefln("%s", Date(year, mon, day).discordianDate);
}
}
}
You may also check:How to resolve the algorithm Angles (geometric), normalization and conversion step by step in the Groovy programming language
You may also check:How to resolve the algorithm Longest increasing subsequence step by step in the AppleScript programming language
You may also check:How to resolve the algorithm Anti-primes step by step in the Arturo programming language
You may also check:How to resolve the algorithm Rosetta Code/Count examples step by step in the Go programming language
You may also check:How to resolve the algorithm Address of a variable step by step in the Component Pascal programming language