RosettaCodeData/Task/Calendar/Wren/calendar.wren
2023-12-16 21:33:55 -08:00

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)