function getRandomWinner($ppl)
{
$choice = rand(0, array_sum(array_values($ppl)) - 1);
$sum = 0;
foreach($ppl as $name => $rank) {
$sum += $rank;
if ($choice < $sum) return $name;
}
}
$winnerName = getRandomWinner([
'Иван' => 60,
'Максим' => 20,
'Вова' => 20,
]);
[...arr.reduce((acc, c) => (acc.set(c, (acc.get(c) ?? 0) + 1), acc), new Map()).entries()]
.sort((a, b) => b[1] - a[1]).map((el) => el[0])
Собрать словарь (значение: счётчик)
, из него массив пар [key, value]
отсортировать по убыванию второго; оставить только первые. const areEqual = (arrA, arrB) => {
if (arrA.length !== arrB.length) return false;
const a = arrA.slice().sort(), b = arrB.slice().sort();
return a.every((el, i) => el === b[i]);
}
const areEqual = (arrA, arrB) => {
if (arrA.length !== arrB.length) return false;
const a = arrA.slice(), b = arrB.slice();
while (a.length) {
const i = b.indexOf(a.pop());
if (-1 === i) return false;
b.splice(i, 1);
}
return true;
}
private isThumbsCollision(): boolean {
const prop = [
{size: 'width', side: 'right'},
{size: 'height', side: 'top'},
][+this.settings.isVertical];
return this.to.tooltip.element.getBoundingClientRect()[prop.size]
>= this.to.element.getBoundingClientRect()[prop.side]
- this.from.element.getBoundingClientRect()[prop.side];
}
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()
canvas
: сжать по вертикали и повернуть на 45°. Теперь, если рисовать квадраты — получатся ромбики!document.getElementsByClassName('xxx')[0].click();
s
попадает элемент span
, а не значение.const elements = { // сюда складывать элементы
list: [],
btn: [],
};
function pushItem() {
const div = document.createElement('div'); // временный родитель
div.innerHTML = `<div class="listItem">${items.pop()}<button class="delete">Отменить</button></div>`;
elements.list.push(div.querySelector('.listItem');
elements.btn.push(div.querySelector('.delete');
// перенести из временного в постоянный
while (div.childNodes.length) { // с запасом: вдруг там несколько элементов
list.appendChild(div.childNodes[0];
}
};
x
и y
это «радиусы» ромба. Есть координаты центра (cx, cy)
, или, удобнее, (0, 0)
– понятны координаты вершин ромба: (-x, 0), (0, -y), (x, 0), (0, y)
(по часовой стрелке).(0 + 2x, 0)
(центр).(0 + x, 0 + y)
.