f(1, 1) = 100
f(1, 95) = 1.05
f = ?
x - x1 y - y1
------- = -------
x2 - x1 y2 - y1
98.95 * x + 94 * y = 9498.95
(1, 2)
— должно быть >=2
[(-4, -1), (-2, 2)]
[(3, 2), (4, 0)]
1, 2, 3
на входе даст «случайно» разбросанные на выходе.10101101 // вход: 173
10110101 // отзеркалили = 181
01010000 // секрет = 80
// поменяли местами где "1" в секрете
11100101 // получилось 229
0 .. 0x3FFF
это 14 бит. На входе, видимо, надо тоже 14, хотя можно домножить. |--------------------|
|--------------------|
|--|
0-----1-----2-----3--
физика 50%, химия 49%, биология 48%, английский 10% -----> главные будут физика, химия, биология.
(50+49+48+10)/4 = 39.25
– выше желаемые три: физика, химия, биология. ОКфизика 50%, химия 9%, биология 8%, английский 7% -----> главным будет только физика.
(50+9+8+7)/4 = 18.5
, выше только физика, ОКфизика 50%, химия 49%, биология 49%, английский 48% -----> главными будут физика и химия.
(50+49+49+48)/4 = 49
FAIL [+3, +2, +1, +0]
, всё получается:(53+51+50+48)/4 = 50.5
рвёт точно как хотелось: физика и химия выше. OKфизика 50%, химия 30%, биология 1%, английский 1% -----> главными будут физика и химия.
(50+30+1+1)/4 = 20.6
физика и химия FTW. OKфизика 50%, химия 30%, биология 30%, английский 30% -----> главным буде только физика.
(50+30+30+30)/4 = 35
; выше 35 только физика. ОК const maxprod = arr => {
const a = arr.slice().sort((a, b) => b - a);
const max = a[0];
const len = a.length;
let iter = 0;
for (let i = 1; i < len - 2; i++) {
iter++;
const A2 = a[i];
const x2 = max / A2;
if (!Number.isInteger(x2)) continue;
for (let j = i + 1; j < len - 1; j++) {
iter++;
const A3 = a[j];
const x3 = x2 / A3;
if (!Number.isInteger(x3)) continue;
if (!!~a.indexOf(x3)) {
return [max, A2, A3, x3, iter]);
}
}
}
return false;
}
indexOf()
всё равно перебирает массив.[
[20,5,3,2,2], // [ 20, 5, 2, 2, 3 ]
[7,9,4,60,5,3,2,2], // [ 60, 5, 4, 3, 4 ]
[1,2,3,199], // false
[2430,2431,2431,2431,1,1,1,2,3,5,7,9,11,13,15,17,19,23], // [ 2431, 17, 13, 11, 8 ]
].forEach(test => console.log(test, maxprod(test)));
0
до 2^(n-1)
и их двоичная запись кодирует знаки.>= S
. Чтобы сразу отсечь проверку вариантов получения 1E9 из всего 1E6 единиц. Эта же проверка имеет смысл в процессе перебора, для оценки, дотянутся ли оставшиеся цифры до оставшейся до S суммы// но тесты проходит
function repairCase(src, input) {
const len = input.length;
if (len === 0) return '';
const _src = src.toLowerCase();
const _input = input.toLowerCase();
let i, from = 0, maxWeight = -1, maxIndex = -1;
while (i = _src.indexOf(_input, from), -1 !== i) {
from = i + 1;
const match = src.substr(i, len);
let weight = 0;
for (let k = 0; k < len; k++) if (match[k] === input[k]) weight++;
if (maxWeight < weight) {
maxWeight = weight;
maxIndex = i;
}
}
if (-1 === maxIndex) return '';
return src.substr(maxIndex, len);
}
[0, 2346]
оказалось 105 из диапазона "B"[0, 1902]
, т.к. длина "B" 544-101+1 = 444
, 2346 - 444 = 1902
[0,1902]
оказалось, например, 404. Для чисел выше 100 добавляем 444 и получаем 848 из диапазона "C" по старому стилю )