Last Friday of each month: Difference between revisions
→JS ES6: Updated primitives, tidied
m (Corrected header for JavaScript) |
(→JS ES6: Updated primitives, tidied) |
||
Line 1,812:
===ES6===
<lang JavaScript>(() => {
// ------------ LAST FRIDAY OF EACH MONTH ------------
// lastWeekDaysOfYear :: Int -> Int -> [Date]
const lastWeekDaysOfYear =
y =>
new Date(Date.UTC(▼
return
31, 30, 31, 30, 31, 31, 30, 31, 30, 31
▲ new Date(Date.UTC(
y, m, d - ((
new Date(Date.UTC(
y, m, d
.getDay() + (7 - iWeekDay)
);▼
const days = {
Line 1,837 ⟶ 1,852:
};
// ---------------------- TEST -----------------------
// GENERIC FUNCTIONS▼
enumFromTo(2015)(2019)
)
row => row.map(isoDateString).join("\t")
)
.join("\n");
▲ // ---------------- GENERIC FUNCTIONS ----------------
const enumFromTo = m =>
n => Array.from({
}, (_, i) => m + i);
// isoDateString :: Date -> String
Line 1,847 ⟶ 1,878:
.substr(0, 10);
▲ // range :: Int -> Int -> [Int]
▲ const range = (m, n) =>
▲ Array.from({
▲ length: Math.floor(n - m) + 1
▲ }, (_, i) => m + i);
// transpose :: [[a]] -> [[a]]
const transpose =
// The columns of the input transposed
▲ lst[0].map((_, iCol) =>
// into new
0 < rows.length ? rows[0].map(
(x, i) => rows.flatMap(
v => v[i]
)
) : [];
//
return
▲ range(2015, 2019)
▲ .map(curry(lastWeekDaysOfYear)(days.friday))
▲ )
▲ .map(row => row
▲ .map(isoDateString)
▲ .join('\t'))
▲ .join('\n');
})();</lang>
{{Out}}
|