function spread(q, volumes) {
const total = volumes.reduce((a, b) => a + b);
const result = volumes.slice().fill(0);
const target = volumes.map((v) => q * v / total);
while (q--) {
const demand = result.map((v, i) => target[i] - v);
const minIndex = demand.indexOf(Math.max(...demand));
result[minIndex]++;
}
return result;
}
spread(4, [1, 10, 3]) // [0, 3, 1]
spread(9, [1, 10, 3]) // [1, 6, 2]
spread(1, [10, 10, 10]) // [1, 0, 0] - слева направо при равных
spread(33, [10, 10, 10]) // [11, 11, 11] - переполняются тоже одинаково
spread(4, [2, 3, 1]) // [ 1, 2, 1 ]
spread(5, [2, 3, 1]) // [ 2, 2, 1 ]
spread(9, [2, 3, 1]) // [ 3, 5, 1 ]
const stars = (n) => {
for (let r = 4; r >= 0; r--) {
const shift = r * 5;
const bits = (n & 31 << shift) >> shift;
console.log(Array(5).fill('').map((_, i) => bits & 1 << i ? '*' : ' ').reverse().join(''));
}
}
stars(0x1e8fa10); // P
stars(0x457e31); // A
****
* *
****
*
*
*
* *
*****
* *
* *
class Name1 {
static method1() {
console.log(1);
}
}
class Name2 {
method2() {
Name1.method1();
}
}
const N2 = new Name2();
N2.method2()
const hasDuplicates = map.size > new Set(Array.from(map, n => n[1].id)).size;
const duplicates = Array
.from([...map].reduce((acc, [ , { id } ]) => acc.set(id, acc.has(id)), new Map))
.reduce((acc, n) => (n[1] && acc.push(n[0]), acc), []);
const count = Array
.from(map.values())
.reduce((acc, { id }) => acc.set(id, -~acc.get(id)), new Map);
arr === undefined
'aBc-dEf-GH' => ['aBc', 'dEf', 'GH']
map()
пробежит по каждому элементу, возвращая новый. 'dEf' => 'Def'
'aBc' => 'abc'
function camelize(str) {
return str.split('-')
.map((word, i) => i ? word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase() : word.toLowerCase())
.join('');
}