All SolutionsAll Solutions
✂️
Kaprekar Numbers
Week 45, 2026
Python - Loop, Split & Check | BMC | Python Solutions
def writeToFile(fileName:str, data:list[str]) -> None:
try:
file = open(fileName, 'w')
for line in data:
file.write(line+'\n')
file.close()
print("[WTF] Ans.txt made..")
except:
print('[ERROR] File problem :/')
def isKeprekar(num:int) -> tuple[bool, list[str]]:
isK, ans = False, []
square = num*num
sNum = str(square)
for i in range(1, len(sNum)):
left = int(sNum[0:i])
righ = int(sNum[i:])
if (
left != 0 and
righ != 0 and
(left+righ) == num
):
ans.append(sNum[0:i])
ans.append(sNum[i:])
isK = True
break
return isK, ans
def main() -> None:
'''
9 (81): 8 + 1
45 (2025): 20 + 25
55 (3025): 30 + 25
99 (9801): 98 + 01
'''
data = []
for i in range(1, 1_000_001):
check, ans = isKeprekar(i)
if check:
print(f'{i} ({i*i}): {ans[0]} + {ans[-1]}')
data.append(f'{i} ({i*i}): {ans[0]} + {ans[-1]}')
print("[main] 1 -> 1_000_000 Keprekar done...")
print(f"[main] data has {len(data)} lines")
writeToFile("ans.txt", data)
if __name__ == "__main__":
main()
Split iterate and check | greenya | Odin Solutions
package main
import "core:fmt"
import "core:strconv"
main :: proc () {
for i in 1..=1_000_000 do check(i)
}
check :: proc (num: int) {
num_sq := num * num
it := split_iterate(num_sq)
for l, r in split_next(&it) {
if num!=l+r || l==0 || r==0 do continue
fmt.printfln("%d (%d): %d + %d", num, num_sq, l, r)
}
}
Split_Iterator :: struct {
buf: [100] byte,
str: string,
pos: int,
}
split_iterate :: proc (num: int) -> (it: Split_Iterator) {
it.str = fmt.bprint(it.buf[:], num)
return
}
split_next :: proc (it: ^Split_Iterator) -> (l, r: int, ok: bool) {
i := it.pos + 1
if i >= len(it.str) do return
l, _ = strconv.parse_int(string(it.buf[:i]))
r, _ = strconv.parse_int(string(it.buf[i:]))
it.pos += 1
return l, r, true
}