diff --git a/euler.rb b/euler.rb index 244fa9f..25f79dc 100644 --- a/euler.rb +++ b/euler.rb @@ -4,6 +4,20 @@ class Integer def to_digit_list self.to_s.split('').map(&:to_i) end + + def factorial + i = 1 + n = self + while (n > 0) + i *= n + n -= 1 + end + i + end + + def choose(k) + factorial / (k.factorial * (self - k).factorial) + end end module Euler diff --git a/euler053.rb b/euler053.rb new file mode 100644 index 0000000..4da5844 --- /dev/null +++ b/euler053.rb @@ -0,0 +1,11 @@ +require_relative 'euler' + +def solution + result = 0 + (1..100).each do |n| + (1..n).each do |k| + result += 1 if n.choose(k) > 1000000 + end + end + result +end diff --git a/euler055.rb b/euler055.rb new file mode 100644 index 0000000..2264286 --- /dev/null +++ b/euler055.rb @@ -0,0 +1,17 @@ +require_relative 'euler' + +def reverse_and_add(n) + n + Euler.from_digit_list(n.to_digit_list.reverse) +end + +def lychrel_number?(n) + 50.times do + n = reverse_and_add(n) + return false if Euler.palindrome?(n) + end + true +end + +def solution + (1..10000).count { |x| lychrel_number?(x) } +end