Anonymous user
Calendar - for "REAL" programmers: Difference between revisions
→{{header|Lua}}: cat cal.lua | tr [a-z [A-Z]
(Added Lua version) |
(→{{header|Lua}}: cat cal.lua | tr [a-z [A-Z]) |
||
Line 1,147:
=={{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>
Line 1,251 ⟶ 1,254:
</pre>
=={{header|Perl}}==
Since we can't use <code>eval</code> or <code>print</code> (or any other keywords)
|