Palindrome dates: Difference between revisions

m
→‎{{header|Javascript}}: Added a functional variant.
m (→‎{{header|Javascript}}: Added a functional variant.)
Line 857:
 
=={{header|Javascript}}==
===Procedural===
<lang javascript>
<lang javascript>/**
/**
* Adds zeros for 1 digit days/months
* @param date: string
Line 901:
}
 
getPalindromeDates();</lang>
 
</lang>
{{Out}}
<pre>2021-12-02 ​
2021-12-02 ​
2030-03-02 ​
2040-04-02 ​
Line 920 ⟶ 917:
2121-12-12 ​
2130-03-12 ​
2140-04-12 ​</pre>
===Functional===
</pre>
<lang javascript>(() => {
'use strict';
 
// ----------------- PALINDROME DATES ------------------
 
// palindromeDate :: Int -> [String]
const palindromeDate = year => {
// Either an empty list, if no palindomic 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();
})();</lang>
{{Out}}
<pre>Count of palindromic dates [2021..9999]: 284
 
First 15:
2021-12-02
2030-03-02
2040-04-02
2050-05-02
2060-06-02
2070-07-02
2080-08-02
2090-09-02
2101-10-12
2110-01-12
2111-11-12
2120-02-12
2121-12-12
2130-03-12
2140-04-12
 
Last 15:
9170-07-19
9180-08-19
9190-09-19
9201-10-29
9210-01-29
9211-11-29
9220-02-29
9221-12-29
9230-03-29
9240-04-29
9250-05-29
9260-06-29
9270-07-29
9280-08-29
9290-09-29</pre>
 
=={{header|Julia}}==
9,659

edits