Calendar - for "REAL" programmers: Difference between revisions
Content added Content deleted
m (→{{header|Lua}}) |
(remove Lua as Lua needs lower letters) |
||
Line 1,145: | Line 1,145: | ||
Note that this version of F will work fine with a left argument of 20 (why anyone felt that this was important to mention is perhaps best thought of as an issue lost in history). |
Note that this version of F will work fine with a left argument of 20 (why anyone felt that this was important to mention is perhaps best thought of as an issue lost in history). |
||
=={{header|Lua}}== |
|||
<lang Lua>FUNCTION PRINT_CAL(YEAR) |
|||
LOCAL MONTHS={"JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE", |
|||
"JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER"} |
|||
LOCAL DAYSTITLE="MO TU WE TH FR SA SU" |
|||
LOCAL DAYSPERMONTH={31,28,31,30,31,30,31,31,30,31,30,31} |
|||
LOCAL STARTDAY=MATH.FLOOR((YEAR-1)*365.2425)%7 |
|||
IF YEAR%4==0 AND YEAR%100~=0 OR YEAR%400==0 THEN |
|||
DAYSPERMONTH[2]=29 |
|||
END |
|||
LOCAL SEP=5 |
|||
LOCAL MONTHWIDTH=DAYSTITLE:LEN() |
|||
LOCAL CALWIDTH=3*MONTHWIDTH+2*SEP |
|||
FUNCTION CENTER(STR, WIDTH) |
|||
LOCAL FILL1=MATH.FLOOR((WIDTH-STR:LEN())/2) |
|||
LOCAL FILL2=WIDTH-STR:LEN()-FILL1 |
|||
RETURN STRING.REP(" ",FILL1)..STR..STRING.REP(" ",FILL2) |
|||
END |
|||
FUNCTION MAKEMONTH(NAME, SKIP,DAYS) |
|||
LOCAL CAL={ |
|||
CENTER(NAME,MONTHWIDTH), |
|||
DAYSTITLE |
|||
} |
|||
LOCAL CURDAY=1-SKIP |
|||
WHILE #CAL<9 DO |
|||
LINE={} |
|||
FOR I=1,7 DO |
|||
IF CURDAY<1 OR CURDAY>DAYS THEN |
|||
LINE[I]=" " |
|||
ELSE |
|||
LINE[I]=STRING.FORMAT("%2D",CURDAY) |
|||
END |
|||
CURDAY=CURDAY+1 |
|||
END |
|||
CAL[#CAL+1]=TABLE.CONCAT(LINE," ") |
|||
END |
|||
RETURN CAL |
|||
END |
|||
LOCAL CALENDAR={} |
|||
FOR I,MONTH IN IPAIRS(MONTHS) DO |
|||
LOCAL DPM=DAYSPERMONTH[I] |
|||
CALENDAR[I]=MAKEMONTH(MONTH, STARTDAY, DPM) |
|||
STARTDAY=(STARTDAY+DPM)%7 |
|||
END |
|||
PRINT(CENTER("[SNOOPY]",CALWIDTH),"\N") |
|||
PRINT(CENTER("--- "..YEAR.." ---",CALWIDTH),"\N") |
|||
FOR Q=0,3 DO |
|||
FOR L=1,9 DO |
|||
LINE={} |
|||
FOR M=1,3 DO |
|||
LINE[M]=CALENDAR[Q*3+M][L] |
|||
END |
|||
PRINT(TABLE.CONCAT(LINE,STRING.REP(" ",SEP))) |
|||
END |
|||
END |
|||
END |
|||
PRINT_CAL(1969)</lang> |
|||
{{out}} |
|||
<pre> |
|||
[SNOOPY] |
|||
--- 1969 --- |
|||
JANUARY FEBRUARY MARCH |
|||
MO TU WE TH FR DA SU MO TU WE TH FR DA SU MO TU WE TH FR DA SU |
|||
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 |
|||
MO TU WE TH FR DA SU MO TU WE TH FR DA SU MO TU WE TH FR DA SU |
|||
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 |
|||
MO TU WE TH FR DA SU MO TU WE TH FR DA SU MO TU WE TH FR DA SU |
|||
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 |
|||
MO TU WE TH FR DA SU MO TU WE TH FR DA SU MO TU WE TH FR DA SU |
|||
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|Perl}}== |
=={{header|Perl}}== |