34 lines
991 B
JavaScript
34 lines
991 B
JavaScript
(() => {
|
|
'use strict';
|
|
|
|
// transpose :: [[a]] -> [[a]]
|
|
let transpose = xs =>
|
|
xs[0].map((_, iCol) => xs
|
|
.map((row) => row[iCol]));
|
|
|
|
|
|
let xs = 'ABCD CABD ACDB DACB BCDA ACBD ADCB CDAB' +
|
|
' DABC BCAD CADB CDBA CBAD ABDC ADBC BDCA DCBA' +
|
|
' BACD BADC BDAC CBDA DBCA DCAB'
|
|
|
|
return transpose(xs.split(' ')
|
|
.map(x => x.split('')))
|
|
.map(col => col.reduce((a, x) => ( // count of each character in each column
|
|
a[x] = (a[x] || 0) + 1,
|
|
a
|
|
), {}))
|
|
.map(dct => { // character with frequency below mean of distribution ?
|
|
let ks = Object.keys(dct),
|
|
xs = ks.map(k => dct[k]),
|
|
mean = xs.reduce((a, b) => a + b, 0) / xs.length;
|
|
|
|
return ks.reduce(
|
|
(a, k) => a ? a : (dct[k] < mean ? k : undefined),
|
|
undefined
|
|
);
|
|
})
|
|
.join(''); // 4 chars as single string
|
|
|
|
// --> 'DBAC'
|
|
})();
|