Odin SolutionsOdin Solutions

✂️

Kaprekar Numbers

Week 45, 2026

All Solutions

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 }