2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
180
Task/Calendar/360-Assembly/calendar.360
Normal file
180
Task/Calendar/360-Assembly/calendar.360
Normal file
|
|
@ -0,0 +1,180 @@
|
|||
* calendar 08/06/2016
|
||||
CALENDAR CSECT
|
||||
USING CALENDAR,R13 base register
|
||||
B 72(R15) skip savearea
|
||||
DC 17F'0' savearea
|
||||
STM R14,R12,12(R13) prolog
|
||||
ST R13,4(R15) "
|
||||
ST R15,8(R13) "
|
||||
LR R13,R15 "
|
||||
L R4,YEAR year
|
||||
SRDA R4,32 .
|
||||
D R4,=F'4' year//4
|
||||
LTR R4,R4 if year//4=0
|
||||
BNZ LYNOT
|
||||
L R4,YEAR year
|
||||
SRDA R4,32 .
|
||||
D R4,=F'100' year//100
|
||||
LTR R4,R4 if year//100=0
|
||||
BNZ LY
|
||||
L R4,YEAR year
|
||||
SRDA R4,32 .
|
||||
D R4,=F'400' if year//400
|
||||
LTR R4,R4 if year//400=0
|
||||
BNZ LYNOT
|
||||
LY MVC ML+2,=H'29' ml(2)=29 leapyear
|
||||
LYNOT SR R10,R10 ltd1=0
|
||||
LA R6,1 i=1
|
||||
LOOPI1 C R6,=F'31' do i=1 to 31
|
||||
BH ELOOPI1
|
||||
XDECO R6,XDEC edit i
|
||||
LA R14,TD1 td1
|
||||
AR R14,R10 td1+ltd1
|
||||
MVC 0(3,R14),XDEC+9 sub(td1,ltd1+1,3)=pic(i,3)
|
||||
LA R10,3(R10) ltd1+3
|
||||
LA R6,1(R6) i=i+1
|
||||
B LOOPI1
|
||||
ELOOPI1 LA R6,1 i=1
|
||||
LOOPI2 C R6,=F'12' do i=1 to 12
|
||||
BH ELOOPI2
|
||||
ST R6,M m=i
|
||||
MVC D,=F'1' d=1
|
||||
MVC YY,YEAR yy=year
|
||||
L R4,M m
|
||||
C R4,=F'3' if m<3
|
||||
BNL GE3
|
||||
L R2,M m
|
||||
LA R2,12(R2) m+12
|
||||
ST R2,M m=m+12
|
||||
L R2,YY yy
|
||||
BCTR R2,0 yy-1
|
||||
ST R2,YY yy=yy-1
|
||||
GE3 L R2,YY yy
|
||||
LR R1,R2 yy
|
||||
SRA R1,2 yy/4
|
||||
AR R2,R1 yy+(yy/4)
|
||||
L R4,YY yy
|
||||
SRDA R4,32 .
|
||||
D R4,=F'100' yy/100
|
||||
SR R2,R5 yy+(yy/4)-(yy/100)
|
||||
L R4,YY yy
|
||||
SRDA R4,32 .
|
||||
D R4,=F'400' yy/400
|
||||
AR R2,R5 yy+(yy/4)-(yy/100)+(yy/400)
|
||||
A R2,D r2=yy+(yy/4)-(yy/100)+(yy/400)+d
|
||||
LA R5,153 153
|
||||
M R4,M 153*m
|
||||
LA R5,8(R5) 153*m+8
|
||||
D R4,=F'5' (153*m+8)/5
|
||||
AR R5,R2 ((153*m+8)/5+r2
|
||||
LA R4,0 .
|
||||
D R4,=F'7' r4=mod(r5,7) 0=sun 1=mon ... 6=sat
|
||||
LTR R4,R4 if j=0
|
||||
BNZ JNE0
|
||||
LA R4,7 j=7
|
||||
JNE0 BCTR R4,0 j-1
|
||||
MH R4,=H'3' j*3
|
||||
LR R10,R4 j1=j*3
|
||||
LR R1,R6 i
|
||||
SLA R1,1 *2
|
||||
LH R11,ML-2(R1) ml(i)
|
||||
MH R11,=H'3' j2=ml(i)*3
|
||||
MVC TD2,BLANK td2=' '
|
||||
LA R4,TD1 @td1
|
||||
LR R5,R11 j2
|
||||
LA R2,TD2 @td2
|
||||
AR R2,R10 @td2+j1
|
||||
LR R3,R5 j2
|
||||
MVCL R2,R4 sub(td2,j1+1,j2)=sub(td1,1,j2)
|
||||
LR R1,R6 i
|
||||
MH R1,=H'144' *144
|
||||
LA R14,DA-144(R1) @da(i)
|
||||
MVC 0(144,R14),TD2 da(i)=td2
|
||||
LA R6,1(R6) i=i+1
|
||||
B LOOPI2
|
||||
ELOOPI2 L R1,YEAR year
|
||||
XDECO R1,PG+23 edit year
|
||||
XPRNT PG,35 print year
|
||||
MVC WDLINE,BLANK wdline=' '
|
||||
LA R10,1 lwdline=1
|
||||
LA R8,1 k=1
|
||||
LOOPK3 C R8,=F'3' do k=1 to 3
|
||||
BH ELOOPK3
|
||||
LA R4,WDLINE @wdline
|
||||
AR R4,R10 +lwdline
|
||||
MVC 0(20,R4),WDNA sub(wdline,lwdline+1,20)=wdna
|
||||
LA R10,20(R10) lwdline=lwdline+20
|
||||
C R8,=F'3' if k<3
|
||||
BNL ITERK3
|
||||
LA R10,2(R10) lwdline=lwdline+2
|
||||
ITERK3 LA R8,1(R8) k=k+1
|
||||
B LOOPK3
|
||||
ELOOPK3 LA R6,1 i=1
|
||||
LOOPI4 C R6,=F'12' do i=1 to 12 by 3
|
||||
BH ELOOPI4
|
||||
MVC MOLINE,BLANK moline=' '
|
||||
LA R10,6 lmoline=6
|
||||
LR R8,R6 k=i
|
||||
LOOPK4 LA R2,2(R6) i+2
|
||||
CR R8,R2 do k=i to i+2
|
||||
BH ELOOPK4
|
||||
LR R1,R8 k
|
||||
MH R1,=H'10' *10
|
||||
LA R3,MO-10(R1) mo(k)
|
||||
LA R4,MOLINE @moline
|
||||
AR R4,R10 +lmoline
|
||||
MVC 0(10,R4),0(R3) sub(moline,lmoline+1,10)=mo(k)
|
||||
LA R10,22(R10) lmoline=lmoline+22
|
||||
LA R8,1(R8) k=k+1
|
||||
B LOOPK4
|
||||
ELOOPK4 XPRNT MOLINE,L'MOLINE print months
|
||||
XPRNT WDLINE,L'WDLINE print days of week
|
||||
LA R7,1 j=1
|
||||
LOOPJ4 C R7,=F'106' do j=1 to 106 by 21
|
||||
BH ELOOPJ4
|
||||
MVC PG,BLANK clear buffer
|
||||
LA R9,PG pgi=0
|
||||
LR R8,R6 k=i
|
||||
LOOPK5 LA R2,2(R6) i+2
|
||||
CR R8,R2 do k=i to i+2
|
||||
BH ELOOPK5
|
||||
LR R1,R8 k
|
||||
MH R1,=H'144' *144
|
||||
LA R4,DA-144(R1) da(k)
|
||||
BCTR R4,0 -1
|
||||
AR R4,R7 +j
|
||||
MVC 0(21,R9),0(R4) substr(da(k),j,21)
|
||||
LA R9,22(R9) pgi=pgi+22
|
||||
LA R8,1(R8) k=k+1
|
||||
B LOOPK5
|
||||
ELOOPK5 XPRNT PG,L'PG print buffer
|
||||
LA R7,21(R7) j=j+21
|
||||
B LOOPJ4
|
||||
ELOOPJ4 LA R6,3(R6) i=i+3
|
||||
B LOOPI4
|
||||
ELOOPI4 L R13,4(0,R13) epilog
|
||||
LM R14,R12,12(R13) "
|
||||
XR R15,R15 "
|
||||
BR R14 exit
|
||||
LTORG
|
||||
YEAR DC F'1969' <==
|
||||
MO DC CL10' January ',CL10' February ',CL10' March '
|
||||
DC CL10' April ',CL10' May ',CL10' June '
|
||||
DC CL10' July ',CL10' August ',CL10'September '
|
||||
DC CL10' October ',CL10' November ',CL10' December '
|
||||
ML DC H'31',H'28',H'31',H'30',H'31',H'30'
|
||||
DC H'31',H'31',H'30',H'31',H'30',H'31'
|
||||
WDNA DC CL20'Mo Tu We Th Fr Sa Su'
|
||||
M DS F
|
||||
D DS F
|
||||
YY DS F
|
||||
TD1 DS CL93
|
||||
TD2 DS CL144
|
||||
MOLINE DS CL66
|
||||
WDLINE DS CL66
|
||||
PG DC CL66' '
|
||||
XDEC DS CL12
|
||||
BLANK DC CL144' '
|
||||
DA DS 12CL144
|
||||
YREG
|
||||
END CALENDAR
|
||||
71
Task/Calendar/F-Sharp/calendar.fs
Normal file
71
Task/Calendar/F-Sharp/calendar.fs
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
let getCalendar year =
|
||||
let day_of_week month year =
|
||||
let t = [|0; 3; 2; 5; 0; 3; 5; 1; 4; 6; 2; 4|]
|
||||
let y = if month < 3 then year - 1 else year
|
||||
let m = month
|
||||
let d = 1
|
||||
(y + y / 4 - y / 100 + y / 400 + t.[m - 1] + d) % 7
|
||||
//0 = Sunday, 1 = Monday, ...
|
||||
|
||||
let last_day_of_month month year =
|
||||
match month with
|
||||
| 2 -> if (0 = year % 4 && (0 = year % 400 || 0 <> year % 100)) then 29 else 28
|
||||
| 4 | 6 | 9 | 11 -> 30
|
||||
| _ -> 31
|
||||
|
||||
let get_month_calendar year month =
|
||||
let min (x: int, y: int) = if x < y then x else y
|
||||
let ld = last_day_of_month month year
|
||||
let dw = 7 - (day_of_week month year)
|
||||
[|[|1..dw|];
|
||||
[|dw + 1..dw + 7|];
|
||||
[|dw + 8..dw + 14|];
|
||||
[|dw + 15..dw + 21|];
|
||||
[|dw + 22..min(ld, dw + 28)|];
|
||||
[|min(ld + 1, dw + 29)..ld|]|]
|
||||
|
||||
let sb_fold (f:System.Text.StringBuilder -> 'a -> System.Text.StringBuilder) (sb:System.Text.StringBuilder) (xs:'a array) =
|
||||
for x in xs do (f sb x) |> ignore
|
||||
sb
|
||||
|
||||
let sb_append (text:string) (sb:System.Text.StringBuilder) = sb.Append(text)
|
||||
|
||||
let sb_appendln sb = sb |> sb_append "\n" |> ignore
|
||||
|
||||
let sb_fold_in_range a b f sb = [|a..b|] |> sb_fold f sb |> ignore
|
||||
|
||||
let mask_builder mask = Printf.StringFormat<string -> string>(mask)
|
||||
let center n (s:string) =
|
||||
let l = (n - s.Length) / 2 + s.Length
|
||||
let f n s = sprintf (mask_builder ("%" + (n.ToString()) + "s")) s
|
||||
(f l s) + (f (n - l) "")
|
||||
let left n (s:string) = sprintf (mask_builder ("%-" + (n.ToString()) + "s")) s
|
||||
let right n (s:string) = sprintf (mask_builder ("%" + (n.ToString()) + "s")) s
|
||||
|
||||
let array2string xs =
|
||||
let ys = xs |> Array.map (fun x -> sprintf "%2d " x)
|
||||
let sb = ys |> sb_fold (fun sb y -> sb.Append(y)) (new System.Text.StringBuilder())
|
||||
sb.ToString()
|
||||
|
||||
let xsss =
|
||||
let m = get_month_calendar year
|
||||
[|1..12|] |> Array.map (fun i -> m i)
|
||||
|
||||
let months = [|"January"; "February"; "March"; "April"; "May"; "June"; "July"; "August"; "September"; "October"; "November"; "December"|]
|
||||
|
||||
let sb = new System.Text.StringBuilder()
|
||||
sb |> sb_append "\n" |> sb_append (center 74 (year.ToString())) |> sb_appendln
|
||||
for i in 0..3..9 do
|
||||
sb |> sb_appendln
|
||||
sb |> sb_fold_in_range i (i + 2) (fun sb i -> sb |> sb_append (center 21 months.[i]) |> sb_append " ")
|
||||
sb |> sb_appendln
|
||||
sb |> sb_fold_in_range i (i + 2) (fun sb i -> sb |> sb_append "Su Mo Tu We Th Fr Sa " |> sb_append " ")
|
||||
sb |> sb_appendln
|
||||
sb |> sb_fold_in_range i (i + 2) (fun sb i -> sb |> sb_append (right 21 (array2string (xsss.[i].[0]))) |> sb_append " ")
|
||||
sb |> sb_appendln
|
||||
for j = 1 to 5 do
|
||||
sb |> sb_fold_in_range i (i + 2) (fun sb i -> sb |> sb_append (left 21 (array2string (xsss.[i].[j]))) |> sb_append " ")
|
||||
sb |> sb_appendln
|
||||
sb.ToString()
|
||||
|
||||
let printCalendar year = getCalendar year
|
||||
|
|
@ -71,10 +71,8 @@ center :: Int -> String -> String
|
|||
center i a = T.unpack . (T.center i ' ') $ T.pack a
|
||||
|
||||
printCal :: [[[T.Text]]] -> IO ()
|
||||
printCal [] = return ()
|
||||
printCal (c:cx) = do
|
||||
mapM_ (putStrLn . T.unpack) rows
|
||||
printCal cx
|
||||
printCal = mapM_ f where
|
||||
f c = mapM_ (putStrLn . T.unpack) rows
|
||||
where rows = map (T.intercalate calMargin) $ transpose c
|
||||
|
||||
printCalendar :: Integer -> Int -> IO ()
|
||||
|
|
|
|||
52
Task/Calendar/Kotlin/calendar.kotlin
Normal file
52
Task/Calendar/Kotlin/calendar.kotlin
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
import java.text.*
|
||||
import java.util.*
|
||||
import java.io.PrintStream
|
||||
|
||||
internal fun PrintStream.printCalendar(year: Int, nCols: Byte, locale: Locale?) {
|
||||
if (nCols < 1 || nCols > 12)
|
||||
throw IllegalArgumentException("Illegal column width.")
|
||||
val w = nCols * 24
|
||||
val nRows = Math.ceil(12.0 / nCols).toInt()
|
||||
|
||||
val date = GregorianCalendar(year, 0, 1)
|
||||
var offs = date.get(Calendar.DAY_OF_WEEK) - 1
|
||||
|
||||
val days = DateFormatSymbols(locale).shortWeekdays.slice(1..7).map { it.slice(0..1) }.joinToString(" ", " ")
|
||||
val mons = Array(12) { Array(8) { "" } }
|
||||
DateFormatSymbols(locale).months.slice(0..11).forEachIndexed { m, name ->
|
||||
val len = 11 + name.length / 2
|
||||
val format = MessageFormat.format("%{0}s%{1}s", len, 21 - len)
|
||||
mons[m][0] = String.format(format, name, "")
|
||||
mons[m][1] = days
|
||||
val dim = date.getActualMaximum(Calendar.DAY_OF_MONTH)
|
||||
for (d in 1..42) {
|
||||
val isDay = d > offs && d <= offs + dim
|
||||
val entry = if (isDay) String.format(" %2s", d - offs) else " "
|
||||
if (d % 7 == 1)
|
||||
mons[m][2 + (d - 1) / 7] = entry
|
||||
else
|
||||
mons[m][2 + (d - 1) / 7] += entry
|
||||
}
|
||||
offs = (offs + dim) % 7
|
||||
date.add(Calendar.MONTH, 1)
|
||||
}
|
||||
|
||||
printf("%" + (w / 2 + 10) + "s%n", "[Snoopy Picture]")
|
||||
printf("%" + (w / 2 + 4) + "s%n%n", year)
|
||||
|
||||
for (r in 0..nRows - 1) {
|
||||
for (i in 0..7) {
|
||||
var c = r * nCols
|
||||
while (c < (r + 1) * nCols && c < 12) {
|
||||
printf(" %s", mons[c][i])
|
||||
c++
|
||||
}
|
||||
println()
|
||||
}
|
||||
println()
|
||||
}
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
System.out.printCalendar(1969, 3, Locale.US)
|
||||
}
|
||||
63
Task/Calendar/Lua/calendar.lua
Normal file
63
Task/Calendar/Lua/calendar.lua
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
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=((year-1)*365+math.floor((year-1)/4)-math.floor((year-1)/100)+math.floor((year-1)/400))%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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue