// ---
function q(x) { return document.querySelector(x); }
function qa(x) { return [...document.querySelectorAll(x)]; }
function range(x) { return Array.from({length: x}, (v, i) => i); }
function rand(x) { return x[Math.floor(Math.random() * x.length)]; }
function randpop(x) { return x.splice(Math.floor(Math.random() * x.length), 1)[0]; }
function shuffle(x) { return x.map(i => [Math.random(), i]).sort().map(i => i[1]); }
function capitalize(x) { return x.charAt(0).toUpperCase() + x.slice(1); }
// ---
function html(x) {
var h = document.createElement('div');
h.innerHTML = x;
return h.children[0];
}
function onenter(ele, f) {
ele.addEventListener('keydown', function (e) {
if (e.keyCode === 13) { f(e); e.preventDefault(); }
})
}
// ---
class Random {
constructor(seed) { this.seed = BigInt(seed); this.next(); }
next() {
this.seed = (this.seed * 0x5DEECE66Dn + 0xBn) & 0xFFFFFFFFFFFFn;
return Number((this.seed >> 10n) & 0xFFFFFFFFn) / 0x100000000;
}
}
// ---
Array.prototype.rand = function() {
return this[Math.floor(Math.random() * this.length)];
}
Array.prototype.randpop = function() {
return this.splice(Math.floor(Math.random() * this.length), 1)[0];
}
Array.prototype.uniq = function() {
return this.filter((i, index, array) => array.indexOf(i) == index);
}
Array.prototype.shuffle = function() {
var n = this.length;
while (n) {
var i = Math.floor(Math.random() * n--);
var t = this[n]; this[n] = this[i]; this[i] = t;
}
return this;
}
Object.prototype.values = function() {
return Object.values(this);
}
Object.prototype.keys = function() {
return Object.keys(this);
}
// ---
// new version
const q = (x) => document.querySelector(x);
const qa = (x) => [...document.querySelectorAll(x)];
const qs = (sub, x) => sub.querySelector(x);
const qsa = (sub, x) => [...sub.querySelectorAll(x)];
const range = (x) => Array.from({length: x}, (v, i) => i);
const shuffle = (x) => x.map(i => [Math.random(), i]).sort().map(i => i[1]);
const uniq = (x) => x.filter((i, index, array) => array.indexOf(i) == index);
const rand = (x) => x[Math.floor(Math.random() * x.length)];
const randpop = (x) => x.splice(Math.floor(Math.random() * x.length), 1)[0];
const capitalize = (x) => x.charAt(0).toUpperCase() + x.slice(1);
const isArray = (x) => Array.isArray(x);
const isFunc = (x) => typeof (x) === "function";
const isObject = (x) => x && typeof (x) === "object";
const objectGet = (o, [head, ...tail]) => tail.length == 0 ? o[head] : objectGet(o[head], tail, value)
const objectSet = (o, [head, ...tail], value) => tail.length == 0 ? o[head] = value : objectSet(o[head], tail, value)
const now = () => (performance.timeOrigin + performance.now());
const nows = () => (performance.timeOrigin + performance.now()) / 1000;
function html(x) {
var h = document.createElement('div');
h.innerHTML = x;
return h.children[0];
}
function onenter(ele, f) {
ele.addEventListener('keydown', function (e) {
if (e.keyCode === 13) { f(e); e.preventDefault(); }
})
}
class Random {
constructor(seed) { this.seed = BigInt(seed); this.next(); }
next() {
this.seed = (this.seed * 0x5DEECE66Dn + 0xBn) & 0xFFFFFFFFFFFFn;
return Number((this.seed >> 10n) & 0xFFFFFFFFn) / 0x100000000;
}
}