Problem 30

Problem 30

Surprisingly there are only three numbers that can be written as the sum of fourth powers of their digits:

1634 = 1^4 + 6^4 + 3^4 + 4^4
8208 = 8^4 + 2^4 + 0^4 + 8^4
9474 = 9^4 + 4^4 + 7^4 + 4^4

As 1 = 1^4 is not a sum it is not included.

The sum of these numbers is 1634 + 8208 + 9474 = 19316.

Find the sum of all the numbers that can be written as the sum of fifth powers of their digits.

res = 0 (2..200000).each do |n| sum = 0 n.to_s.split('').each { |d| sum += d.to_i ** 5 } res += sum if sum == n end puts res
Powyżej 200 000 się nie doszukałem żadnych.

p (2..300_000).select {|e| e == e.to_s.split('').map{|i| i.to_i ** 5}.inject(:+) }.inject(:+)

teamon wymiata, jestem pod wrażeniem :slight_smile:

Gdzie znajdę opis magicznego inject(:+) ? Samo inject rozumiem, ale czemu ta emotikonka w injectie liczy nam sumę?

To jest z 1.9
inject(:+) to to samo co inject{|s,e| s+=e}

i to nie emotikonka, a symbol ;]

Sprytne i szybkie w pisaniu. :slight_smile:
Ale oboje wiemy, że w rubym nie ma symboli, są tylko emotikonki. :slight_smile:

[quote=teamon]p (2..300_000).select {|e| e == e.to_s.split('').map{|i| i.to_i ** 5}.inject(:+) }.inject(:+)
[/quote]
Moje rozwiązanie zajęło 20 linijek :slight_smile:
Dobrze, że powstał ten dział, teraz wiem jak się pisze programy w “The Ruby Way” :slight_smile:

p (5..500000).select {|n| n.to_s.split('').map {|d| d = d.to_i ** 5}.inject {|sum,i| sum + i} == n}.inject {|all,j| all + j}

443839