RosettaCodeData/Task/Five-weekends/JavaScript/five-weekends-3.js

55 lines
1.4 KiB
JavaScript

(function () {
'use strict';
// longMonthsStartingFriday :: Int -> Int
function longMonthsStartingFriday(y) {
return [0, 2, 4, 6, 7, 9, 11]
.filter(function (m) {
return (new Date(Date.UTC(y, m, 1)))
.getDay() === 5;
});
}
// range :: Int -> Int -> [Int]
function range(m, n) {
return Array.apply(null, Array(n - m + 1))
.map(function (x, i) {
return m + i;
});
}
var lstNames = [
'January', '', 'March', '', 'May', '',
'July', 'August', '', 'October', '', 'December'
],
lstYears = range(1900, 2100),
lstFullMonths = lstYears
.reduce(function (a, y) {
var strYear = y.toString();
return a.concat(
longMonthsStartingFriday(y)
.map(function (m) {
return strYear + ' ' + lstNames[m];
})
);
}, []),
lstLeanYears = lstYears
.filter(function (y) {
return longMonthsStartingFriday(y)
.length === 0;
});
return JSON.stringify({
number: lstFullMonths.length,
firstFive: lstFullMonths.slice(0, 5),
lastFive: lstFullMonths.slice(-5),
leanYearCount: lstLeanYears.length
},
null, 2
);
})();