Rosetta Code

Kaprekar numbers

Test fixed integers for the Kaprekar split-square property.

Intro View source
Source rosettacode/popular/kaprekar_numbers.vibe
# title: Kaprekar numbers
# source: https://rosettacode.org/wiki/Kaprekar_numbers
# category: Rosetta Code
# difficulty: Intro
# summary: Test fixed integers for the Kaprekar split-square property.
# tags: popular, math, numbers, strings
# vibe: 0.2

def digit_value(char)
  "0123456789".index(char)
end

def to_int(text)
  if text == ""
    return 0
  end

  value = 0
  index = 0
  while index < text.length
    value = (value * 10) + digit_value(text.slice(index))
    index = index + 1
  end
  value
end

def kaprekar?(number)
  if number == 1
    return true
  end

  square = "" + (number * number)
  split = 1

  while split < square.length
    left = to_int(square.slice(0, split))
    right = to_int(square.slice(split, square.length - split))
    if right != 0 && left + right == number
      return true
    end
    split = split + 1
  end

  false
end

def run
  [
    { value: 1, kaprekar: kaprekar?(1) },
    { value: 45, kaprekar: kaprekar?(45) },
    { value: 55, kaprekar: kaprekar?(55) },
    { value: 99, kaprekar: kaprekar?(99) },
    { value: 297, kaprekar: kaprekar?(297) },
    { value: 703, kaprekar: kaprekar?(703) },
    { value: 10, kaprekar: kaprekar?(10) }
  ]
end
Output
Press run to execute run from this example.
rosetta-code popular math numbers strings browser-runner