RosettaCodeData/Task/Five-weekends/D/five-weekends-2.d

36 lines
1.1 KiB
D
Raw Permalink Normal View History

2013-04-10 21:29:02 -07:00
void main() {
2015-02-20 00:35:01 -05:00
import std.stdio, std.datetime, std.traits;
2013-04-10 21:29:02 -07:00
enum first_year = 1900;
enum last_year = 2100;
2015-02-20 00:35:01 -05:00
uint totalNo5Weekends;
immutable(Date)[] fiveWeekendMonths;
foreach (immutable year; first_year .. last_year + 1) {
2013-04-10 21:29:02 -07:00
bool has5Weekends = false;
2015-02-20 00:35:01 -05:00
foreach (immutable month; EnumMembers!Month) {
immutable firstDay = Date(year, month, 1);
2013-04-10 21:29:02 -07:00
if (firstDay.daysInMonth == 31 &&
firstDay.dayOfWeek == DayOfWeek.fri) {
has5Weekends = true;
fiveWeekendMonths ~= firstDay;
}
}
if (!has5Weekends)
totalNo5Weekends++;
}
writefln("Total 5-weekend months between %d and %d: %d",
first_year, last_year, fiveWeekendMonths.length);
2015-02-20 00:35:01 -05:00
foreach (immutable date; fiveWeekendMonths[0 .. 5])
writeln(date.month, ' ', date.year);
"...".writeln;
foreach (immutable date; fiveWeekendMonths[$ - 5 .. $])
writeln(date.month, ' ', date.year);
2013-04-10 21:29:02 -07:00
writeln("\nTotal number of years with no 5-weekend months: ",
totalNo5Weekends);
}