Data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 7387c8f97b
commit cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions

View file

@ -0,0 +1,44 @@
/**
* Adds zeros for 1 digit days/months
* @param date: string
*/
const addMissingZeros = date => (/^\d$/.test(date) ? `0${date}` : date);
/**
* Formats a Date to a string. If readable is false,
* string is only numbers (used for comparison), else
* is a human readable date.
* @param date: Date
* @param readable: boolean
*/
const formatter = (date, readable) => {
const year = date.getFullYear();
const month = addMissingZeros(date.getMonth() + 1);
const day = addMissingZeros(date.getDate());
return readable ? `${year}-${month}-${day}` : `${year}${month}${day}`;
};
/**
* Returns n (palindromesToShow) palindrome dates
* since start (or 2020-02-02)
* @param start: Date
* @param palindromesToShow: number
*/
function getPalindromeDates(start, palindromesToShow = 15) {
let date = start || new Date(2020, 3, 2);
for (
let i = 0;
i < palindromesToShow;
date = new Date(date.setDate(date.getDate() + 1))
) {
const formattedDate = formatter(date);
if (formattedDate === formattedDate.split("").reverse().join("")) {
i++;
console.log(formatter(date, true));
}
}
}
getPalindromeDates();

View file

@ -0,0 +1,57 @@
(() => {
'use strict';
// ----------------- PALINDROME DATES ------------------
// palindromeDate :: Int -> [String]
const palindromeDate = year => {
// Either an empty list, if no palindromic date
// can be derived from this year, or a list
// containing a palindromic IS0 8601 date.
const
s = year.toString(),
r = reverse(s),
iso = [
s,
r.slice(0, 2),
r.slice(2, 4)
].join('-');
return isNaN(new Date(iso)) ? (
[]
) : [iso];
};
// ----------------------- TEST ------------------------
const main = () => {
const
xs = enumFromTo(2021)(9999).flatMap(
palindromeDate
);
return [
`Count of palindromic dates [2021..9999]: ${
xs.length
}`,
'',
`First 15: ${'\n' + xs.slice(0, 15).join('\n')}`,
'',
`Last 15: ${'\n' + xs.slice(-15).join('\n')}`
].join('\n');
};
// ----------------- GENERIC FUNCTIONS -----------------
// enumFromTo :: Int -> Int -> [Int]
const enumFromTo = m =>
n => Array.from({
length: 1 + n - m
}, (_, i) => m + i);
// reverse :: [a] -> [a]
const reverse = xs =>
'string' !== typeof xs ? (
xs.slice(0).reverse()
) : xs.split('').reverse().join('');
// MAIN ---
return main();
})();