initial commit
						commit
						6947402ff4
					
				|  | @ -0,0 +1,30 @@ | ||||||
|  | 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) | ||||||
|  |     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 | ||||||
|  | 
 | ||||||
|  | sum = 0 | ||||||
|  | for i in 1..32 | ||||||
|  |   fib = fibonacci(i) | ||||||
|  |   if (fib%2) == 0 | ||||||
|  |     sum += fib | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts sum | ||||||
|  | @ -0,0 +1,38 @@ | ||||||
|  | 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 | ||||||
|  | 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 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @ -0,0 +1,28 @@ | ||||||
|  | def isPalindrome(n) | ||||||
|  |   numString = n.to_s | ||||||
|  |   for i in 0..(numString.length-1)/2 | ||||||
|  |     if !(numString[i] == numString[numString.length-1-i]) | ||||||
|  |       return false | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |   return true | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def productsOfThreeDigits | ||||||
|  |   products = [] | ||||||
|  |   for i in 100..999 | ||||||
|  |     for j in 100..999 | ||||||
|  |       products << i*j | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |   products | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | palindromes = [] | ||||||
|  | for i in productsOfThreeDigits | ||||||
|  |   if isPalindrome(i) | ||||||
|  |     palindromes << i | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts palindromes.sort | ||||||
|  | @ -0,0 +1,22 @@ | ||||||
|  | def multipleUpTo20 | ||||||
|  |   divisible = nil | ||||||
|  |   i = 2 | ||||||
|  |   while !divisible | ||||||
|  |     numFound = true | ||||||
|  |     puts "checking #{i}" | ||||||
|  |     for j in (2..20) | ||||||
|  |       if !(i % j == 0) | ||||||
|  |         numFound = false | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |     if numFound | ||||||
|  |       return i | ||||||
|  |     end | ||||||
|  |     i += 1 | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts multipleUpTo20 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 2*3*2*5*7*2*3*11*13*2*17*19 | ||||||
|  | @ -0,0 +1,20 @@ | ||||||
|  | def sumSquared(n) | ||||||
|  |   (1..n).inject(:+) ** 2 | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def squareSums(n) | ||||||
|  |   sum = 0 | ||||||
|  |   for i in 1..n | ||||||
|  |     sum += i ** 2 | ||||||
|  |   end | ||||||
|  |   sum | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def difference(n) | ||||||
|  |   sumSquared(n) - squareSums(n) | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts squareSums(10) | ||||||
|  | puts sumSquared(10) | ||||||
|  | 
 | ||||||
|  | puts difference(100) | ||||||
|  | @ -0,0 +1,33 @@ | ||||||
|  | require 'progressbar' | ||||||
|  | 
 | ||||||
|  | def increasingSieve(size) | ||||||
|  |   startingSize = 10 | ||||||
|  |   eSieve = [] | ||||||
|  |   while eSieve.length < size | ||||||
|  |     eSieve = sieve(startingSize) | ||||||
|  |     startingSize *= 2 | ||||||
|  |   end | ||||||
|  |   eSieve | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | 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 | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts increasingSieve(10001)[10000] | ||||||
|  | @ -0,0 +1,26 @@ | ||||||
|  | def consecutive_lists(num) | ||||||
|  |   list_of_sub_lists = [] | ||||||
|  |   digit_list = num.to_s.split("") | ||||||
|  |   start_index = 0 | ||||||
|  |   end_index = 4 | ||||||
|  |   while end_index < digit_list.size | ||||||
|  |     list_of_sub_lists << digit_list[start_index..end_index].map(&:to_i) | ||||||
|  |     start_index += 1 | ||||||
|  |     end_index += 1 | ||||||
|  |   end | ||||||
|  |   list_of_sub_lists | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def consecutive_products(num) | ||||||
|  |   product_list = [] | ||||||
|  |   consecutive_lists(num).each do |list| | ||||||
|  |     product_list << list.inject(:*) | ||||||
|  |   end | ||||||
|  |   product_list | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def largest_consecutive_product(num) | ||||||
|  |   consecutive_products(num).max | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts largest_consecutive_product(7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450) | ||||||
|  | @ -0,0 +1,30 @@ | ||||||
|  | def generate_pythagorean_triples(upper_bound) | ||||||
|  |   list_of_triples = [] | ||||||
|  |   a = 2 | ||||||
|  |   b = 3 | ||||||
|  |   while a < upper_bound | ||||||
|  |     b = a + 1 | ||||||
|  |     while b < upper_bound | ||||||
|  |       c = Math.sqrt(a**2 + b**2) | ||||||
|  |       list_of_triples << [a, b, c.to_i] if c % 1 == 0 #this is a check that the sqrt is an integer | ||||||
|  |       b += 1 | ||||||
|  |     end | ||||||
|  |     a += 1 | ||||||
|  |   end | ||||||
|  |   list_of_triples | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def sums_of_triples(list_of_triples) | ||||||
|  |   hash_of_sums = {} | ||||||
|  |   list_of_triples.each do |triple| | ||||||
|  |     hash_of_sums[triple] = triple.inject(:+) | ||||||
|  |   end | ||||||
|  |   hash_of_sums | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def find_pythagorean_sum(upper_bound, sum_to_match) | ||||||
|  |   hash_of_sums = sums_of_triples(generate_pythagorean_triples(upper_bound)) | ||||||
|  |   hash_of_sums.detect { |key, value| value == sum_to_match } | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts find_pythagorean_sum(500, 1000).first.inject(:*) | ||||||
|  | @ -0,0 +1,11 @@ | ||||||
|  | #an implementation of the sieve of Eratosthenes | ||||||
|  | def improved_sieve(n) | ||||||
|  |   eSieve = (2..n).to_a | ||||||
|  |   (2..Math.sqrt(n)).each do |i| | ||||||
|  |     next unless eSieve[i] | ||||||
|  |     (i*i).step(n, i) { |j| eSieve[j] = nil } #steps by increments of i up to n starting at i*i and sets those elements to nil, marking them for removal | ||||||
|  |   end | ||||||
|  |   eSieve.compact | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts improved_sieve(2000000).inject(:+) | ||||||
|  | @ -0,0 +1,126 @@ | ||||||
|  | require 'matrix' | ||||||
|  | 
 | ||||||
