# Problem 1 def multiply_three_or_five(from, to) (from...to).select { |i| i%3==0 || i%5==0 }.inject(:+) end "Result:" #=> pry(main)> multiply_three_or_five(0, 1000) #=> 233168 #Problem 2 def find_fibonachi_array(start, last_number) while start[-2] + start[-1] < last_number start << start[-2] + start[-1] end start end def sum(fibonachi_array) fibonachi_array.inject(0) {|sum, num| num.even? ? sum+num : sum } end def even_fibonachi_numbers_sum(start, last_number) sum(find_fibonachi_array(start, last_number)) end #=>pry(main)> even_fibonachi_numbers_sum([1,2], 4_000_000) #=> 4613732 #Problem 3 def prime_factors(last_number) return [] if last_number == 1 factor = (2..last_number).find { |number| last_number%number == 0 } #puts "factor is: " + factor.to_s #puts "prime_factor is: " + prime_factors(last_number / factor).to_s [factor] + prime_factors(last_number / factor) end #=> prime_factors(600_851_475_143) #=> 6857 # Problem 4 def polindrome_number(first_num, second_num=first_num) product = first_num * second_num return product if number_is_polindrome?(product) first_num, second_num = find_pair_of_numbers(first_num, second_num) polindrome_number(first_num, second_num) end def number_is_polindrome? number number.to_s == number.to_s.reverse end def find_pair_of_numbers(num1, num2) if num2 > 900 num2 -= 1 else num1 -= 1 num2 = num1 end [num1, num2] end puts polindrome_number(999) # Problem 5 def smallest_multiply (from..to).inject(1) { |result_number, number| result_number.lcm(number) } end #=> smallest_multiply(1,20) #=> 232792560 # Problem 6 def difference(from, to) square_sum(from, to) - sum_of_squares(from, to) end def square_sum(from,to) sum = (from..to).inject(:+) sum * sum end def sum_of_squares(from, to) (from..to).inject(0) { |sum, num| sum+num**2} end #=> difference(1,10) #=> 2640 #=> difference(1,100) #=> 25164150