Calendar - for "REAL" programmers: Difference between revisions

Content added Content deleted
m (added whitespace before the TOC (table of contents), added a ;Task: (bold) header.)
(Added Sidef)
Line 2,147:
20 21 22 23 24 25 26 17 18 19 20 21 22 23 22 23 24 25 26 27 28
27 28 29 30 31 24 25 26 27 28 29 30 29 30 31
</pre>
 
=={{header|Sidef}}==
<lang ruby>-> DT { ('DATE'.("\LWC") + 'TIME'.("\LWC")).("\LREQUIRE") }
 
-> MONTHS_PER_COL { 6 }
-> WEEK_DAY_NAMES { <MO TU WE TH FR SA SU> }
-> MONTH_NAMES { <JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC> }
 
-> FMT_MONTH (YEAR, MONTH, STR="", WEEK_DAY=0) {
STR = "%11\LS\E%9\LS\E\12".("\LSPRINTF")(MONTH_NAMES()[MONTH-1],'')
STR += (WEEK_DAY_NAMES().("\LJOIN")(' ') + "\12")
 
-> DATE { DT().("\LNEW")("\LYEAR" => YEAR, "\LMONTH" => MONTH) }
 
WEEK_DAY = DATE().("\LDAY_OF_WEEK")
STR += ([" "] * WEEK_DAY-1 -> ("\LJOIN")(" "))
 
-> LAST_DAY {
DT().("\LLAST_DAY_OF_MONTH")(
"\LYEAR" => YEAR, "\LMONTH" => MONTH
).("\LDAY")
}
 
(DATE().("\LDAY") .. LAST_DAY()).("\LEACH")({ |DAY|
(WEEK_DAY ~~ (2..7)) && (STR += " ")
 
(WEEK_DAY == 8) && (
STR += "\12"
WEEK_DAY = 1
)
STR += ("%2\LD" % DAY)
++WEEK_DAY
})
(WEEK_DAY < 8) && (STR += " ")
STR += ([" "] * 8-WEEK_DAY -> ("\LJOIN")(" "))
STR += "\12"
}
 
-> FMT_YEAR (YEAR, STR="", MONTH_STRS=[]) {
MONTH_STRS = 12.("\LOF")({|I| FMT_MONTH(YEAR, I).("\LLINES") })
 
STR += (' '*(MONTHS_PER_COL()*10 + 2) + YEAR + "\12")
(0..11 -> ("\LBY")(MONTHS_PER_COL())).("\LEACH")({ |MONTH|
MONTH_STRS[MONTH] && ->() {
{ |I|
MONTH_STRS[MONTH + I - 1] && (
STR += MONTH_STRS[MONTH + I - 1].("\LSHIFT")
STR += ' '*2
)
} * MONTHS_PER_COL()
 
STR += "\12"
MONTH_STRS[MONTH] && __FUNC__()
}()
STR += "\12"
})
 
STR
}
 
FMT_YEAR(ARGV ? ARGV[0].("\LTO_I") : 1969).("\LPRINT")</lang>
{{out}}
<pre>
1969
JAN FEB MAR APR MAY JUN
MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU
1 2 3 4 5 1 2 1 2 1 2 3 4 5 6 1 2 3 4 1
6 7 8 9 10 11 12 3 4 5 6 7 8 9 3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11 2 3 4 5 6 7 8
13 14 15 16 17 18 19 10 11 12 13 14 15 16 10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18 9 10 11 12 13 14 15
20 21 22 23 24 25 26 17 18 19 20 21 22 23 17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25 16 17 18 19 20 21 22
27 28 29 30 31 24 25 26 27 28 24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31 23 24 25 26 27 28 29
 
JUL AUG SEP OCT NOV DEC
MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU
1 2 3 4 5 6 1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 1 2 1 2 3 4 5 6 7
7 8 9 10 11 12 13 4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9 8 9 10 11 12 13 14
14 15 16 17 18 19 20 11 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 16 15 16 17 18 19 20 21
21 22 23 24 25 26 27 18 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 23 22 23 24 25 26 27 28
28 29 30 31 25 26 27 28 29 30 31 29 30 27 28 29 30 31 24 25 26 27 28 29 30 29 30 31
</pre>