|  | def matrix_horizontal_consecutive(matrix) | ||||||
|  |   across_lists = [] | ||||||
|  |   (0..matrix.row_count-1).each do |row_num| | ||||||
|  |     across_lists += consecutive_across_lists(matrix.row(row_num)) | ||||||
|  |   end | ||||||
|  |   across_lists | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def consecutive_across_lists(list) | ||||||
|  |   list_of_sub_lists = [] | ||||||
|  |   start_index = 0 | ||||||
|  |   end_index = 3 | ||||||
|  |   while end_index < list.size | ||||||
|  |     list_of_sub_lists << list[start_index..end_index] | ||||||
|  |     start_index += 1 | ||||||
|  |     end_index += 1 | ||||||
|  |   end | ||||||
|  |   list_of_sub_lists | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def matrix_vertical_consecutive(matrix) | ||||||
|  |   transpose = matrix.transpose | ||||||
|  |   matrix_horizontal_consecutive(transpose) | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | #right top to bottom | ||||||
|  | def right_diagonal_consecutive(matrix) | ||||||
|  |   diagonals = [] | ||||||
|  |   i_0 = 0 | ||||||
|  |   j_0 = 0 | ||||||
|  |   i_1 = 1 | ||||||
|  |   j_1 = 1 | ||||||
|  |   i_2 = 2 | ||||||
|  |   j_2 = 2 | ||||||
|  |   i_3 = 3 | ||||||
|  |   j_3 = 3 | ||||||
|  |   while i_0 < matrix.row_count - 3 | ||||||
|  |     while j_0 < matrix.column_count - 3 | ||||||
|  |       diagonals << [matrix[i_0,j_0], matrix[i_1, j_1], matrix[i_2, j_2], matrix[i_3, j_3]] | ||||||
|  |       j_0 += 1 | ||||||
|  |       j_1 += 1 | ||||||
|  |       j_2 += 1 | ||||||
|  |       j_3 += 1 | ||||||
|  |     end | ||||||
|  |     j_0 = 0 | ||||||
|  |     j_1 = 1 | ||||||
|  |     j_2 = 2 | ||||||
|  |     j_3 = 3 | ||||||
|  |     i_0 += 1 | ||||||
|  |     i_1 += 1 | ||||||
|  |     i_2 += 1 | ||||||
|  |     i_3 += 1 | ||||||
|  |   end | ||||||
|  |   diagonals | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | #left top to bottom | ||||||
|  | def left_diagonal_consecutive(matrix) | ||||||
|  |   diagonals = [] | ||||||
|  |   i_0 = 3 | ||||||
|  |   j_0 = 0 | ||||||
|  |   i_1 = 2 | ||||||
|  |   j_1 = 1 | ||||||
|  |   i_2 = 1 | ||||||
|  |   j_2 = 2 | ||||||
|  |   i_3 = 0 | ||||||
|  |   j_3 = 3 | ||||||
|  |   while i_0 < matrix.row_count | ||||||
|  |     while j_3 < matrix.column_count | ||||||
|  |       diagonals << [matrix[i_0,j_0], matrix[i_1, j_1], matrix[i_2, j_2], matrix[i_3, j_3]] | ||||||
|  |       j_0 += 1 | ||||||
|  |       j_1 += 1 | ||||||
|  |       j_2 += 1 | ||||||
|  |       j_3 += 1 | ||||||
|  |     end | ||||||
|  |     j_0 = 0 | ||||||
|  |     j_1 = 1 | ||||||
|  |     j_2 = 2 | ||||||
|  |     j_3 = 3 | ||||||
|  |     i_0 += 1 | ||||||
|  |     i_1 += 1 | ||||||
|  |     i_2 += 1 | ||||||
|  |     i_3 += 1 | ||||||
|  |   end | ||||||
|  |   diagonals | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def max_consecutive_product(matrix) | ||||||
|  |   consecutives = right_diagonal_consecutive(matrix) + left_diagonal_consecutive(matrix) + matrix_horizontal_consecutive(matrix) + matrix_vertical_consecutive(matrix) | ||||||
|  |   products = [] | ||||||
|  |   consecutives.each do |list| | ||||||
|  |     products << list.inject(:*) | ||||||
|  |   end | ||||||
|  |   products.max | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | matrix = Matrix.rows([[3,4,6,8,1], | ||||||
|  |                       [5,6,3,1,7], | ||||||
|  |                       [1,4,2,8,4], | ||||||
|  |                       [7,3,2,6,3], | ||||||
|  |                       [3,5,6,2,9]]) | ||||||
|  | 
 | ||||||
|  | matrix = Matrix.rows([[ 8, 2,22,97,38,15, 0,40, 0,75, 4, 5, 7,78,52,12,50,77,91, 8], | ||||||
|  |                       [49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48, 4,56,62, 0], | ||||||
|  |                       [81,49,31,73,55,79,14,29,93,71,40,67,53,88,30, 3,49,13,36,65], | ||||||
|  |                       [52,70,95,23, 4,60,11,42,69,24,68,56, 1,32,56,71,37, 2,36,91], | ||||||
|  |                       [22,31,16,71,51,67,63,89,41,92,36,54,22,40,40,28,66,33,13,80], | ||||||
|  |                       [24,47,32,60,99, 3,45, 2,44,75,33,53,78,36,84,20,35,17,12,50], | ||||||
|  |                       [32,98,81,28,64,23,67,10,26,38,40,67,59,54,70,66,18,38,64,70], | ||||||
|  |                       [67,26,20,68, 2,62,12,20,95,63,94,39,63, 8,40,91,66,49,94,21], | ||||||
|  |                       [24,55,58, 5,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72], | ||||||
|  |                       [21,36,23, 9,75, 0,76,44,20,45,35,14, 0,61,33,97,34,31,33,95], | ||||||
|  |                       [78,17,53,28,22,75,31,67,15,94, 3,80, 4,62,16,14, 9,53,56,92], | ||||||
|  |                       [16,39, 5,42,96,35,31,47,55,58,88,24, 0,17,54,24,36,29,85,57], | ||||||
|  |                       [86,56, 0,48,35,71,89, 7, 5,44,44,37,44,60,21,58,51,54,17,58], | ||||||
|  |                       [19,80,81,68, 5,94,47,69,28,73,92,13,86,52,17,77, 4,89,55,40], | ||||||
|  |                       [ 4,52, 8,83,97,35,99,16, 7,97,57,32,16,26,26,79,33,27,98,66], | ||||||
|  |                       [88,36,68,87,57,62,20,72, 3,46,33,67,46,55,12,32,63,93,53,69], | ||||||
|  |                       [ 4,42,16,73,38,25,39,11,24,94,72,18, 8,46,29,32,40,62,76,36], | ||||||
|  |                       [20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74, 4,36,16], | ||||||
|  |                       [20,73,35,29,78,31,90, 1,74,31,49,71,48,86,81,16,23,57, 5,54], | ||||||
|  |                       [ 1,70,54,71,83,51,54,69,16,92,33,48,61,43,52, 1,89,19,67,48]]) | ||||||
|  | 
 | ||||||
|  | puts max_consecutive_product(matrix) | ||||||
|  | @ -0,0 +1,30 @@ | ||||||
|  | class Integer | ||||||
|  |   def divisors | ||||||
|  |     divisors = [] | ||||||
|  |     (1..Math.sqrt(self).to_i).each do |num| | ||||||
|  |       if self % num == 0 | ||||||
|  |         divisors << num | ||||||
|  |         divisors << self / num | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |     divisors | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | triangle = Enumerator.new do |y| | ||||||
|  |   sum = 1 | ||||||
|  |   next_num = 2 | ||||||
|  |   loop do | ||||||
|  |     y << sum | ||||||
|  |     sum += next_num | ||||||
|  |     next_num += 1 | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | val = triangle.next | ||||||
|  | 
 | ||||||
