ブログ

読んで思い出す。忘れるために書く

3ケタの数字から「カプレカ数」を探す

3ケタの数字から見つかる カプレカ数 は「495」が唯一らしい

与えられた数値に対して「カプレカ操作」を実行し、値がおなじになるものの数を探してみた

ループ処理でゴリ押し

def kaprekar_manipulate(n)
  # 桁数を昇順・降順に並べ替える
  max = 
    n.to_s
     .chars
     .map(&:to_i)
     .sort
     .reverse
     .map(&:to_s)
     .join
     .to_i

  min =
    n.to_s
     .chars
     .map(&:to_i)
     .sort
     .map(&:to_s)
     .join
     .to_i

  # for debug
  # pp max
  # pp min

  max - min
end

# n = 495
# p is_kaprekar_number = 
#   kaprekar_manipulate(n).eql?(n) # => true

ret =
  (100..999).map do |n|
    kaprekar_manipulate(n).eql?(n)
  end.filter { |bool| bool }
     .size
p ret # => 1

カプレカ操作を繰り返すことで、プログラムは無限ループに陥るか、カプレカ数を発見できるか分岐するらしい

Links