Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
80
Task/Discordian-date/D/discordian-date.d
Normal file
80
Task/Discordian-date/D/discordian-date.d
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue