2014-10-23 2 views
0

perfect numbers의 배열을 인쇄하는 스크립트를 작성하려고합니다. 어려운 부분은 하나의 식 (줄)에서만이 작업을 수행해야한다는 것입니다. 하나의 표현식에 완벽한 숫자 배열

나는 몇 가지 유용한 방법에 대한 루비 문서를 검색하지만 난 완벽한 숫자에 대해 아무것도 찾지 못했습니다, 그래서 두 함수를 사용하여이 작업을 수행하기 위해 관리 :

def is_perf(n) 
n == (1...n).select {|i| n % i == 0}.inject(:+) 
end 

def perfects(range) 
(array = (2..range).to_a).each{|p|array.delete_if{|x| is_perf(x)==false }} 
end 

누군가 나를 그냥이 짜 도와 드릴까요 한 줄 ? 이 같은 예를 들어

답변

0

:

(2..1000).select { |p| p == (1...p).select {|i| p % i == 0}.inject(:+) } 
=> [6, 28, 496] 

편집 : 약간 짧은 버전, @steenslag에 의해 제안.

+0

"p if"가 중복됩니다. – steenslag