return (
<div>
<a href={uri} draggable={false}>
{label}
</a>
<CustomComponent ... />
</div>
);
почему в первом тесте ответ 2 5, а не 1 4индексы здесь начинаются с 1, а не с 0.
typescript почему то в автокомплите показывает свойство name игнорируя остальные
if ("children" in obj) {
obj.children ...
} else {
obj.link ....
}
// ------- utls ----------
function getRand(n) {
return Math.floor(Math.random() * n);
}
function fact(n) {
let f = 1;
for (let i = 2; i <= n; ++i) {
f *= i;
}
return f;
}
function shuffle(arr) {
for (let i = arr.length - 1; i > 0; --i) {
const r = getRand(i + 1);
const t = arr[r];
arr[r] = arr[i];
arr[i] = t;
}
return arr;
}
// ------- classes ----------
class Str extends String {
getCount() { return 1; }
}
class Line {
arr = [];
toString() {
return this.arr.slice(0).join('');
}
getCount() {
return this.arr.reduce((r, a) => r * a.getCount(), 1);
}
}
class Select {
arr = [];
toString() {
return this.arr[getRand(this.arr.length)].toString();
}
getCount() {
return this.arr.reduce((r, a) => r + a.getCount(), 0);
}
}
class Order extends Line {
arr = [];
toString() {
return shuffle(this.arr).join('');
}
getCount() {
return fact(this.arr.length) * this.arr.reduce((r, a) => r * a.getCount(), 1);
}
}
// ------- parse ----------
function parse(str) {
const reg = /[{}|\[\]]/g;
let start = 0;
let line = new Line();
const stack = [{
arr: [line],
}];
// debugger;
while (true) {
const match = reg.exec(str);
if (!match) {
if (str.length - start > 0) {
line.arr.push(new Str(str.substring(start)));
}
break;
}
if (match.index - start > 0) {
line.arr.push(new Str(str.substring(start, match.index)));
}
start = reg.lastIndex;
const c = match[0];
if (c === '{' || c === '[') {
const container = c === '{' ? new Select() : new Order();
line.arr.push(container);
stack.push(container);
line = new Line();
container.arr.push(line);
} else {
if (stack.length < 2) {
return null;
}
const container = stack[stack.length - 1];
if (line.arr.length === 1) {
container.arr[container.arr.length - 1] = line.arr[line.arr.length - 1];
}
if (c === '|') {
line = new Line();
container.arr.push(line);
} else {
stack.pop();
const arr = stack[stack.length - 1].arr;
line = arr[arr.length - 1];
}
}
}
return stack.length > 1 ? null : line.arr.length === 1 ? line.arr[0] : line;
}
// --------
const p = parse('{ttt|2}qqq[1|2|3{[4|q]|5}]');
console.log(p.toString());
console.log(p.getCount());
console.log(p);
на одном блоке остановится и сделать скролл горизонтальный как только блок дойдет до конца пойдет опять скролл вниз!
function addWheat(blocks) {
let leftPos = 0;
let rightPos = blocks.length - 1;
let leftMax = -Infinity;
let rightMax = -Infinity;
let sum = 0;
while (leftPos < rightPos) {
const leftValue = blocks[leftPos];
const rigthValue = blocks[rightPos];
if (leftValue < rigthValue) {
leftMax = Math.max(leftMax, leftValue);
sum += leftMax - leftValue;
leftPos++;
} else {
rightMax = Math.max(rightMax, rigthValue);
sum += rightMax - rigthValue;
rightPos--;
}
}
return sum;
}
return new Promise((resolve, reject) => {
fetch(url).then(data => resolve(data.json())).then(null, err => {throw err})
})
then(null, reject)