48 lines
1.5 KiB
Text
48 lines
1.5 KiB
Text
import "./date" for Date
|
|
import "./fmt" for Fmt
|
|
import "./seq" for Lst
|
|
|
|
var calendar = Fn.new { |year|
|
|
var snoopy = "🐶"
|
|
var days = "Su Mo Tu We Th Fr Sa"
|
|
var months = [
|
|
"January", "February", "March", "April", "May", "June",
|
|
"July", "August", "September", "October", "November", "December"
|
|
]
|
|
Fmt.print("$70m", snoopy)
|
|
var yearStr = "--- %(year) ---"
|
|
Fmt.print("$70m\n", yearStr)
|
|
var first = List.filled(3, 0)
|
|
var mlen = List.filled(3, 0)
|
|
var c = 0
|
|
for (chunk in Lst.chunks(months, 3)) {
|
|
for (i in 0..2) Fmt.write("$20m ", chunk[i])
|
|
System.print()
|
|
for (i in 0..2) System.write("%(days) ")
|
|
System.print()
|
|
first[0] = Date.new(year, c*3 + 1, 1).dayOfWeek % 7
|
|
first[1] = Date.new(year, c*3 + 2, 1).dayOfWeek % 7
|
|
first[2] = Date.new(year, c*3 + 3, 1).dayOfWeek % 7
|
|
mlen[0] = Date.monthLength(year, c*3 + 1)
|
|
mlen[1] = Date.monthLength(year, c*3 + 2)
|
|
mlen[2] = Date.monthLength(year, c*3 + 3)
|
|
for (i in 0..5) {
|
|
for (j in 0..2) {
|
|
var start = 1 + 7 * i - first[j]
|
|
for (k in start..start+6) {
|
|
if (k >= 1 && k <= mlen[j]) {
|
|
Fmt.write("$2d ", k)
|
|
} else {
|
|
System.write(" ")
|
|
}
|
|
}
|
|
System.write(" ")
|
|
}
|
|
System.print()
|
|
}
|
|
System.print()
|
|
c = c + 1
|
|
}
|
|
}
|
|
|
|
calendar.call(1969)
|