我的自恋数字的可数线

时间:2014-12-24 09:17:35

标签: ruby enumerable

值是一个整数,这应该取值中的每个数字,将其提高到值的位数的幂,然后将它们相加。

出于某种原因,它适用于除370和371之外的所有东西,在370我得到346和371收益347,这是什么?!

value.to_s.chars.map {|e| e.to_i }
  .inject{|sum, e| sum += e ** value.to_s.length }

2 个答案:

答案 0 :(得分:2)

您缺少inject的初始值。这将有效:

 value.to_s.chars.map {|e| e.to_i }
   .inject(0){|sum, e| sum += e ** value.to_s.length }

来自docs

  

如果没有明确指定备忘录的初始值,那么集合的第一个元素将用作备忘录的初始值。

答案 1 :(得分:-1)

您的问题已得到解答,但这是执行计算的另一种方法。

<强>代码

def sum_powers(value)
  n = value.to_s.size
  n.times.reduce(0) do |t,_|
    value, d = value.divmod(10)
    t + d**n
  end
end

示例

sum_powers(286)
  #=> 736

<强>解释

value = 286
n = value.to_s.size
  #=> 3
t = 0
value, d = value.divmod(10)
  #=> [28, 6]
t + d**n # replaces t
  # 0 + 6**3
  #=> 216
value, d = value.divmod(10)
  #=> [2, 8]
t + d**n # replaces t
  # 216 + 8**3
  #=> 728
value, d = value.divmod(10)
  #=> [0, 2]
t + d**n # replaces t
  # 728 + 2**3
  #=> 736