Calendar: Difference between revisions
Content added Content deleted
(→{{header|Python}}: Updated due to task change) |
(→{{header|ALGOL 68}}: added D) |
||
Line 164: | Line 164: | ||
30 |
30 |
||
</pre> |
</pre> |
||
=={{header|D}}== |
|||
{{works with|D|2}} |
|||
<lang d>import std.stdio, std.datetime, std.string, std.exception, std.conv, std.math; |
|||
void main() { |
|||
printCalendar(1969, 3); |
|||
} |
|||
void printCalendar(in int year, in int cols) { |
|||
enforce(1 <= cols && cols <= 12); |
|||
auto rows = cast(int)ceil(12.0 / cols); |
|||
auto date = Date(year, 1, 1); |
|||
auto offs = cast(int)date.dayOfWeek(); |
|||
auto monthNames = "January February March April May June " |
|||
"July August September October November December".split(" "); |
|||
string[8][12] mons; |
|||
foreach (m; 0 .. 12) { |
|||
mons[m][0] = monthNames[m].center(21); |
|||
mons[m][1] = " Su Mo Tu We Th Fr Sa"; |
|||
int eom = date.endOfMonthDay(); |
|||
foreach (d; 1 .. 43) { |
|||
auto day = d > offs && d <= offs + eom; |
|||
auto str = day ? format(" %2s", d-offs) : " "; |
|||
mons[m][2 + (d - 1) / 7] ~= str; |
|||
} |
|||
offs = (offs + eom) % 7; |
|||
date.add!q{months}(1); |
|||
} |
|||
writeln("[Snoopy Picture]".center(cols * 24 + 4)); |
|||
writeln(to!string(year).center(cols * 24 + 4), "\n"); |
|||
foreach (r; 0 .. rows) { |
|||
auto s = new string[][](8); |
|||
foreach (c; 0 .. cols) { |
|||
if (r * cols + c > 11) break; |
|||
foreach (i, line; mons[r * cols + c]) |
|||
s[i] ~= line; |
|||
} |
|||
writeln(" ", join(join(s, ["\n"]), " "), "\n"); |
|||
} |
|||
}</lang> |
|||
<pre> [Snoopy Picture] |
|||
1969 |
|||
January February March |
|||
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa |
|||
1 2 3 4 1 1 |
|||
5 6 7 8 9 10 11 2 3 4 5 6 7 8 2 3 4 5 6 7 8 |
|||
12 13 14 15 16 17 18 9 10 11 12 13 14 15 9 10 11 12 13 14 15 |
|||
19 20 21 22 23 24 25 16 17 18 19 20 21 22 16 17 18 19 20 21 22 |
|||
26 27 28 29 30 31 23 24 25 26 27 28 23 24 25 26 27 28 29 |
|||
30 31 |
|||
April May June |
|||
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa |
|||
1 2 3 4 5 1 2 3 1 2 3 4 5 6 7 |
|||
6 7 8 9 10 11 12 4 5 6 7 8 9 10 8 9 10 11 12 13 14 |
|||
13 14 15 16 17 18 19 11 12 13 14 15 16 17 15 16 17 18 19 20 21 |
|||
20 21 22 23 24 25 26 18 19 20 21 22 23 24 22 23 24 25 26 27 28 |
|||
27 28 29 30 25 26 27 28 29 30 31 29 30 |
|||
July August September |
|||
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa |
|||
1 2 3 4 5 1 2 1 2 3 4 5 6 |
|||
6 7 8 9 10 11 12 3 4 5 6 7 8 9 7 8 9 10 11 12 13 |
|||
13 14 15 16 17 18 19 10 11 12 13 14 15 16 14 15 16 17 18 19 20 |
|||
20 21 22 23 24 25 26 17 18 19 20 21 22 23 21 22 23 24 25 26 27 |
|||
27 28 29 30 31 24 25 26 27 28 29 30 28 29 30 |
|||
31 |
|||
October November December |
|||
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa |
|||
1 2 3 4 1 1 2 3 4 5 6 |
|||
5 6 7 8 9 10 11 2 3 4 5 6 7 8 7 8 9 10 11 12 13 |
|||
12 13 14 15 16 17 18 9 10 11 12 13 14 15 14 15 16 17 18 19 20 |
|||
19 20 21 22 23 24 25 16 17 18 19 20 21 22 21 22 23 24 25 26 27 |
|||
26 27 28 29 30 31 23 24 25 26 27 28 29 28 29 30 31 |
|||
30</pre> |
|||
=={{header|J}}== |
=={{header|J}}== |
||
'''Solution:''' |
'''Solution:''' |