September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
|
|
@ -1 +1,55 @@
|
|||
"0-2,4,6-8,11,12,14-25,27-33,35-39"
|
||||
(() => {
|
||||
'use strict';
|
||||
|
||||
// rangeFormat :: [Int] -> String
|
||||
const rangeFormat = xs =>
|
||||
splitBy((a, b) => b - a > 1, xs)
|
||||
.map(rangeString)
|
||||
.join(',');
|
||||
|
||||
// rangeString :: [Int] -> String
|
||||
const rangeString = xs =>
|
||||
xs.length > 2 ? (
|
||||
[head(xs), last(xs)].map(show)
|
||||
.join('-')
|
||||
) : xs.join(',')
|
||||
|
||||
|
||||
// GENERIC FUNCTIONS
|
||||
|
||||
// Splitting not on a delimiter, but whenever the relationship between
|
||||
// two consecutive items matches a supplied predicate function
|
||||
|
||||
// splitBy :: (a -> a -> Bool) -> [a] -> [[a]]
|
||||
const splitBy = (f, xs) => {
|
||||
if (xs.length < 2) return [xs];
|
||||
const
|
||||
h = head(xs),
|
||||
lstParts = xs.slice(1)
|
||||
.reduce(([acc, active, prev], x) =>
|
||||
f(prev, x) ? (
|
||||
[acc.concat([active]), [x], x]
|
||||
) : [acc, active.concat(x), x], [
|
||||
[],
|
||||
[h],
|
||||
h
|
||||
]);
|
||||
return lstParts[0].concat([lstParts[1]]);
|
||||
};
|
||||
|
||||
// head :: [a] -> a
|
||||
const head = xs => xs.length ? xs[0] : undefined;
|
||||
|
||||
// last :: [a] -> a
|
||||
const last = xs => xs.length ? xs.slice(-1)[0] : undefined;
|
||||
|
||||
// show :: a -> String
|
||||
const show = x => JSON.stringify(x);
|
||||
|
||||
// TEST
|
||||
return rangeFormat([0, 1, 2, 4, 6, 7, 8, 11, 12, 14,
|
||||
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
|
||||
25, 27, 28, 29, 30, 31, 32, 33, 35, 36,
|
||||
37, 38, 39
|
||||
]);
|
||||
})();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue