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 }