|  | while val.divisors.count < 500 | ||||||
|  |   val = triangle.next | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts val | ||||||
|  | @ -0,0 +1,100 @@ | ||||||
|  | puts (37107287533902102798797998220837590246510135740250 + | ||||||
|  | 46376937677490009712648124896970078050417018260538 + | ||||||
|  | 74324986199524741059474233309513058123726617309629 + | ||||||
|  | 91942213363574161572522430563301811072406154908250 + | ||||||
|  | 23067588207539346171171980310421047513778063246676 + | ||||||
|  | 89261670696623633820136378418383684178734361726757 + | ||||||
|  | 28112879812849979408065481931592621691275889832738 + | ||||||
|  | 44274228917432520321923589422876796487670272189318 + | ||||||
|  | 47451445736001306439091167216856844588711603153276 + | ||||||
|  | 70386486105843025439939619828917593665686757934951 + | ||||||
|  | 62176457141856560629502157223196586755079324193331 + | ||||||
|  | 64906352462741904929101432445813822663347944758178 + | ||||||
|  | 92575867718337217661963751590579239728245598838407 + | ||||||
|  | 58203565325359399008402633568948830189458628227828 + | ||||||
|  | 80181199384826282014278194139940567587151170094390 + | ||||||
|  | 35398664372827112653829987240784473053190104293586 + | ||||||
|  | 86515506006295864861532075273371959191420517255829 + | ||||||
|  | 71693888707715466499115593487603532921714970056938 + | ||||||
|  | 54370070576826684624621495650076471787294438377604 + | ||||||
|  | 53282654108756828443191190634694037855217779295145 + | ||||||
|  | 36123272525000296071075082563815656710885258350721 + | ||||||
|  | 45876576172410976447339110607218265236877223636045 + | ||||||
|  | 17423706905851860660448207621209813287860733969412 + | ||||||
|  | 81142660418086830619328460811191061556940512689692 + | ||||||
|  | 51934325451728388641918047049293215058642563049483 + | ||||||
|  | 62467221648435076201727918039944693004732956340691 + | ||||||
|  | 15732444386908125794514089057706229429197107928209 + | ||||||
|  | 55037687525678773091862540744969844508330393682126 + | ||||||
|  | 18336384825330154686196124348767681297534375946515 + | ||||||
|  | 80386287592878490201521685554828717201219257766954 + | ||||||
|  | 78182833757993103614740356856449095527097864797581 + | ||||||
|  | 16726320100436897842553539920931837441497806860984 + | ||||||
|  | 48403098129077791799088218795327364475675590848030 + | ||||||
|  | 87086987551392711854517078544161852424320693150332 + | ||||||
|  | 59959406895756536782107074926966537676326235447210 + | ||||||
|  | 69793950679652694742597709739166693763042633987085 + | ||||||
|  | 41052684708299085211399427365734116182760315001271 + | ||||||
|  | 65378607361501080857009149939512557028198746004375 + | ||||||
|  | 35829035317434717326932123578154982629742552737307 + | ||||||
|  | 94953759765105305946966067683156574377167401875275 + | ||||||
|  | 88902802571733229619176668713819931811048770190271 + | ||||||
|  | 25267680276078003013678680992525463401061632866526 + | ||||||
|  | 36270218540497705585629946580636237993140746255962 + | ||||||
|  | 24074486908231174977792365466257246923322810917141 + | ||||||
|  | 91430288197103288597806669760892938638285025333403 + | ||||||
|  | 34413065578016127815921815005561868836468420090470 + | ||||||
|  | 23053081172816430487623791969842487255036638784583 + | ||||||
|  | 11487696932154902810424020138335124462181441773470 + | ||||||
|  | 63783299490636259666498587618221225225512486764533 + | ||||||
|  | 67720186971698544312419572409913959008952310058822 + | ||||||
|  | 95548255300263520781532296796249481641953868218774 + | ||||||
|  | 76085327132285723110424803456124867697064507995236 + | ||||||
|  | 37774242535411291684276865538926205024910326572967 + | ||||||
|  | 23701913275725675285653248258265463092207058596522 + | ||||||
|  | 29798860272258331913126375147341994889534765745501 + | ||||||
|  | 18495701454879288984856827726077713721403798879715 + | ||||||
|  | 38298203783031473527721580348144513491373226651381 + | ||||||
|  | 34829543829199918180278916522431027392251122869539 + | ||||||
|  | 40957953066405232632538044100059654939159879593635 + | ||||||
|  | 29746152185502371307642255121183693803580388584903 + | ||||||
|  | 41698116222072977186158236678424689157993532961922 + | ||||||
|  | 62467957194401269043877107275048102390895523597457 + | ||||||
|  | 23189706772547915061505504953922979530901129967519 + | ||||||
|  | 86188088225875314529584099251203829009407770775672 + | ||||||
|  | 11306739708304724483816533873502340845647058077308 + | ||||||
|  | 82959174767140363198008187129011875491310547126581 + | ||||||
|  | 97623331044818386269515456334926366572897563400500 + | ||||||
|  | 42846280183517070527831839425882145521227251250327 + | ||||||
|  | 55121603546981200581762165212827652751691296897789 + | ||||||
|  | 32238195734329339946437501907836945765883352399886 + | ||||||
|  | 75506164965184775180738168837861091527357929701337 + | ||||||
|  | 62177842752192623401942399639168044983993173312731 + | ||||||
|  | 32924185707147349566916674687634660915035914677504 + | ||||||
|  | 99518671430235219628894890102423325116913619626622 + | ||||||
|  | 73267460800591547471830798392868535206946944540724 + | ||||||
|  | 76841822524674417161514036427982273348055556214818 + | ||||||
|  | 97142617910342598647204516893989422179826088076852 + | ||||||
|  | 87783646182799346313767754307809363333018982642090 + | ||||||
|  | 10848802521674670883215120185883543223812876952786 + | ||||||
|  | 71329612474782464538636993009049310363619763878039 + | ||||||
|  | 62184073572399794223406235393808339651327408011116 + | ||||||
|  | 66627891981488087797941876876144230030984490851411 + | ||||||
|  | 60661826293682836764744779239180335110989069790714 + | ||||||
|  | 85786944089552990653640447425576083659976645795096 + | ||||||
|  | 66024396409905389607120198219976047599490197230297 + | ||||||
|  | 64913982680032973156037120041377903785566085089252 + | ||||||
|  | 16730939319872750275468906903707539413042652315011 + | ||||||
|  | 94809377245048795150954100921645863754710598436791 + | ||||||
|  | 78639167021187492431995700641917969777599028300699 + | ||||||
|  | 15368713711936614952811305876380278410754449733078 + | ||||||
|  | 40789923115535562561142322423255033685442488917353 + | ||||||
|  | 44889911501440648020369068063960672322193204149535 + | ||||||
|  | 41503128880339536053299340368006977710650566631954 + | ||||||
|  | 81234880673210146739058568557934581403627822703280 + | ||||||
|  | 82616570773948327592232845941706525094512325230608 + | ||||||
|  | 22918802058777319719839450180888072429661980811197 + | ||||||
|  | 77158542502016545090413245809786882778948721859617 + | ||||||
|  | 72107838435069186155435662884062257473692284509516 + | ||||||
|  | 20849603980134001723930671666823555245252804609722 + | ||||||
|  | 53503534226472524250874054075591789781264330331690).to_s[0..9] | ||||||
|  | @ -0,0 +1,23 @@ | ||||||
|  | def collatz(num) | ||||||
|  |   list = [] | ||||||
|  |   current_num = num | ||||||
|  |   while current_num > 1 | ||||||
|  |     list << current_num | ||||||
|  |     if current_num % 2 == 0 | ||||||
|  |       current_num /= 2 | ||||||
|  |     else | ||||||
|  |       current_num = 3*current_num + 1 | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |   list << 1 | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def longest_chain(num) | ||||||
|  |   chain_length = {} | ||||||
|  |   (1..num).each do |starting_num| | ||||||
|  |     chain_length[starting_num] = collatz(starting_num).count | ||||||
|  |   end | ||||||
|  |   chain_length.sort_by { |key, value| value }.last | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts longest_chain(999999) | ||||||
|  | @ -0,0 +1 @@ | ||||||
|  | puts (2**1000).to_s.split("").map(&:to_i).inject(:+) | ||||||
|  | @ -0,0 +1,18 @@ | ||||||
|  | require 'numbers_and_words' | ||||||
|  | 
 | ||||||
|  | class Integer | ||||||
|  |   def words_length | ||||||
|  |     if self < 100 || self % 100 == 0 | ||||||
|  |       self.to_words.gsub(/\s+/, "").gsub(/\-/, "").length | ||||||
|  |     else | ||||||
|  |       self.to_words.gsub(/\s+/, "").gsub(/\-/, "").length + 3 #accounting for "and" | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | count = 0 | ||||||
|  | (1..1000).each do |num| | ||||||
|  |   count += num.words_length | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts count | ||||||
|  | @ -0,0 +1,107 @@ | ||||||
|  | triangle = [[75], | ||||||
|  |             [95,64], | ||||||
|  |             [17,47,82], | ||||||
|  |             [18,35,87,10], | ||||||
|  |             [20, 4,82,47,65], | ||||||
|  |             [19, 1,23,75, 3,34], | ||||||
|  |             [88, 2,77,73, 7,63,67], | ||||||
|  |             [99,65, 4,28, 6,16,70,92], | ||||||
|  |             [41,41,26,56,83,40,80,70,33], | ||||||
|  |             [41,48,72,33,47,32,37,16,94,29], | ||||||
|  |             [53,71,44,65,25,43,91,52,97,51,14], | ||||||
|  |             [70,11,33,28,77,73,17,78,39,68,17,57], | ||||||
|  |             [91,71,52,38,17,14,91,43,58,50,27,29,28], | ||||||
|  |             [63,66, 4,68,89,53,67,30,73,16,69,87,40,31], | ||||||
|  |             [ 4,62,98,27,23, 9,70,98,73,93,38,53,60, 4,23]] | ||||||
|  | 
 | ||||||
