Skip to content

Commit e642e87

Browse files
authored
Update 906-super-palindromes.js
1 parent 67f7b27 commit e642e87

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

906-super-palindromes.js

+45
Original file line numberDiff line numberDiff line change
@@ -153,3 +153,48 @@ const isPalindrome = function (nr) {
153153
return true;
154154
}
155155
};
156+
157+
// another
158+
159+
/**
160+
* @param {string} left
161+
* @param {string} right
162+
* @return {number}
163+
*/
164+
const superpalindromesInRange = function (left, right) {
165+
let ans = 9 >= left && 9 <= right ? 1 : 0
166+
167+
const isPal = (str) => {
168+
for (let i = 0, j = str.length - 1; i < j; i++, j--)
169+
if (str.charAt(i) !== str.charAt(j)) return false
170+
return true
171+
}
172+
173+
for (let dig = 1; dig < 10; dig++) {
174+
let isOdd = dig % 2 && dig !== 1,
175+
innerLen = (dig >> 1) - 1,
176+
innerLim = Math.max(1, 2 ** innerLen),
177+
midPos = dig >> 1,
178+
midLim = isOdd ? 3 : 1
179+
for (let edge = 1; edge < 3; edge++) {
180+
let pal = new Uint8Array(dig)
181+
;(pal[0] = edge), (pal[dig - 1] = edge)
182+
if (edge === 2) (innerLim = 1), (midLim = Math.min(midLim, 2))
183+
for (let inner = 0; inner < innerLim; inner++) {
184+
if (inner > 0) {
185+
let innerStr = inner.toString(2).padStart(innerLen, '0')
186+
for (let i = 0; i < innerLen; i++)
187+
(pal[1 + i] = innerStr[i]), (pal[dig - 2 - i] = innerStr[i])
188+
}
189+
for (let mid = 0; mid < midLim; mid++) {
190+
if (isOdd) pal[midPos] = mid
191+
let palin = ~~pal.join(''),
192+
square = BigInt(palin) * BigInt(palin)
193+
if (square > right) return ans
194+
if (square >= left && isPal(square.toString())) ans++
195+
}
196+
}
197+
}
198+
}
199+
return ans
200+
}

0 commit comments

Comments
 (0)