Недавно я вытащил алгоритм расчета контрольной суммы из одного приложения
function dfs(idx, rest, stack) {
if (rest) {
if (idx) {
idx -= 1;
dfs(idx, rest, stack);
if (rest < data[idx]) return;
stack.push(data[idx]);
dfs(idx, rest - data[idx], stack)
stack.pop();
}
} else
console.log(stack);
}
const data = [1, 2, 3, 8, 7, 4].reverse(), n = 10;
dfs(data.length, n, []);
function friday13(year) {
for (let month = 0; month < 12; month++) {
let d = new Date(year, month, 13);
if (d.getDay() === 5) return d;
}
}
console.log(friday13(2019));
не особо разобравшись в ее теорииЭто звучит забавно.
let one = ['one', 'two', 'three', 'four', 'five'];
let two = ['a', 'b', 'five', 'c', 'one'];
one.sort();
two.sort();
let i = one.length, j = two.length, three = [];
while (i > 0 && j > 0) {
i--;
j--;
if (one[i] > two[j]) j++;
else if (one[i] < two[j]) i++;
else three.push(one[i]);
}
console.log(three);
Можно воспользоваться библиотекой:const _ = require("lodash");
console.log(_.intersection(one, two));
Можно воспользоваться встроенным классом Set (пусть будет задание на дом).const palette = [
'#000000', '#000055', '#0000aa', '#0000ff',
'#005500', '#005555', '#0055aa', '#0055ff',
'#00aa00', '#00aa55', '#00aaaa', '#00aaff',
'#00ff00', '#00ff55', '#00ffaa', '#00ffff',
'#550000', '#550055', '#5500aa', '#5500ff',
'#555500', '#555555', '#5555aa', '#5555ff',
'#55aa00', '#55aa55', '#55aaaa', '#55aaff',
'#55ff00', '#55ff55', '#55ffaa', '#55ffff',
'#aa0000', '#aa0055', '#aa00aa', '#aa00ff',
'#aa5500', '#aa5555', '#aa55aa', '#aa55ff',
'#aaaa00', '#aaaa55', '#aaaaaa', '#aaaaff',
'#aaff00', '#aaff55', '#aaffaa', '#aaffff',
'#ff0000', '#ff0055', '#ff00aa', '#ff00ff',
'#ff5500', '#ff5555', '#ff55aa', '#ff55ff',
'#ffaa00', '#ffaa55', '#ffaaaa', '#ffaaff',
'#ffff00', '#ffff55', '#ffffaa', '#ffffff'
];
илиconst palette = [
'#000', '#500', '#a00', '#f00', '#050', '#550', '#a50', '#f50',
'#0a0', '#5a0', '#aa0', '#fa0', '#0f0', '#5f0', '#af0', '#ff0',
'#005', '#505', '#a05', '#f05', '#055', '#555', '#a55', '#f55',
'#0a5', '#5a5', '#aa5', '#fa5', '#0f5', '#5f5', '#af5', '#ff5',
'#00a', '#50a', '#a0a', '#f0a', '#05a', '#55a', '#a5a', '#f5a',
'#0aa', '#5aa', '#aaa', '#faa', '#0fa', '#5fa', '#afa', '#ffa',
'#00f', '#50f', '#a0f', '#f0f', '#05f', '#55f', '#a5f', '#f5f',
'#0af', '#5af', '#aaf', '#faf', '#0ff', '#5ff', '#aff', '#fff'
];
function foo() {
bar.a = 42;
}
function bar() {
console.log(bar.a)
}
foo();
bar();
let users = [111, 333, 444, 666, 777], // важно, что массивы отсортированы
blacklist = [111, 222, 333, 555, 888],
intersection = [];
users.unshift(-1); // -1 заведомо меньше всех
blacklist.unshift(-1);
for (let u = users.pop(), b = blacklist.pop(); u > -1 || b > -1;) {
if (u > b) u = users.pop();
else if (u < b) b = blacklist.pop();
else {
intersection.push(u);
u = users.pop();
b = blacklist.pop();
}
}
intersection.reverse(); // если это вообще надо
console.log(intersection);