Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
44
Task/Palindrome-dates/JavaScript/palindrome-dates-1.js
Normal file
44
Task/Palindrome-dates/JavaScript/palindrome-dates-1.js
Normal 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();
|
||||
57
Task/Palindrome-dates/JavaScript/palindrome-dates-2.js
Normal file
57
Task/Palindrome-dates/JavaScript/palindrome-dates-2.js
Normal 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();
|
||||
})();
|
||||
Loading…
Add table
Add a link
Reference in a new issue