Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
51
Task/Run-length-encoding/JavaScript/run-length-encoding-4.js
Normal file
51
Task/Run-length-encoding/JavaScript/run-length-encoding-4.js
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
(() => {
|
||||
'use strict';
|
||||
|
||||
// runLengthEncode :: String -> [(Int, Char)]
|
||||
const runLengthEncoded = s =>
|
||||
group(s.split('')).map(
|
||||
cs => [cs.length, cs[0]]
|
||||
);
|
||||
|
||||
// runLengthDecoded :: [(Int, Char)] -> String
|
||||
const runLengthDecoded = pairs =>
|
||||
pairs.map(([n, c]) => c.repeat(n)).join('');
|
||||
|
||||
|
||||
// ------------------------TEST------------------------
|
||||
const main = () => {
|
||||
const
|
||||
xs = 'WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWW' +
|
||||
'WWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW',
|
||||
ys = runLengthEncoded(xs);
|
||||
|
||||
console.log('From: ', show(xs));
|
||||
[ys, runLengthDecoded(ys)].forEach(
|
||||
x => console.log(' -> ', show(x))
|
||||
)
|
||||
};
|
||||
|
||||
// ----------------------GENERIC-----------------------
|
||||
|
||||
// group :: [a] -> [[a]]
|
||||
const group = xs => {
|
||||
// A list of lists, each containing only equal elements,
|
||||
// such that the concatenation of these lists is xs.
|
||||
const go = xs =>
|
||||
0 < xs.length ? (() => {
|
||||
const
|
||||
h = xs[0],
|
||||
i = xs.findIndex(x => h !== x);
|
||||
return i !== -1 ? (
|
||||
[xs.slice(0, i)].concat(go(xs.slice(i)))
|
||||
) : [xs];
|
||||
})() : [];
|
||||
return go(xs);
|
||||
};
|
||||
|
||||
// show :: a -> String
|
||||
const show = JSON.stringify;
|
||||
|
||||
// MAIN ---
|
||||
return main();
|
||||
})();
|
||||
Loading…
Add table
Add a link
Reference in a new issue