|  | class Triangle | ||||||
|  |   def initialize(list_of_lists) | ||||||
|  |     @data = list_of_lists | ||||||
|  |     @route_length = {} | ||||||
|  |     locations.each do |location| | ||||||
|  |       @route_length[location] = @data[location.first][location.last] | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def locations | ||||||
|  |     locations = [] | ||||||
|  |     (0..row_count-1).each do |row_num| | ||||||
|  |       (0..row_num).each do |index| | ||||||
|  |         locations << [row_num, index] | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |     locations | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def row(num) | ||||||
|  |     @data[num] | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def row_count | ||||||
|  |     @data.count | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def route_length(row, index_from_left) | ||||||
|  |     @route_length[[row, index_from_left]] | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def root | ||||||
|  |     @data.first.first | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def element(row_num, index_from_left) | ||||||
|  |     row(row_num)[index_from_left] | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def children_of_element(row_num, index_from_left) | ||||||
|  |     unless is_bottom_row?(row_num) | ||||||
|  |       [@route_length[[row_num+1, index_from_left]], @route_length[[row_num+1, index_from_left+1]]] | ||||||
|  |     else | ||||||
|  |       [] | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def is_bottom_row?(row_num) | ||||||
|  |     row_num == @data.count - 1 | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def bottom_row | ||||||
|  |     @data.count - 1 | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def maximum_route_total | ||||||
|  |     ((bottom_row-1).downto(0)).each do |row_num| | ||||||
|  |       (0..@data[row_num].length-1).each do |index| | ||||||
|  |         children = children_of_element(row_num, index) | ||||||
|  |         current_elt = element(row_num, index) | ||||||
|  |         choose_first_elt = current_elt + children.first | ||||||
|  |         choose_second_elt = current_elt + children.last | ||||||
|  |         @route_length[[row_num, index]] = [choose_first_elt, choose_second_elt].max | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |     @route_length[[0,0]] | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def parse_triangle(filename) | ||||||
|  |   triangle_data = [] | ||||||
|  |   File.open(filename, 'r') do |file| | ||||||
|  |     while line = file.gets | ||||||
|  |       triangle_data << line.split(" ").map(&:to_i) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |   Triangle.new(triangle_data) | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | parsed_triangle = parse_triangle("triangle18.txt") | ||||||
|  | 
 | ||||||
|  | triangle_two = Triangle.new([ [3], | ||||||
|  |                           [7,4], | ||||||
|  |                           [2,4,6], | ||||||
|  |                           [8,5,9,3] ]) | ||||||
|  | 
 | ||||||
|  | triangle_67 = parse_triangle("triangle67.txt") | ||||||
|  | 
 | ||||||
|  | puts triangle_two.maximum_route_total.inspect | ||||||
|  | puts parsed_triangle.maximum_route_total.inspect | ||||||
|  | puts triangle_67.maximum_route_total.inspect | ||||||
|  | @ -0,0 +1,9 @@ | ||||||
|  | require 'date' | ||||||
|  | 
 | ||||||
|  | number_of_sundays = 0 | ||||||
|  | (DateTime.new(1901, 1, 1)..DateTime.new(2000, 12, 31)).each do |day| | ||||||
|  |   if day.strftime("%A") == "Sunday" && day.strftime("%d") == "01" | ||||||
|  |     number_of_sundays += 1 | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | puts number_of_sundays | ||||||
|  | @ -0,0 +1,5 @@ | ||||||
|  | def factorial(n) | ||||||
|  |   (1..n).inject(:*) | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts factorial(100).to_s.split("").map(&:to_i).inject(:+) | ||||||
|  | @ -0,0 +1,31 @@ | ||||||
|  | require 'prime' | ||||||
|  | 
 | ||||||
|  | def d(n) | ||||||
|  |   divisors = [1] | ||||||
|  |   (2..Math.sqrt(n)).each do |possible_divisor| | ||||||
|  |     if n % possible_divisor == 0 | ||||||
|  |       divisors << possible_divisor | ||||||
|  |       divisors << (n / possible_divisor) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |   divisors.inject(:+) | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def amicable_numbers(n) | ||||||
|  |   d_values = {} | ||||||
|  |   (2..n).each do |num| | ||||||
|  |     d_values[num] =  d(num) | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   possible_amicables = d_values.select{ |key, value| value <= n } | ||||||
|  | 
 | ||||||
