refactored some old solutions
							parent
							
								
									b8ab94b533
								
							
						
					
					
						commit
						a9d1671150
					
				|  | @ -0,0 +1 @@ | |||
| .DS_Store | ||||
							
								
								
									
										16
									
								
								euler.rb
								
								
								
								
							
							
						
						
									
										16
									
								
								euler.rb
								
								
								
								
							|  | @ -6,14 +6,18 @@ class Integer | |||
|   end | ||||
| 
 | ||||
|   def divisors | ||||
|     divisors = [] | ||||
|     (1..Math.sqrt(self).to_i).each do |num| | ||||
|       if self % num == 0 | ||||
|         divisors << num | ||||
|         divisors << self / num | ||||
|     [].tap do |divisors| | ||||
|       (1..Math.sqrt(self).to_i).each do |num| | ||||
|         if self % num == 0 | ||||
|           divisors << num | ||||
|           divisors << self / num | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|     divisors | ||||
|   end | ||||
| 
 | ||||
|   def prime_factors | ||||
|     self.prime_division.map(&:first) | ||||
|   end | ||||
| 
 | ||||
|   def factorial | ||||
|  |  | |||
							
								
								
									
										10
									
								
								euler001.rb
								
								
								
								
							
							
						
						
									
										10
									
								
								euler001.rb
								
								
								
								
							|  | @ -1,9 +1,7 @@ | |||
| def multiples_of_three_and_five_below(n) | ||||
|   multiples = [] | ||||
|   (3..n-1).each do |i| | ||||
|     multiples << i if ((i % 3 == 0) || (i % 5 == 0)) | ||||
|   end | ||||
|   multiples | ||||
|   (3..n-1).select { |i| (i % 3 == 0) || (i % 5 == 0) } | ||||
| end | ||||
| 
 | ||||
| puts multiples_of_three_and_five_below(1000).inject(:+) | ||||
| def solution | ||||
|   multiples_of_three_and_five_below(1000).inject(:+) | ||||
| end | ||||
|  |  | |||
							
								
								
									
										38
									
								
								euler002.rb
								
								
								
								
							
							
						
						
									
										38
									
								
								euler002.rb
								
								
								
								
							|  | @ -1,30 +1,16 @@ | |||
| def fibonacci(n) | ||||
|   fibTable = [] | ||||
|   if (n == 0) or (n == 1) | ||||
|     return 1 | ||||
|   else | ||||
|     if fibTable.at(n-1) == nil | ||||
|       fibTable.insert(n-1, fibonacci(n-1)) | ||||
|       fib1 = fibTable.at(n-1) | ||||
|     else | ||||
|       fib1 = fibTable.at(n-1) | ||||
| def even_fibonacci_up_to(n) | ||||
|   Enumerator.new do |y| | ||||
|     a = 0 | ||||
|     b = 1 | ||||
|     loop do | ||||
|       temp = b | ||||
|       b = a + b | ||||
|       a = temp | ||||
|       y << b | ||||
|     end | ||||
|     if fibTable.at(n-2) == nil | ||||
|       fibTable.insert(n-2, fibonacci(n-2)) | ||||
|       fib2 = fibTable.at(n-2) | ||||
|     else | ||||
|       fib2 = fibTable.at(n-2) | ||||
|     end | ||||
|     return fib1 + fib2 | ||||
|   end | ||||
|   end.take_while { |i| i < n }.select { |i| i.even? } | ||||
| end | ||||
| 
 | ||||
| sum = 0 | ||||
| for i in 1..32 | ||||
|   fib = fibonacci(i) | ||||
|   if (fib%2) == 0 | ||||
|     sum += fib | ||||
|   end | ||||
| def solution | ||||
|   even_fibonacci_up_to(4000000).inject(:+) | ||||
| end | ||||
| 
 | ||||
| puts sum | ||||
|  |  | |||
							
								
								
									
										41
									
								
								euler003.rb
								
								
								
								
							
							
						
						
									
										41
									
								
								euler003.rb
								
								
								
								
							|  | @ -1,38 +1,5 @@ | |||
