Last Friday of each month: Difference between revisions
Content added Content deleted
m (Corrected header for JavaScript) |
(→JS ES6: Updated primitives, tidied) |
||
Line 1,812: | Line 1,812: | ||
===ES6=== |
===ES6=== |
||
<lang JavaScript>(() => { |
<lang JavaScript>(() => { |
||
"use strict"; |
|||
// ------------ LAST FRIDAY OF EACH MONTH ------------ |
|||
// lastWeekDaysOfYear :: Int -> Int -> [Date] |
// lastWeekDaysOfYear :: Int -> Int -> [Date] |
||
const lastWeekDaysOfYear = |
const lastWeekDaysOfYear = iWeekDay => |
||
y => { |
|||
const isLeap = n => ( |
|||
(0 === n % 4) && (0 !== n % 100)) || ( |
|||
0 === y % 400 |
|||
); |
|||
⚫ | |||
return [ |
|||
31, isLeap(y) ? 29 : 28, |
|||
31, 30, 31, 30, 31, 31, 30, 31, 30, 31 |
|||
⚫ | |||
⚫ | |||
⚫ | |||
y, m, d - (( |
|||
new Date(Date.UTC( |
|||
y, m, d |
|||
⚫ | |||
.getDay() + (7 - iWeekDay) |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
const days = { |
const days = { |
||
Line 1,837: | Line 1,852: | ||
}; |
}; |
||
// ---------------------- TEST ----------------------- |
|||
⚫ | |||
⚫ | |||
⚫ | |||
enumFromTo(2015)(2019) |
|||
⚫ | |||
) |
|||
⚫ | |||
row => row.map(isoDateString).join("\t") |
|||
) |
|||
.join("\n"); |
|||
⚫ | |||
⚫ | |||
const enumFromTo = m => |
|||
n => Array.from({ |
|||
⚫ | |||
}, (_, i) => m + i); |
|||
// curry :: ((a, b) -> c) -> a -> b -> c |
|||
const curry = f => a => b => f(a, b); |
|||
// isoDateString :: Date -> String |
// isoDateString :: Date -> String |
||
Line 1,847: | Line 1,878: | ||
.substr(0, 10); |
.substr(0, 10); |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
// transpose :: [[a]] -> [[a]] |
// transpose :: [[a]] -> [[a]] |
||
const transpose = |
const transpose = rows => |
||
// The columns of the input transposed |
|||
⚫ | |||
// into new rows. |
|||
0 < rows.length ? rows[0].map( |
|||
(x, i) => rows.flatMap( |
|||
v => v[i] |
|||
) |
|||
) : []; |
|||
// |
// MAIN --- |
||
return |
return main(); |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
})();</lang> |
})();</lang> |
||
{{Out}} |
{{Out}} |