|  |   amicables = [] | ||||||
|  |   possible_amicables.each do |key, value| | ||||||
|  |     if d_values[value] == key && key != value | ||||||
|  |       amicables << [key, value] | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |   amicables.flatten.uniq | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts amicable_numbers(100000).inject(:+) | ||||||
|  | @ -0,0 +1,31 @@ | ||||||
|  | names = [] | ||||||
|  | File.open('names.txt', 'r') do |file| | ||||||
|  |   names = file.gets.gsub(/"/, "").split(",") | ||||||
|  | end | ||||||
|  | names.sort! | ||||||
|  | 
 | ||||||
|  | def get_alphabet_values | ||||||
|  |   {}.tap do |alphabet_values| | ||||||
|  |     i = 1 | ||||||
|  |     ("A".."Z").each do |char| | ||||||
|  |       alphabet_values[char] = i | ||||||
|  |       i += 1 | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def alphabet_score(name, alphabet_values) | ||||||
|  |   score = 0 | ||||||
|  |   name.split("").each { |letter| score += alphabet_values[letter]} | ||||||
|  |   score | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def total_score(names, alphabet_values) | ||||||
|  |   [].tap do |scores| | ||||||
|  |     names.each_with_index do |name, index| | ||||||
|  |       scores << alphabet_score(name, alphabet_values) * (index+1) | ||||||
|  |     end | ||||||
|  |   end.inject(:+) | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts total_score(names, get_alphabet_values) | ||||||
|  | @ -0,0 +1,48 @@ | ||||||
|  | def divisors(n) | ||||||
|  |  divisors = [1] | ||||||
|  |   (2..Math.sqrt(n)).each do |possible_divisor| | ||||||
|  |     if n % possible_divisor == 0 | ||||||
|  |       divisors << possible_divisor | ||||||
|  |       divisors << (n / possible_divisor) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |   divisors.uniq | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def abundant?(num) | ||||||
|  |   divisors(num).inject(:+) > num | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def abundants | ||||||
|  |   [].tap do |abundants| | ||||||
|  |     (1..28122).each do |num| | ||||||
|  |       abundants << num if abundant?(num) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def sums_of_abundants | ||||||
|  |   [].tap do |sums| | ||||||
|  |     abundant_list = abundants | ||||||
|  |     abundant_list.each_with_index do |num, index| | ||||||
|  |       abundant_list.drop(index).each do |second_num| | ||||||
|  |         sum = num + second_num | ||||||
|  |         if sum < 28123 | ||||||
|  |           sums << sum | ||||||
|  |         else | ||||||
|  |           break | ||||||
|  |         end | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def not_sums_of_abundants | ||||||
|  |   non_abundants = (1..28122).to_a | ||||||
|  |   sums_of_abundants.uniq.each do |sum| | ||||||
|  |     non_abundants.delete sum | ||||||
|  |   end | ||||||
|  |   non_abundants | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts not_sums_of_abundants.inject(:+) | ||||||
|  | @ -0,0 +1,32 @@ | ||||||
|  | #starts with index 1 | ||||||
|  | def fib(n) | ||||||
|  |   if n == 1|| n == 2 | ||||||
|  |     1 | ||||||
|  |   else | ||||||
|  |     fib(n-1) + fib(n-2) | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | fib = Enumerator.new do |y| | ||||||
|  |   n_1 = n_2 = 1 | ||||||
|  |   loop do | ||||||
|  |     y << n_1 | ||||||
|  |     n_1, n_2 = n_2, n_1 + n_2 | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | term = 0 | ||||||
|  | while fib.next.to_s.length < 1000 | ||||||
|  |   term += 1 | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts term + 1 | ||||||
|  | 
 | ||||||
|  | # next_fib = fib.next | ||||||
|  | # i = 0 | ||||||
|  | # while next_fib.to_s.length < 1000 | ||||||
|  | #   next_fib = fib.next | ||||||
|  | #   i += 1 | ||||||
|  | # end | ||||||
|  | #  | ||||||
|  | # puts i+1 | ||||||
|  | @ -0,0 +1,35 @@ | ||||||
|  | require 'prime' | ||||||
|  | 
 | ||||||
|  | #1. generate quadratic expressions | ||||||
|  | #2. for each quadratic expression, iterate until non-prime is found | ||||||
|  | #3. | ||||||
|  | def primes_from_quadratic(a,b) | ||||||
|  |   generator = Enumerator.new do |y| | ||||||
|  |     n = 0 | ||||||
|  |     loop do | ||||||
|  |       y << n**2 + a*n + b | ||||||
|  |       n += 1 | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   primes = [] | ||||||
|  | 
 | ||||||
|  |   while (next_num = generator.next).prime? | ||||||
|  |     primes << next_num | ||||||
|  |   end | ||||||
|  |   primes | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | max_consecutive_prime_length = 0 | ||||||
|  | max_consecutive_prime_coefficients = [] | ||||||
|  | (-999..999).each do |a| | ||||||
|  |   (-999..999).each do |b| | ||||||
|  |     prime_length = primes_from_quadratic(a,b).count | ||||||
|  |     if prime_length > max_consecutive_prime_length | ||||||
|  |       max_consecutive_prime_coefficients = [a,b] | ||||||
|  |       max_consecutive_prime_length = prime_length | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts max_consecutive_prime_coefficients | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | terms = [] | ||||||
|  | (2..100).each do |a| | ||||||
|  |   (2..100).each do |b| | ||||||
|  |     terms << a**b | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts terms.uniq.count | ||||||
|  | @ -0,0 +1,12 @@ | ||||||
|  | def sum_of_fifth_powers(num) | ||||||
|  |   list_of_digits = num.to_s.split("").map(&:to_i) | ||||||
|  |   list_of_digits.map { |digit| digit**5 }.inject(:+) | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | equivalent_sums = [] | ||||||
|  | (10..1000000).each do |num| | ||||||
|  |   sum = sum_of_fifth_powers(num) | ||||||
|  |   equivalent_sums << num if sum == num | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts equivalent_sums.inject(:+) | ||||||
|  | @ -0,0 +1,18 @@ | ||||||
|  | def change(n, list_of_coins) | ||||||
|  |   changeHelper(n, list_of_coins, []) | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | def changeHelper(n, list_of_coins, result_list) | ||||||
|  |   if list_of_coins.empty? | ||||||
|  |     [result_list] | ||||||
|  |   elsif n == 0 | ||||||
|  |     [result_list] | ||||||
|  |   else | ||||||
|  |     if n >= list_of_coins.first | ||||||
|  |       changeHelper(n - list_of_coins.first, list_of_coins, result_list << list_of_coins.first) + | ||||||
|  |         changeHelper(n, list_of_coins[1..list_of_coins.count-1], result_list) | ||||||
|  |     else | ||||||
|  |       changeHelper(n, list_of_coins[1..list_of_coins.count-1], result_list) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | @ -0,0 +1,17 @@ | ||||||
|  | def is_pandigital?(num_as_string) | ||||||
|  |   num_as_string.split("").sort.join == "123456789" | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | pandigitals = [] | ||||||
|  | (1..100000).each do |i| | ||||||
|  |   (1..100000).each do |j| | ||||||
|  |     k = i * j | ||||||
|  |     if is_pandigital?(i.to_s + j.to_s + k.to_s) | ||||||
|  |       [i,j,k] << pandigitals | ||||||
|  |       puts [i,j,k].inspect | ||||||
|  |     end | ||||||
|  |     break if k.to_s.length > 9 | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts pandigitals.inspect | ||||||
|  | @ -0,0 +1,21 @@ | ||||||
|  | class Integer | ||||||
|  |   def mod_exp(exp, mod) | ||||||
|  |     exp < 0 and raise ArgumentError, "negative exponent" | ||||||
|  |     prod = 1 | ||||||
|  |     base = self % mod | ||||||
|  |     until exp.zero? | ||||||
|  |       exp.odd? and prod = (prod * base) % mod | ||||||
|  |       exp >>= 1 | ||||||
|  |       base = (base * base) % mod | ||||||
|  |     end | ||||||
|  |     prod | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | PHI = (1 + Math.sqrt(5)) / 2 | ||||||
|  | 
 | ||||||
|  | def fib(n) | ||||||
|  |   ((PHI ** n - (-1 / PHI) ** n) / Math.sqrt(5)).to_i | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | puts fib(8) | ||||||
|  | @ -0,0 +1,15 @@ | ||||||
|  | 75 | ||||||
|  | 95 64 | ||||||
|  | 17 47 82 | ||||||
|  | 18 35 87 10 | ||||||
|  | 20 04 82 47 65 | ||||||
|  | 19 01 23 75 03 34 | ||||||
|  | 88 02 77 73 07 63 67 | ||||||
|  | 99 65 04 28 06 16 70 92 | ||||||
|  | 41 41 26 56 83 40 80 70 33 | ||||||
|  | 41 48 72 33 47 32 37 16 94 29 | ||||||
|  | 53 71 44 65 25 43 91 52 97 51 14 | ||||||
|  | 70 11 33 28 77 73 17 78 39 68 17 57 | ||||||
|  | 91 71 52 38 17 14 91 43 58 50 27 29 48 | ||||||
|  | 63 66 04 68 89 53 67 30 73 16 69 87 40 31 | ||||||
|  | 04 62 98 27 23 09 70 98 73 93 38 53 60 04 23 | ||||||
|  | @ -0,0 +1,100 @@ | ||||||
|  | 59 | ||||||
|  | 73 41 | ||||||
|  | 52 40 09 | ||||||
|  | 26 53 06 34 | ||||||
|  | 10 51 87 86 81 | ||||||
|  | 61 95 66 57 25 68 | ||||||
|  | 90 81 80 38 92 67 73 | ||||||
|  | 30 28 51 76 81 18 75 44 | ||||||
|  | 84 14 95 87 62 81 17 78 58 | ||||||
|  | 21 46 71 58 02 79 62 39 31 09 | ||||||
|  | 56 34 35 53 78 31 81 18 90 93 15 | ||||||
|  | 78 53 04 21 84 93 32 13 97 11 37 51 | ||||||
|  | 45 03 81 79 05 18 78 86 13 30 63 99 95 | ||||||
|  | 39 87 96 28 03 38 42 17 82 87 58 07 22 57 | ||||||
|  | 06 17 51 17 07 93 09 07 75 97 95 78 87 08 53 | ||||||
|  | 67 66 59 60 88 99 94 65 55 77 55 34 27 53 78 28 | ||||||
|  | 76 40 41 04 87 16 09 42 75 69 23 97 30 60 10 79 87 | ||||||
|  | 12 10 44 26 21 36 32 84 98 60 13 12 36 16 63 31 91 35 | ||||||
|  | 70 39 06 05 55 27 38 48 28 22 34 35 62 62 15 14 94 89 86 | ||||||
|  | 66 56 68 84 96 21 34 34 34 81 62 40 65 54 62 05 98 03 02 60 | ||||||
|  | 38 89 46 37 99 54 34 53 36 14 70 26 02 90 45 13 31 61 83 73 47 | ||||||
|  | 36 10 63 96 60 49 41 05 37 42 14 58 84 93 96 17 09 43 05 43 06 59 | ||||||
|  | 66 57 87 57 61 28 37 51 84 73 79 15 39 95 88 87 43 39 11 86 77 74 18 | ||||||
|  | 54 42 05 79 30 49 99 73 46 37 50 02 45 09 54 52 27 95 27 65 19 45 26 45 | ||||||
|  | 71 39 17 78 76 29 52 90 18 99 78 19 35 62 71 19 23 65 93 85 49 33 75 09 02 | ||||||
|  | 33 24 47 61 60 55 32 88 57 55 91 54 46 57 07 77 98 52 80 99 24 25 46 78 79 05 | ||||||
|  | 92 09 13 55 10 67 26 78 76 82 63 49 51 31 24 68 05 57 07 54 69 21 67 43 17 63 12 | ||||||
|  | 24 59 06 08 98 74 66 26 61 60 13 03 09 09 24 30 71 08 88 70 72 70 29 90 11 82 41 34 | ||||||
|  | 66 82 67 04 36 60 92 77 91 85 62 49 59 61 30 90 29 94 26 41 89 04 53 22 83 41 09 74 90 | ||||||
|  | 48 28 26 37 28 52 77 26 51 32 18 98 79 36 62 13 17 08 19 54 89 29 73 68 42 14 08 16 70 37 | ||||||
|  | 37 60 69 70 72 71 09 59 13 60 38 13 57 36 09 30 43 89 30 39 15 02 44 73 05 73 26 63 56 86 12 | ||||||
|  | 55 55 85 50 62 99 84 77 28 85 03 21 27 22 19 26 82 69 54 04 13 07 85 14 01 15 70 59 89 95 10 19 | ||||||
|  | 04 09 31 92 91 38 92 86 98 75 21 05 64 42 62 84 36 20 73 42 21 23 22 51 51 79 25 45 85 53 03 43 22 | ||||||
|  | 75 63 02 49 14 12 89 14 60 78 92 16 44 82 38 30 72 11 46 52 90 27 08 65 78 03 85 41 57 79 39 52 33 48 | ||||||
|  | 78 27 56 56 39 13 19 43 86 72 58 95 39 07 04 34 21 98 39 15 39 84 89 69 84 46 37 57 59 35 59 50 26 15 93 | ||||||
|  | 42 89 36 27 78 91 24 11 17 41 05 94 07 69 51 96 03 96 47 90 90 45 91 20 50 56 10 32 36 49 04 53 85 92 25 65 | ||||||
|  | 52 09 61 30 61 97 66 21 96 92 98 90 06 34 96 60 32 69 68 33 75 84 18 31 71 50 84 63 03 03 19 11 28 42 75 45 45 | ||||||
|  | 61 31 61 68 96 34 49 39 05 71 76 59 62 67 06 47 96 99 34 21 32 47 52 07 71 60 42 72 94 56 82 83 84 40 94 87 82 46 | ||||||
|  | 01 20 60 14 17 38 26 78 66 81 45 95 18 51 98 81 48 16 53 88 37 52 69 95 72 93 22 34 98 20 54 27 73 61 56 63 60 34 63 | ||||||
|  | 93 42 94 83 47 61 27 51 79 79 45 01 44 73 31 70 83 42 88 25 53 51 30 15 65 94 80 44 61 84 12 77 02 62 02 65 94 42 14 94 | ||||||
|  | 32 73 09 67 68 29 74 98 10 19 85 48 38 31 85 67 53 93 93 77 47 67 39 72 94 53 18 43 77 40 78 32 29 59 24 06 02 83 50 60 66 | ||||||
|  | 32 01 44 30 16 51 15 81 98 15 10 62 86 79 50 62 45 60 70 38 31 85 65 61 64 06 69 84 14 22 56 43 09 48 66 69 83 91 60 40 36 61 | ||||||
|  | 92 48 22 99 15 95 64 43 01 16 94 02 99 19 17 69 11 58 97 56 89 31 77 45 67 96 12 73 08 20 36 47 81 44 50 64 68 85 40 81 85 52 09 | ||||||
|  | 91 35 92 45 32 84 62 15 19 64 21 66 06 01 52 80 62 59 12 25 88 28 91 50 40 16 22 99 92 79 87 51 21 77 74 77 07 42 38 42 74 83 02 05 | ||||||
|  | 46 19 77 66 24 18 05 32 02 84 31 99 92 58 96 72 91 36 62 99 55 29 53 42 12 37 26 58 89 50 66 19 82 75 12 48 24 87 91 85 02 07 03 76 86 | ||||||
|  | 99 98 84 93 07 17 33 61 92 20 66 60 24 66 40 30 67 05 37 29 24 96 03 27 70 62 13 04 45 47 59 88 43 20 66 15 46 92 30 04 71 66 78 70 53 99 | ||||||
|  | 67 60 38 06 88 04 17 72 10 99 71 07 42 25 54 05 26 64 91 50 45 71 06 30 67 48 69 82 08 56 80 67 18 46 66 63 01 20 08 80 47 07 91 16 03 79 87 | ||||||
|  | 18 54 78 49 80 48 77 40 68 23 60 88 58 80 33 57 11 69 55 53 64 02 94 49 60 92 16 35 81 21 82 96 25 24 96 18 02 05 49 03 50 77 06 32 84 27 18 38 | ||||||
|  | 68 01 50 04 03 21 42 94 53 24 89 05 92 26 52 36 68 11 85 01 04 42 02 45 15 06 50 04 53 73 25 74 81 88 98 21 67 84 79 97 99 20 95 04 40 46 02 58 87 | ||||||
|  | 94 10 02 78 88 52 21 03 88 60 06 53 49 71 20 91 12 65 07 49 21 22 11 41 58 99 36 16 09 48 17 24 52 36 23 15 72 16 84 56 02 99 43 76 81 71 29 39 49 17 | ||||||
|  | 64 39 59 84 86 16 17 66 03 09 43 06 64 18 63 29 68 06 23 07 87 14 26 35 17 12 98 41 53 64 78 18 98 27 28 84 80 67 75 62 10 11 76 90 54 10 05 54 41 39 66 | ||||||
|  | 43 83 18 37 32 31 52 29 95 47 08 76 35 11 04 53 35 43 34 10 52 57 12 36 20 39 40 55 78 44 07 31 38 26 08 15 56 88 86 01 52 62 10 24 32 05 60 65 53 28 57 99 | ||||||
|  | 03 50 03 52 07 73 49 92 66 80 01 46 08 67 25 36 73 93 07 42 25 53 13 96 76 83 87 90 54 89 78 22 78 91 73 51 69 09 79 94 83 53 09 40 69 62 10 79 49 47 03 81 30 | ||||||
|  | 71 54 73 33 51 76 59 54 79 37 56 45 84 17 62 21 98 69 41 95 65 24 39 37 62 03 24 48 54 64 46 82 71 78 33 67 09 16 96 68 52 74 79 68 32 21 13 78 96 60 09 69 20 36 | ||||||
|  | 73 26 21 44 46 38 17 83 65 98 07 23 52 46 61 97 33 13 60 31 70 15 36 77 31 58 56 93 75 68 21 36 69 53 90 75 25 82 39 50 65 94 29 30 11 33 11 13 96 02 56 47 07 49 02 | ||||||
|  | 76 46 73 30 10 20 60 70 14 56 34 26 37 39 48 24 55 76 84 91 39 86 95 61 50 14 53 93 64 67 37 31 10 84 42 70 48 20 10 72 60 61 84 79 69 65 99 73 89 25 85 48 92 56 97 16 | ||||||
|  | 03 14 80 27 22 30 44 27 67 75 79 32 51 54 81 29 65 14 19 04 13 82 04 91 43 40 12 52 29 99 07 76 60 25 01 07 61 71 37 92 40 47 99 66 57 01 43 44 22 40 53 53 09 69 26 81 07 | ||||||
|  | 49 80 56 90 93 87 47 13 75 28 87 23 72 79 32 18 27 20 28 10 37 59 21 18 70 04 79 96 03 31 45 71 81 06 14 18 17 05 31 50 92 79 23 47 09 39 47 91 43 54 69 47 42 95 62 46 32 85 | ||||||
|  | 37 18 62 85 87 28 64 05 77 51 47 26 30 65 05 70 65 75 59 80 42 52 25 20 44 10 92 17 71 95 52 14 77 13 24 55 11 65 26 91 01 30 63 15 49 48 41 17 67 47 03 68 20 90 98 32 04 40 68 | ||||||
|  | 90 51 58 60 06 55 23 68 05 19 76 94 82 36 96 43 38 90 87 28 33 83 05 17 70 83 96 93 06 04 78 47 80 06 23 84 75 23 87 72 99 14 50 98 92 38 90 64 61 58 76 94 36 66 87 80 51 35 61 38 | ||||||
|  | 57 95 64 06 53 36 82 51 40 33 47 14 07 98 78 65 39 58 53 06 50 53 04 69 40 68 36 69 75 78 75 60 03 32 39 24 74 47 26 90 13 40 44 71 90 76 51 24 36 50 25 45 70 80 61 80 61 43 90 64 11 | ||||||
|  | 18 29 86 56 68 42 79 10 42 44 30 12 96 18 23 18 52 59 02 99 67 46 60 86 43 38 55 17 44 93 42 21 55 14 47 34 55 16 49 24 23 29 96 51 55 10 46 53 27 92 27 46 63 57 30 65 43 27 21 20 24 83 | ||||||
|  | 81 72 93 19 69 52 48 01 13 83 92 69 20 48 69 59 20 62 05 42 28 89 90 99 32 72 84 17 08 87 36 03 60 31 36 36 81 26 97 36 48 54 56 56 27 16 91 08 23 11 87 99 33 47 02 14 44 73 70 99 43 35 33 | ||||||
|  | 90 56 61 86 56 12 70 59 63 32 01 15 81 47 71 76 95 32 65 80 54 70 34 51 40 45 33 04 64 55 78 68 88 47 31 47 68 87 03 84 23 44 89 72 35 08 31 76 63 26 90 85 96 67 65 91 19 14 17 86 04 71 32 95 | ||||||
|  | 37 13 04 22 64 37 37 28 56 62 86 33 07 37 10 44 52 82 52 06 19 52 57 75 90 26 91 24 06 21 14 67 76 30 46 14 35 89 89 41 03 64 56 97 87 63 22 34 03 79 17 45 11 53 25 56 96 61 23 18 63 31 37 37 47 | ||||||
|  | 77 23 26 70 72 76 77 04 28 64 71 69 14 85 96 54 95 48 06 62 99 83 86 77 97 75 71 66 30 19 57 90 33 01 60 61 14 12 90 99 32 77 56 41 18 14 87 49 10 14 90 64 18 50 21 74 14 16 88 05 45 73 82 47 74 44 | ||||||
|  | 22 97 41 13 34 31 54 61 56 94 03 24 59 27 98 77 04 09 37 40 12 26 87 09 71 70 07 18 64 57 80 21 12 71 83 94 60 39 73 79 73 19 97 32 64 29 41 07 48 84 85 67 12 74 95 20 24 52 41 67 56 61 29 93 35 72 69 | ||||||
|  | 72 23 63 66 01 11 07 30 52 56 95 16 65 26 83 90 50 74 60 18 16 48 43 77 37 11 99 98 30 94 91 26 62 73 45 12 87 73 47 27 01 88 66 99 21 41 95 80 02 53 23 32 61 48 32 43 43 83 14 66 95 91 19 81 80 67 25 88 | ||||||
|  | 08 62 32 18 92 14 83 71 37 96 11 83 39 99 05 16 23 27 10 67 02 25 44 11 55 31 46 64 41 56 44 74 26 81 51 31 45 85 87 09 81 95 22 28 76 69 46 48 64 87 67 76 27 89 31 11 74 16 62 03 60 94 42 47 09 34 94 93 72 | ||||||
|  | 56 18 90 18 42 17 42 32 14 86 06 53 33 95 99 35 29 15 44 20 49 59 25 54 34 59 84 21 23 54 35 90 78 16 93 13 37 88 54 19 86 67 68 55 66 84 65 42 98 37 87 56 33 28 58 38 28 38 66 27 52 21 81 15 08 22 97 32 85 27 | ||||||
|  | 91 53 40 28 13 34 91 25 01 63 50 37 22 49 71 58 32 28 30 18 68 94 23 83 63 62 94 76 80 41 90 22 82 52 29 12 18 56 10 08 35 14 37 57 23 65 67 40 72 39 93 39 70 89 40 34 07 46 94 22 20 05 53 64 56 30 05 56 61 88 27 | ||||||
|  | 23 95 11 12 37 69 68 24 66 10 87 70 43 50 75 07 62 41 83 58 95 93 89 79 45 39 02 22 05 22 95 43 62 11 68 29 17 40 26 44 25 71 87 16 70 85 19 25 59 94 90 41 41 80 61 70 55 60 84 33 95 76 42 63 15 09 03 40 38 12 03 32 | ||||||
|  | 09 84 56 80 61 55 85 97 16 94 82 94 98 57 84 30 84 48 93 90 71 05 95 90 73 17 30 98 40 64 65 89 07 79 09 19 56 36 42 30 23 69 73 72 07 05 27 61 24 31 43 48 71 84 21 28 26 65 65 59 65 74 77 20 10 81 61 84 95 08 52 23 70 | ||||||
|  | 47 81 28 09 98 51 67 64 35 51 59 36 92 82 77 65 80 24 72 53 22 07 27 10 21 28 30 22 48 82 80 48 56 20 14 43 18 25 50 95 90 31 77 08 09 48 44 80 90 22 93 45 82 17 13 96 25 26 08 73 34 99 06 49 24 06 83 51 40 14 15 10 25 01 | ||||||
|  | 54 25 10 81 30 64 24 74 75 80 36 75 82 60 22 69 72 91 45 67 03 62 79 54 89 74 44 83 64 96 66 73 44 30 74 50 37 05 09 97 70 01 60 46 37 91 39 75 75 18 58 52 72 78 51 81 86 52 08 97 01 46 43 66 98 62 81 18 70 93 73 08 32 46 34 | ||||||
|  | 96 80 82 07 59 71 92 53 19 20 88 66 03 26 26 10 24 27 50 82 94 73 63 08 51 33 22 45 19 13 58 33 90 15 22 50 36 13 55 06 35 47 82 52 33 61 36 27 28 46 98 14 73 20 73 32 16 26 80 53 47 66 76 38 94 45 02 01 22 52 47 96 64 58 52 39 | ||||||
|  | 88 46 23 39 74 63 81 64 20 90 33 33 76 55 58 26 10 46 42 26 74 74 12 83 32 43 09 02 73 55 86 54 85 34 28 23 29 79 91 62 47 41 82 87 99 22 48 90 20 05 96 75 95 04 43 28 81 39 81 01 28 42 78 25 39 77 90 57 58 98 17 36 73 22 63 74 51 | ||||||
|  | 29 39 74 94 95 78 64 24 38 86 63 87 93 06 70 92 22 16 80 64 29 52 20 27 23 50 14 13 87 15 72 96 81 22 08 49 72 30 70 24 79 31 16 64 59 21 89 34 96 91 48 76 43 53 88 01 57 80 23 81 90 79 58 01 80 87 17 99 86 90 72 63 32 69 14 28 88 69 | ||||||
|  | 37 17 71 95 56 93 71 35 43 45 04 98 92 94 84 96 11 30 31 27 31 60 92 03 48 05 98 91 86 94 35 90 90 08 48 19 33 28 68 37 59 26 65 96 50 68 22 07 09 49 34 31 77 49 43 06 75 17 81 87 61 79 52 26 27 72 29 50 07 98 86 01 17 10 46 64 24 18 56 | ||||||
|  | 51 30 25 94 88 85 79 91 40 33 63 84 49 67 98 92 15 26 75 19 82 05 18 78 65 93 61 48 91 43 59 41 70 51 22 15 92 81 67 91 46 98 11 11 65 31 66 10 98 65 83 21 05 56 05 98 73 67 46 74 69 34 08 30 05 52 07 98 32 95 30 94 65 50 24 63 28 81 99 57 | ||||||
|  | 19 23 61 36 09 89 71 98 65 17 30 29 89 26 79 74 94 11 44 48 97 54 81 55 39 66 69 45 28 47 13 86 15 76 74 70 84 32 36 33 79 20 78 14 41 47 89 28 81 05 99 66 81 86 38 26 06 25 13 60 54 55 23 53 27 05 89 25 23 11 13 54 59 54 56 34 16 24 53 44 06 | ||||||
|  | 13 40 57 72 21 15 60 08 04 19 11 98 34 45 09 97 86 71 03 15 56 19 15 44 97 31 90 04 87 87 76 08 12 30 24 62 84 28 12 85 82 53 99 52 13 94 06 65 97 86 09 50 94 68 69 74 30 67 87 94 63 07 78 27 80 36 69 41 06 92 32 78 37 82 30 05 18 87 99 72 19 99 | ||||||
|  | 44 20 55 77 69 91 27 31 28 81 80 27 02 07 97 23 95 98 12 25 75 29 47 71 07 47 78 39 41 59 27 76 13 15 66 61 68 35 69 86 16 53 67 63 99 85 41 56 08 28 33 40 94 76 90 85 31 70 24 65 84 65 99 82 19 25 54 37 21 46 33 02 52 99 51 33 26 04 87 02 08 18 96 | ||||||
|  | 54 42 61 45 91 06 64 79 80 82 32 16 83 63 42 49 19 78 65 97 40 42 14 61 49 34 04 18 25 98 59 30 82 72 26 88 54 36 21 75 03 88 99 53 46 51 55 78 22 94 34 40 68 87 84 25 30 76 25 08 92 84 42 61 40 38 09 99 40 23 29 39 46 55 10 90 35 84 56 70 63 23 91 39 | ||||||
|  | 52 92 03 71 89 07 09 37 68 66 58 20 44 92 51 56 13 71 79 99 26 37 02 06 16 67 36 52 58 16 79 73 56 60 59 27 44 77 94 82 20 50 98 33 09 87 94 37 40 83 64 83 58 85 17 76 53 02 83 52 22 27 39 20 48 92 45 21 09 42 24 23 12 37 52 28 50 78 79 20 86 62 73 20 59 | ||||||
|  | 54 96 80 15 91 90 99 70 10 09 58 90 93 50 81 99 54 38 36 10 30 11 35 84 16 45 82 18 11 97 36 43 96 79 97 65 40 48 23 19 17 31 64 52 65 65 37 32 65 76 99 79 34 65 79 27 55 33 03 01 33 27 61 28 66 08 04 70 49 46 48 83 01 45 19 96 13 81 14 21 31 79 93 85 50 05 | ||||||
|  | 92 92 48 84 59 98 31 53 23 27 15 22 79 95 24 76 05 79 16 93 97 89 38 89 42 83 02 88 94 95 82 21 01 97 48 39 31 78 09 65 50 56 97 61 01 07 65 27 21 23 14 15 80 97 44 78 49 35 33 45 81 74 34 05 31 57 09 38 94 07 69 54 69 32 65 68 46 68 78 90 24 28 49 51 45 86 35 | ||||||
|  | 41 63 89 76 87 31 86 09 46 14 87 82 22 29 47 16 13 10 70 72 82 95 48 64 58 43 13 75 42 69 21 12 67 13 64 85 58 23 98 09 37 76 05 22 31 12 66 50 29 99 86 72 45 25 10 28 19 06 90 43 29 31 67 79 46 25 74 14 97 35 76 37 65 46 23 82 06 22 30 76 93 66 94 17 96 13 20 72 | ||||||
|  | 63 40 78 08 52 09 90 41 70 28 36 14 46 44 85 96 24 52 58 15 87 37 05 98 99 39 13 61 76 38 44 99 83 74 90 22 53 80 56 98 30 51 63 39 44 30 91 91 04 22 27 73 17 35 53 18 35 45 54 56 27 78 48 13 69 36 44 38 71 25 30 56 15 22 73 43 32 69 59 25 93 83 45 11 34 94 44 39 92 | ||||||
|  | 12 36 56 88 13 96 16 12 55 54 11 47 19 78 17 17 68 81 77 51 42 55 99 85 66 27 81 79 93 42 65 61 69 74 14 01 18 56 12 01 58 37 91 22 42 66 83 25 19 04 96 41 25 45 18 69 96 88 36 93 10 12 98 32 44 83 83 04 72 91 04 27 73 07 34 37 71 60 59 31 01 54 54 44 96 93 83 36 04 45 | ||||||
|  | 30 18 22 20 42 96 65 79 17 41 55 69 94 81 29 80 91 31 85 25 47 26 43 49 02 99 34 67 99 76 16 14 15 93 08 32 99 44 61 77 67 50 43 55 87 55 53 72 17 46 62 25 50 99 73 05 93 48 17 31 70 80 59 09 44 59 45 13 74 66 58 94 87 73 16 14 85 38 74 99 64 23 79 28 71 42 20 37 82 31 23 | ||||||
|  | 51 96 39 65 46 71 56 13 29 68 53 86 45 33 51 49 12 91 21 21 76 85 02 17 98 15 46 12 60 21 88 30 92 83 44 59 42 50 27 88 46 86 94 73 45 54 23 24 14 10 94 21 20 34 23 51 04 83 99 75 90 63 60 16 22 33 83 70 11 32 10 50 29 30 83 46 11 05 31 17 86 42 49 01 44 63 28 60 07 78 95 40 | ||||||
|  | 44 61 89 59 04 49 51 27 69 71 46 76 44 04 09 34 56 39 15 06 94 91 75 90 65 27 56 23 74 06 23 33 36 69 14 39 05 34 35 57 33 22 76 46 56 10 61 65 98 09 16 69 04 62 65 18 99 76 49 18 72 66 73 83 82 40 76 31 89 91 27 88 17 35 41 35 32 51 32 67 52 68 74 85 80 57 07 11 62 66 47 22 67 | ||||||
|  | 65 37 19 97 26 17 16 24 24 17 50 37 64 82 24 36 32 11 68 34 69 31 32 89 79 93 96 68 49 90 14 23 04 04 67 99 81 74 70 74 36 96 68 09 64 39 88 35 54 89 96 58 66 27 88 97 32 14 06 35 78 20 71 06 85 66 57 02 58 91 72 05 29 56 73 48 86 52 09 93 22 57 79 42 12 01 31 68 17 59 63 76 07 77 | ||||||
|  | 73 81 14 13 17 20 11 09 01 83 08 85 91 70 84 63 62 77 37 07 47 01 59 95 39 69 39 21 99 09 87 02 97 16 92 36 74 71 90 66 33 73 73 75 52 91 11 12 26 53 05 26 26 48 61 50 90 65 01 87 42 47 74 35 22 73 24 26 56 70 52 05 48 41 31 18 83 27 21 39 80 85 26 08 44 02 71 07 63 22 05 52 19 08 20 | ||||||
|  | 17 25 21 11 72 93 33 49 64 23 53 82 03 13 91 65 85 02 40 05 42 31 77 42 05 36 06 54 04 58 07 76 87 83 25 57 66 12 74 33 85 37 74 32 20 69 03 97 91 68 82 44 19 14 89 28 85 85 80 53 34 87 58 98 88 78 48 65 98 40 11 57 10 67 70 81 60 79 74 72 97 59 79 47 30 20 54 80 89 91 14 05 33 36 79 39 | ||||||
|  | 60 85 59 39 60 07 57 76 77 92 06 35 15 72 23 41 45 52 95 18 64 79 86 53 56 31 69 11 91 31 84 50 44 82 22 81 41 40 30 42 30 91 48 94 74 76 64 58 74 25 96 57 14 19 03 99 28 83 15 75 99 01 89 85 79 50 03 95 32 67 44 08 07 41 62 64 29 20 14 76 26 55 48 71 69 66 19 72 44 25 14 01 48 74 12 98 07 | ||||||
|  | 64 66 84 24 18 16 27 48 20 14 47 69 30 86 48 40 23 16 61 21 51 50 26 47 35 33 91 28 78 64 43 68 04 79 51 08 19 60 52 95 06 68 46 86 35 97 27 58 04 65 30 58 99 12 12 75 91 39 50 31 42 64 70 04 46 07 98 73 98 93 37 89 77 91 64 71 64 65 66 21 78 62 81 74 42 20 83 70 73 95 78 45 92 27 34 53 71 15 | ||||||
|  | 30 11 85 31 34 71 13 48 05 14 44 03 19 67 23 73 19 57 06 90 94 72 57 69 81 62 59 68 88 57 55 69 49 13 07 87 97 80 89 05 71 05 05 26 38 40 16 62 45 99 18 38 98 24 21 26 62 74 69 04 85 57 77 35 58 67 91 79 79 57 86 28 66 34 72 51 76 78 36 95 63 90 08 78 47 63 45 31 22 70 52 48 79 94 15 77 61 67 68 | ||||||
|  | 23 33 44 81 80 92 93 75 94 88 23 61 39 76 22 03 28 94 32 06 49 65 41 34 18 23 08 47 62 60 03 63 33 13 80 52 31 54 73 43 70 26 16 69 57 87 83 31 03 93 70 81 47 95 77 44 29 68 39 51 56 59 63 07 25 70 07 77 43 53 64 03 94 42 95 39 18 01 66 21 16 97 20 50 90 16 70 10 95 69 29 06 25 61 41 26 15 59 63 35 | ||||||
		Loading…
	
		Reference in New Issue