| def sieve(n)  | ||||
|   eSieve = (2..n).to_a | ||||
|   i = 0 | ||||
|   pbar = ProgressBar.new("sieving", n) | ||||
|   while i < Math.sqrt(n) | ||||
|     j = i + 1 | ||||
|     while (j < eSieve.length) | ||||
|       if (eSieve[j] > (i ** 2)) and ((eSieve[j] % eSieve[i]) == 0) | ||||
|         eSieve.delete_at j | ||||
|         pbar.inc | ||||
|       end | ||||
|       j += 1 | ||||
|     end | ||||
|     i += 1 | ||||
|     pbar.set(i + (n-eSieve.length)) | ||||
|   end | ||||
|   pbar.finish | ||||
|   eSieve | ||||
| require_relative 'euler' | ||||
| 
 | ||||
| def solution | ||||
|   600851475143.prime_factors.max | ||||
| end | ||||
| 
 | ||||
| eSieve = sieve(600851475143) | ||||
| 
 | ||||
| def isPrime(n) | ||||
|   eSieve.contains(n) | ||||
| end | ||||
| 
 | ||||
| puts isPrime(7) | ||||
| 
 | ||||
| factors = [] | ||||
| for i in 1..600851475143 | ||||
|   if (600851475143 % i) == 0 | ||||
|     if isPrime(600851475143 % i) | ||||
|       factors << i | ||||
|     end | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										10
									
								
								euler004.rb
								
								
								
								
							
							
						
						
									
										10
									
								
								euler004.rb
								
								
								
								
							|  | @ -1,13 +1,13 @@ | |||
| require_relative 'euler' | ||||
| 
 | ||||
| def products_of_three_digits | ||||
|   products = [] | ||||
|   (100..999).each do |i| | ||||
|     (100..999).each do |j| | ||||
|       products << i*j | ||||
|   [].tap do |products| | ||||
|     (100..999).each do |i| | ||||
|       (100..999).each do |j| | ||||
|         products << i*j | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|   products | ||||
| end | ||||
| 
 | ||||
| def solution | ||||
|  |  | |||
							
								
								
									
										11
									
								
								euler005.rb
								
								
								
								
							
							
						
						
									
										11
									
								
								euler005.rb
								
								
								
								
							|  | @ -1,22 +1,17 @@ | |||
| require_relative 'euler' | ||||
| require 'prime' | ||||
| 
 | ||||
| def factorization_of_integer_divisible_by_all_integers_up_to(n) | ||||
|   {}.tap do |factorization| | ||||
|     (2..n).map do |i| | ||||
|       Prime.prime_division(i).map do |factor| | ||||
|         factorization[factor.first] = factor.last if (!factorization.include?(factor.first) || (factor.last > factorization[factor.first])) | ||||
|       Prime.prime_division(i).map do |prime, exponent| | ||||
|         factorization[prime] = exponent if (!factorization.include?(prime) || (exponent > factorization[prime])) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| def factors_to_int(factorization) | ||||
|   [].tap do |result| | ||||
|     factorization.each do |prime, exponent| | ||||
|       result << prime ** exponent | ||||
|     end | ||||
|   end.inject(:*) | ||||
|   factorization.map { |prime, exponent| prime ** exponent }.inject(:*) | ||||
| end | ||||
| 
 | ||||
| def solution | ||||
|  |  | |||
|  | @ -6,10 +6,6 @@ def square_sums(n) | |||
|   (1..n).map { |i| i ** 2 }.inject(:+) | ||||
| end | ||||
| 
 | ||||
| def difference(n) | ||||
|   sum_squared(n) - square_sums(n) | ||||
| end | ||||
| 
 | ||||
| def solution | ||||
|   difference(100) | ||||
|   sum_squared(100) - square_sums(100) | ||||
| end | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| require_relative 'euler' | ||||
| 
 | ||||
| def largest_consecutive_product(n, adjacent) | ||||
|   n.to_digit_list.each_cons(adjacent).map { |x| x.inject(&:*) }.max | ||||
|   n.to_digit_list.each_cons(adjacent).map { |x| x.inject(:*) }.max | ||||
| end | ||||
| 
 | ||||
| def solution | ||||
|  |  | |||
|  | @ -1 +1,5 @@ | |||
| puts (2**1000).to_s.split("").map(&:to_i).inject(:+) | ||||
| require_relative 'euler' | ||||
| 
 | ||||
| def solution | ||||
|   (2**1000).to_digit_list.inject(:+) | ||||
| end | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue