fork download
  1. f = -> n {
  2. p = -> s {s.size.divmod(2).tap {|q, r| break (s[0, q + r] + s[0, q].reverse).to_i}}
  3. s = n.to_s
  4. t, u = s.size.divmod(2).tap {|q, r| break s[0, q + r], '9' * q}
  5. ps = [p.(s), p.(t.to_i.pred.abs.to_s + u), p.(t.succ + u)]
  6. ps.map {|x| [(n - x).abs, x]}.sort.uniq.group_by(&:first).first.last.map(&:last)
  7. }
  8. p [0, 17, 100, 1000, 10000, 18446744073709551615_18446744073709551615].map {|n| [n, f.(n)]}
Success #stdin #stdout 0.01s 8068KB
stdin
Standard input is empty
stdout
[[0, [0]], [17, [22]], [100, [99, 101]], [1000, [999, 1001]], [10000, [9999, 10001]], [1844674407370955161518446744073709551615, [1844674407370955161551615590737044764481]]]