1
var superpalindromesInRange = function (left, right) {
2
let ans = 9 >= left && 9 <= right ? 1 : 0;
3

4
const isPal = (str) => {
5
for (let i = 0, j = str.length - 1; i < j; i++, j--)
6
if (str.charAt(i) !== str.charAt(j)) return false;
7
return true;
8
};
9

10
for (let dig = 1; dig < 10; dig++) {
11
let isOdd = dig % 2 && dig !== 1,
12
innerLen = (dig >> 1) - 1,
13
innerLim = Math.max(1, 2 ** innerLen),
14
midPos = dig >> 1,
15
midLim = isOdd ? 3 : 1;
16
for (let edge = 1; edge < 3; edge++) {
17
let pal = new Uint8Array(dig);
18
(pal[0] = edge), (pal[dig - 1] = edge);
19
if (edge === 2) (innerLim = 1), (midLim = Math.min(midLim, 2));
20
for (let inner = 0; inner < innerLim; inner++) {
21
if (inner > 0) {
22
let innerStr = inner.toString(2).padStart(innerLen, "0");
23
for (let i = 0; i < innerLen; i++)
24
(pal[1 + i] = innerStr[i]), (pal[dig - 2 - i] = innerStr[i]);
25
}
26
for (let mid = 0; mid < midLim; mid++) {
27
if (isOdd) pal[midPos] = mid;
28
let palin = ~~pal.join(""),
29
square = BigInt(palin) * BigInt(palin);
30
if (square > right) return ans;
31
if (square >= left && isPal(square.toString())) ans++;
32
}
33
}
34
}
35
}
36
return ans;
37
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0