From b0fb3e87a6e12cfe1203e44aed2caaf7b7d8c959 Mon Sep 17 00:00:00 2001 From: Neil Smith Date: Mon, 13 Feb 2017 15:19:46 +0000 Subject: [PATCH] Initial commit, first 27 tasks --- .gitignore | 59 +++++ Gemfile | 14 + Gemfile.lock | 41 +++ divisors.rb | 53 ++++ euler-3.rb | 30 +++ euler-4-old.rb | 37 +++ euler-4.rb | 49 ++++ euler11.rb | 90 +++++++ euler12.rb | 25 ++ euler13.rb | 105 ++++++++ euler14.rb | 29 ++ euler14.sb | Bin 0 -> 61634 bytes euler15.rb | 9 + euler16.rb | 3 + euler17.rb | 58 ++++ euler18.rb | 44 ++++ euler19.rb | 19 ++ euler20.rb | 9 + euler21.rb | 32 +++ euler22-names.txt | 1 + euler22.rb | 23 ++ euler23.rb | 24 ++ euler24.rb | 54 ++++ euler25.rb | 9 + euler26.ipynb | 368 ++++++++++++++++++++++++++ euler27.ipynb | 613 +++++++++++++++++++++++++++++++++++++++++++ euler67-triangle.txt | 100 +++++++ euler67.rb | 26 ++ euler7.rb | 15 ++ fibonacci.rb | 22 ++ primes.rb | 100 +++++++ 31 files changed, 2061 insertions(+) create mode 100644 .gitignore create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 divisors.rb create mode 100644 euler-3.rb create mode 100644 euler-4-old.rb create mode 100644 euler-4.rb create mode 100644 euler11.rb create mode 100644 euler12.rb create mode 100644 euler13.rb create mode 100644 euler14.rb create mode 100644 euler14.sb create mode 100644 euler15.rb create mode 100644 euler16.rb create mode 100644 euler17.rb create mode 100644 euler18.rb create mode 100644 euler19.rb create mode 100644 euler20.rb create mode 100644 euler21.rb create mode 100644 euler22-names.txt create mode 100644 euler22.rb create mode 100644 euler23.rb create mode 100644 euler24.rb create mode 100644 euler25.rb create mode 100644 euler26.ipynb create mode 100644 euler27.ipynb create mode 100644 euler67-triangle.txt create mode 100644 euler67.rb create mode 100644 euler7.rb create mode 100644 fibonacci.rb create mode 100644 primes.rb diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1f18e43 --- /dev/null +++ b/.gitignore @@ -0,0 +1,59 @@ +*.gem +*.rbc +/.config +/coverage/ +/InstalledFiles +/pkg/ +/spec/reports/ +/spec/examples.txt +/test/tmp/ +/test/version_tmp/ +/tmp/ + +# Used by dotenv library to load environment variables. +# .env + +## Specific to RubyMotion: +.dat* +.repl_history +build/ +*.bridgesupport +build-iPhoneOS/ +build-iPhoneSimulator/ + +## Specific to RubyMotion (use of CocoaPods): +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +# vendor/Pods/ + +## Documentation cache and generated files: +/.yardoc/ +/_yardoc/ +/doc/ +/rdoc/ + +## Environment normalization: +/.bundle/ +/vendor/bundle +/lib/bundler/man/ + +# for a library or gem, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# Gemfile.lock +# .ruby-version +# .ruby-gemset + +# unless supporting rvm < 1.11.0 or doing something fancy, ignore this: +.rvmrc + +# IPython +.ipynb* + +# Sublime text +*.sublime-workspace + +# Logs +*.log diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..209778e --- /dev/null +++ b/Gemfile @@ -0,0 +1,14 @@ +# A sample Gemfile +source "https://rubygems.org" + +# gem "rails" +gem "iruby" +gem 'rbczmq' +# gem 'cztop' +gem 'ffi' +gem 'pry' +gem 'nyaplot' +gem 'gnuplot' +gem 'awesome_print' +gem 'rubyvis' + diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..40574db --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,41 @@ +GEM + remote: https://rubygems.org/ + specs: + awesome_print (1.7.0) + bond (0.5.1) + coderay (1.1.0) + data_uri (0.1.0) + ffi (1.9.17) + gnuplot (2.6.2) + iruby (0.2.9) + bond (~> 0.5) + data_uri (~> 0.1) + mimemagic (~> 0.3) + multi_json (~> 1.11) + method_source (0.8.2) + mimemagic (0.3.0) + multi_json (1.11.2) + nyaplot (0.1.6) + pry (0.10.4) + coderay (~> 1.1.0) + method_source (~> 0.8.1) + slop (~> 3.4) + rbczmq (1.7.9) + rubyvis (0.6.1) + slop (3.6.0) + +PLATFORMS + ruby + +DEPENDENCIES + awesome_print + ffi + gnuplot + iruby + nyaplot + pry + rbczmq + rubyvis + +BUNDLED WITH + 1.10.6 diff --git a/divisors.rb b/divisors.rb new file mode 100644 index 0000000..2ad9872 --- /dev/null +++ b/divisors.rb @@ -0,0 +1,53 @@ +load 'primes.rb' + + +class Integer + # Returns a Hash of prime factors of self. + # Each key is a prime factor of self, and factors[i] is the power of that prime factor + # For example 45.prime_factors # => {3 => 2, 5 => 1} + # or, 45 = 3 ** 2 * 5 ** 1 + def prime_factors + primes = Primes.instance + n = self + factors = Hash.new(0) + i = 0 + while n > 1 + if n % primes[i] == 0 + factors[primes[i]] += 1 + n = n.div primes[i] + else + i += 1 + end + end + factors + end + + def number_of_divisors + factors = prime_factors + factors.keys.reduce(1) {|a, factor| a *= factors[factor] + 1} + end + + def sum_of_divisors + factors = prime_factors + factors.keys.map {|f| + (0..factors[f]).map {|a| f ** a}.reduce(:+) + }.reduce(:*) + end + + def sum_of_proper_divisors + sum_of_divisors - self + end + + def perfect? + sum_of_proper_divisors == self + end + + def abundant? + sum_of_proper_divisors > self + end + + def deficient? + sum_of_proper_divisors < self + end + +end \ No newline at end of file diff --git a/euler-3.rb b/euler-3.rb new file mode 100644 index 0000000..032c8b0 --- /dev/null +++ b/euler-3.rb @@ -0,0 +1,30 @@ +#!/usr/bin/ruby -w + +require 'primes.rb' + +if ARGV[0].to_i != 0 + $TARGET = ARGV[0].to_i +else + $TARGET = 600851475143 +end + +primes = Primes.instance + +quotient = $TARGET +prime_factors = [] +prime_index = 0 + +while quotient > 1 +# puts "trying factor #{primes[prime_index]} with quotient #{quotient}" + if (quotient % primes[prime_index]) == 0 + prime_factors << primes[prime_index] + quotient = quotient.div primes[prime_index] + else + prime_index += 1 + end +end + +if __FILE__==$0 + puts "Prime factors of #{$TARGET} are #{prime_factors.join(', ')}; largest is #{prime_factors.max}" +end + diff --git a/euler-4-old.rb b/euler-4-old.rb new file mode 100644 index 0000000..13d0bd6 --- /dev/null +++ b/euler-4-old.rb @@ -0,0 +1,37 @@ +num = 1 +dem = 1 + +directions = [:left, :back, :down, :forward] + +direction = :left + +10.times do + puts "#{num}/#{dem}, dir = #{direction}" + case direction + when :left + num += 1 + direction = :back + when :down + dem += 1 + direction = :forward + when :back + if num > 1 + num -= 1 + else + direction = :forward + end + dem += 1 + when :forward + if dem > 1 + dem -= 1 + else + direction = :back + end + num += 1 + end +end + + + + + diff --git a/euler-4.rb b/euler-4.rb new file mode 100644 index 0000000..f01636f --- /dev/null +++ b/euler-4.rb @@ -0,0 +1,49 @@ + +def is_palindrome?(n) + n.to_s == n.to_s.reverse +end + + +a = b = limit = 999 + +directions = [:left, :back, :down, :forward] + +direction = :left + +puts "#{a}/#{b}, product = #{a*b}, dir = #{direction}" + +while not is_palindrome?(a * b) do + case direction + when :left + a -= 1 + direction = :back + when :down + b -= 1 + direction = :forward + when :back + if a < limit + a += 1 + else + direction = :forward + end + b -= 1 + when :forward + if b < limit + b += 1 + else + direction = :back + end + a -= 1 + end +# puts "#{a}/#{b}, product = #{a*b}, dir = #{direction}" + end + +if __FILE__==$0 + puts "Largest palindrome is #{a*b}, the product of #{a} and #{b}" +end + + + + + + diff --git a/euler11.rb b/euler11.rb new file mode 100644 index 0000000..b36d9bd --- /dev/null +++ b/euler11.rb @@ -0,0 +1,90 @@ +grid_line = %w{ +08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 +49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 +81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 +52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 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 03 45 02 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 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 +24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 +21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 +78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 +16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 +86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 +19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 +04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66 +88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69 +04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36 +20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16 +20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54 +01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48 } + +$grid = [] +grid_line.map {|s| s.to_i}.each_slice(20) {|s| $grid << s} +$line_length = 4 + +def find_largest_product + largest = 0 + largest_row = 0 + largest_column = 0 + largest_direction = :east + $grid.length.times do |row| + $grid[0].length.times do |column| + [:east, :south_east, :south, :south_west].each do |direction| + this_product = find_product($grid, row, column, direction, $line_length) + if this_product > largest + largest = this_product + largest_row = row + largest_column = column + largest_direction = direction + end + end + end + end + return largest, largest_row, largest_column, largest_direction +end + +def offsets_of_direction(direction) + case direction + when :north + return -1, 0 + when :south + return 1, 0 + when :east + return 0, 1 + when :west + return 0, -1 + when :north_east + return -1, 1 + when :south_east + return 1, 1 + when :south_west + return 1, -1 + when :north_west + return -1, -1 + end +end + +def find_product(grid, row, column, direction, line_length) + row_change, column_change = offsets_of_direction(direction) + end_row = row + row_change * (line_length - 1) + end_column = column + column_change * (line_length - 1) + return 0 unless (0...grid.length).include? end_row and + (0...grid[0].length).include? end_column + if row_change == 0 + rows = [row] * line_length + else + rows = row.step(end_row, row_change).to_a + end + if column_change == 0 + cols = [column] * line_length + else + cols = column.step(end_column, column_change).to_a + end + rows.zip(cols).reduce(1) {|product, i| product *= grid[i[0]][i[1]]} +end + +if __FILE__==$0 + puts find_largest_product[0] +end \ No newline at end of file diff --git a/euler12.rb b/euler12.rb new file mode 100644 index 0000000..f6df027 --- /dev/null +++ b/euler12.rb @@ -0,0 +1,25 @@ +load 'divisors.rb' + +require 'logger' +$log = Logger.new(STDERR) +$log.level = Logger::WARN + + +# The nth triangle number +def triangle(n) + n * (n + 1) / 2 +end + +def first_triangle_number_with_more_than_n_divisors(n) + i = 1 + while triangle(i).number_of_divisors <= 500 + $log.info { "Triangle number #{i} is #{triangle(i)}, which has #{triangle(i).number_of_divisors} divisors" } + i += 1 + end + $log.info { "Triangle number #{i} is #{triangle(i)}, which has #{triangle(i).number_of_divisors} divisors" } + triangle i +end + +if __FILE__==$0 + puts first_triangle_number_with_more_than_n_divisors(500) +end diff --git a/euler13.rb b/euler13.rb new file mode 100644 index 0000000..67e600b --- /dev/null +++ b/euler13.rb @@ -0,0 +1,105 @@ +$numbers = %w{ +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 }.map {|i| i.to_i} + +if __FILE__==$0 + p $numbers.reduce(:+).to_s[0..9] +end diff --git a/euler14.rb b/euler14.rb new file mode 100644 index 0000000..567eac3 --- /dev/null +++ b/euler14.rb @@ -0,0 +1,29 @@ +require 'logger' +log = Logger.new(STDERR) +log.level = Logger::WARN + +$chain_lengths = {1 => 1} + +def chain_length(n) + unless $chain_lengths.has_key?(n) + if n % 2 == 0 + $chain_lengths[n] = 1 + chain_length(n / 2) + else + $chain_lengths[n] = 1 + chain_length(3 * n + 1) + end + end + $chain_lengths[n] +end + +longest_chain_start = 1 +1.upto(1000000) do |i| + if chain_length(i) > chain_length(longest_chain_start) + longest_chain_start = i + log.info {"Found new longest chain. Starts at #{i}, #{chain_length(i)} elements"} + end + log.debug {"#{i} has chain length #{chain_length(i)}"} +end + +puts "Longest chain starts at #{longest_chain_start}, with #{$chain_lengths[longest_chain_start]} elements" + +log.close \ No newline at end of file diff --git a/euler14.sb b/euler14.sb new file mode 100644 index 0000000000000000000000000000000000000000..8bfb83ed276324f87be2f2872dde70115e3caf19 GIT binary patch literal 61634 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 'one', + 2 => 'two', + 3 => 'three', + 4 => 'four', + 5 => 'five', + 6 => 'six', + 7 => 'seven', + 8 => 'eight', + 9 => 'nine', + 10 => 'ten', + 11 => 'eleven', + 12 => 'twelve', + 13 => 'thirteen', + 14 => 'fourteen', + 15 => 'fifteen', + 16 => 'sixteen', + 17 => 'seventeen', + 18 => 'eighteen', + 19 => 'nineteen', + 20 => 'twenty', + 30 => 'thirty', + 40 => 'forty', + 50 => 'fifty', + 60 => 'sixty', + 70 => 'seventy', + 80 => 'eighty', + 90 => 'ninety', + 100 => 'hundred', + 1000 => 'thousand'} + +def words_of_number(n) + case n + when (1..20) + [$words[n]] + when (21..99) + [$words[n.div(10) * 10], $words[n % 10]] + when (100..999) + [$words[n.div(100)], 'hundred'] + (n % 100 == 0 ? [] : ['and'] + words_of_number(n % 100)) + when 1000 + ['one', 'thousand'] + end +end + +if __FILE__==$0 + words = [] + 1.upto(1000) do |i| + words += words_of_number(i) + log.info { "Number #{i} gives words #{words_of_number i}" } + end + + puts words.join('').length +end + +log.close \ No newline at end of file diff --git a/euler18.rb b/euler18.rb new file mode 100644 index 0000000..8bfb065 --- /dev/null +++ b/euler18.rb @@ -0,0 +1,44 @@ +require 'logger' + +$triangle_source = < n + amicable_pairs << [n, cache[n]] + $log.info { "Found amicable pairs #{n} and #{cache[n]}" } + end + end + amicable_pairs +end + +def sum_of_amicable_pairs(limit) + amicable_pairs(limit).reduce(0) {|a, p| a += p.reduce(:+)} +end + +if __FILE__==$0 + puts sum_of_amicable_pairs 10000 +end + +log.close \ No newline at end of file diff --git a/euler22-names.txt b/euler22-names.txt new file mode 100644 index 0000000..7b8986b --- /dev/null +++ b/euler22-names.txt @@ -0,0 +1 @@ +"MARY","PATRICIA","LINDA","BARBARA","ELIZABETH","JENNIFER","MARIA","SUSAN","MARGARET","DOROTHY","LISA","NANCY","KAREN","BETTY","HELEN","SANDRA","DONNA","CAROL","RUTH","SHARON","MICHELLE","LAURA","SARAH","KIMBERLY","DEBORAH","JESSICA","SHIRLEY","CYNTHIA","ANGELA","MELISSA","BRENDA","AMY","ANNA","REBECCA","VIRGINIA","KATHLEEN","PAMELA","MARTHA","DEBRA","AMANDA","STEPHANIE","CAROLYN","CHRISTINE","MARIE","JANET","CATHERINE","FRANCES","ANN","JOYCE","DIANE","ALICE","JULIE","HEATHER","TERESA","DORIS","GLORIA","EVELYN","JEAN","CHERYL","MILDRED","KATHERINE","JOAN","ASHLEY","JUDITH","ROSE","JANICE","KELLY","NICOLE","JUDY","CHRISTINA","KATHY","THERESA","BEVERLY","DENISE","TAMMY","IRENE","JANE","LORI","RACHEL","MARILYN","ANDREA","KATHRYN","LOUISE","SARA","ANNE","JACQUELINE","WANDA","BONNIE","JULIA","RUBY","LOIS","TINA","PHYLLIS","NORMA","PAULA","DIANA","ANNIE","LILLIAN","EMILY","ROBIN","PEGGY","CRYSTAL","GLADYS","RITA","DAWN","CONNIE","FLORENCE","TRACY","EDNA","TIFFANY","CARMEN","ROSA","CINDY","GRACE","WENDY","VICTORIA","EDITH","KIM","SHERRY","SYLVIA","JOSEPHINE","THELMA","SHANNON","SHEILA","ETHEL","ELLEN","ELAINE","MARJORIE","CARRIE","CHARLOTTE","MONICA","ESTHER","PAULINE","EMMA","JUANITA","ANITA","RHONDA","HAZEL","AMBER","EVA","DEBBIE","APRIL","LESLIE","CLARA","LUCILLE","JAMIE","JOANNE","ELEANOR","VALERIE","DANIELLE","MEGAN","ALICIA","SUZANNE","MICHELE","GAIL","BERTHA","DARLENE","VERONICA","JILL","ERIN","GERALDINE","LAUREN","CATHY","JOANN","LORRAINE","LYNN","SALLY","REGINA","ERICA","BEATRICE","DOLORES","BERNICE","AUDREY","YVONNE","ANNETTE","JUNE","SAMANTHA","MARION","DANA","STACY","ANA","RENEE","IDA","VIVIAN","ROBERTA","HOLLY","BRITTANY","MELANIE","LORETTA","YOLANDA","JEANETTE","LAURIE","KATIE","KRISTEN","VANESSA","ALMA","SUE","ELSIE","BETH","JEANNE","VICKI","CARLA","TARA","ROSEMARY","EILEEN","TERRI","GERTRUDE","LUCY","TONYA","ELLA","STACEY","WILMA","GINA","KRISTIN","JESSIE","NATALIE","AGNES","VERA","WILLIE","CHARLENE","BESSIE","DELORES","MELINDA","PEARL","ARLENE","MAUREEN","COLLEEN","ALLISON","TAMARA","JOY","GEORGIA","CONSTANCE","LILLIE","CLAUDIA","JACKIE","MARCIA","TANYA","NELLIE","MINNIE","MARLENE","HEIDI","GLENDA","LYDIA","VIOLA","COURTNEY","MARIAN","STELLA","CAROLINE","DORA","JO","VICKIE","MATTIE","TERRY","MAXINE","IRMA","MABEL","MARSHA","MYRTLE","LENA","CHRISTY","DEANNA","PATSY","HILDA","GWENDOLYN","JENNIE","NORA","MARGIE","NINA","CASSANDRA","LEAH","PENNY","KAY","PRISCILLA","NAOMI","CAROLE","BRANDY","OLGA","BILLIE","DIANNE","TRACEY","LEONA","JENNY","FELICIA","SONIA","MIRIAM","VELMA","BECKY","BOBBIE","VIOLET","KRISTINA","TONI","MISTY","MAE","SHELLY","DAISY","RAMONA","SHERRI","ERIKA","KATRINA","CLAIRE","LINDSEY","LINDSAY","GENEVA","GUADALUPE","BELINDA","MARGARITA","SHERYL","CORA","FAYE","ADA","NATASHA","SABRINA","ISABEL","MARGUERITE","HATTIE","HARRIET","MOLLY","CECILIA","KRISTI","BRANDI","BLANCHE","SANDY","ROSIE","JOANNA","IRIS","EUNICE","ANGIE","INEZ","LYNDA","MADELINE","AMELIA","ALBERTA","GENEVIEVE","MONIQUE","JODI","JANIE","MAGGIE","KAYLA","SONYA","JAN","LEE","KRISTINE","CANDACE","FANNIE","MARYANN","OPAL","ALISON","YVETTE","MELODY","LUZ","SUSIE","OLIVIA","FLORA","SHELLEY","KRISTY","MAMIE","LULA","LOLA","VERNA","BEULAH","ANTOINETTE","CANDICE","JUANA","JEANNETTE","PAM","KELLI","HANNAH","WHITNEY","BRIDGET","KARLA","CELIA","LATOYA","PATTY","SHELIA","GAYLE","DELLA","VICKY","LYNNE","SHERI","MARIANNE","KARA","JACQUELYN","ERMA","BLANCA","MYRA","LETICIA","PAT","KRISTA","ROXANNE","ANGELICA","JOHNNIE","ROBYN","FRANCIS","ADRIENNE","ROSALIE","ALEXANDRA","BROOKE","BETHANY","SADIE","BERNADETTE","TRACI","JODY","KENDRA","JASMINE","NICHOLE","RACHAEL","CHELSEA","MABLE","ERNESTINE","MURIEL","MARCELLA","ELENA","KRYSTAL","ANGELINA","NADINE","KARI","ESTELLE","DIANNA","PAULETTE","LORA","MONA","DOREEN","ROSEMARIE","ANGEL","DESIREE","ANTONIA","HOPE","GINGER","JANIS","BETSY","CHRISTIE","FREDA","MERCEDES","MEREDITH","LYNETTE","TERI","CRISTINA","EULA","LEIGH","MEGHAN","SOPHIA","ELOISE","ROCHELLE","GRETCHEN","CECELIA","RAQUEL","HENRIETTA","ALYSSA","JANA","KELLEY","GWEN","KERRY","JENNA","TRICIA","LAVERNE","OLIVE","ALEXIS","TASHA","SILVIA","ELVIRA","CASEY","DELIA","SOPHIE","KATE","PATTI","LORENA","KELLIE","SONJA","LILA","LANA","DARLA","MAY","MINDY","ESSIE","MANDY","LORENE","ELSA","JOSEFINA","JEANNIE","MIRANDA","DIXIE","LUCIA","MARTA","FAITH","LELA","JOHANNA","SHARI","CAMILLE","TAMI","SHAWNA","ELISA","EBONY","MELBA","ORA","NETTIE","TABITHA","OLLIE","JAIME","WINIFRED","KRISTIE","MARINA","ALISHA","AIMEE","RENA","MYRNA","MARLA","TAMMIE","LATASHA","BONITA","PATRICE","RONDA","SHERRIE","ADDIE","FRANCINE","DELORIS","STACIE","ADRIANA","CHERI","SHELBY","ABIGAIL","CELESTE","JEWEL","CARA","ADELE","REBEKAH","LUCINDA","DORTHY","CHRIS","EFFIE","TRINA","REBA","SHAWN","SALLIE","AURORA","LENORA","ETTA","LOTTIE","KERRI","TRISHA","NIKKI","ESTELLA","FRANCISCA","JOSIE","TRACIE","MARISSA","KARIN","BRITTNEY","JANELLE","LOURDES","LAUREL","HELENE","FERN","ELVA","CORINNE","KELSEY","INA","BETTIE","ELISABETH","AIDA","CAITLIN","INGRID","IVA","EUGENIA","CHRISTA","GOLDIE","CASSIE","MAUDE","JENIFER","THERESE","FRANKIE","DENA","LORNA","JANETTE","LATONYA","CANDY","MORGAN","CONSUELO","TAMIKA","ROSETTA","DEBORA","CHERIE","POLLY","DINA","JEWELL","FAY","JILLIAN","DOROTHEA","NELL","TRUDY","ESPERANZA","PATRICA","KIMBERLEY","SHANNA","HELENA","CAROLINA","CLEO","STEFANIE","ROSARIO","OLA","JANINE","MOLLIE","LUPE","ALISA","LOU","MARIBEL","SUSANNE","BETTE","SUSANA","ELISE","CECILE","ISABELLE","LESLEY","JOCELYN","PAIGE","JONI","RACHELLE","LEOLA","DAPHNE","ALTA","ESTER","PETRA","GRACIELA","IMOGENE","JOLENE","KEISHA","LACEY","GLENNA","GABRIELA","KERI","URSULA","LIZZIE","KIRSTEN","SHANA","ADELINE","MAYRA","JAYNE","JACLYN","GRACIE","SONDRA","CARMELA","MARISA","ROSALIND","CHARITY","TONIA","BEATRIZ","MARISOL","CLARICE","JEANINE","SHEENA","ANGELINE","FRIEDA","LILY","ROBBIE","SHAUNA","MILLIE","CLAUDETTE","CATHLEEN","ANGELIA","GABRIELLE","AUTUMN","KATHARINE","SUMMER","JODIE","STACI","LEA","CHRISTI","JIMMIE","JUSTINE","ELMA","LUELLA","MARGRET","DOMINIQUE","SOCORRO","RENE","MARTINA","MARGO","MAVIS","CALLIE","BOBBI","MARITZA","LUCILE","LEANNE","JEANNINE","DEANA","AILEEN","LORIE","LADONNA","WILLA","MANUELA","GALE","SELMA","DOLLY","SYBIL","ABBY","LARA","DALE","IVY","DEE","WINNIE","MARCY","LUISA","JERI","MAGDALENA","OFELIA","MEAGAN","AUDRA","MATILDA","LEILA","CORNELIA","BIANCA","SIMONE","BETTYE","RANDI","VIRGIE","LATISHA","BARBRA","GEORGINA","ELIZA","LEANN","BRIDGETTE","RHODA","HALEY","ADELA","NOLA","BERNADINE","FLOSSIE","ILA","GRETA","RUTHIE","NELDA","MINERVA","LILLY","TERRIE","LETHA","HILARY","ESTELA","VALARIE","BRIANNA","ROSALYN","EARLINE","CATALINA","AVA","MIA","CLARISSA","LIDIA","CORRINE","ALEXANDRIA","CONCEPCION","TIA","SHARRON","RAE","DONA","ERICKA","JAMI","ELNORA","CHANDRA","LENORE","NEVA","MARYLOU","MELISA","TABATHA","SERENA","AVIS","ALLIE","SOFIA","JEANIE","ODESSA","NANNIE","HARRIETT","LORAINE","PENELOPE","MILAGROS","EMILIA","BENITA","ALLYSON","ASHLEE","TANIA","TOMMIE","ESMERALDA","KARINA","EVE","PEARLIE","ZELMA","MALINDA","NOREEN","TAMEKA","SAUNDRA","HILLARY","AMIE","ALTHEA","ROSALINDA","JORDAN","LILIA","ALANA","GAY","CLARE","ALEJANDRA","ELINOR","MICHAEL","LORRIE","JERRI","DARCY","EARNESTINE","CARMELLA","TAYLOR","NOEMI","MARCIE","LIZA","ANNABELLE","LOUISA","EARLENE","MALLORY","CARLENE","NITA","SELENA","TANISHA","KATY","JULIANNE","JOHN","LAKISHA","EDWINA","MARICELA","MARGERY","KENYA","DOLLIE","ROXIE","ROSLYN","KATHRINE","NANETTE","CHARMAINE","LAVONNE","ILENE","KRIS","TAMMI","SUZETTE","CORINE","KAYE","JERRY","MERLE","CHRYSTAL","LINA","DEANNE","LILIAN","JULIANA","ALINE","LUANN","KASEY","MARYANNE","EVANGELINE","COLETTE","MELVA","LAWANDA","YESENIA","NADIA","MADGE","KATHIE","EDDIE","OPHELIA","VALERIA","NONA","MITZI","MARI","GEORGETTE","CLAUDINE","FRAN","ALISSA","ROSEANN","LAKEISHA","SUSANNA","REVA","DEIDRE","CHASITY","SHEREE","CARLY","JAMES","ELVIA","ALYCE","DEIRDRE","GENA","BRIANA","ARACELI","KATELYN","ROSANNE","WENDI","TESSA","BERTA","MARVA","IMELDA","MARIETTA","MARCI","LEONOR","ARLINE","SASHA","MADELYN","JANNA","JULIETTE","DEENA","AURELIA","JOSEFA","AUGUSTA","LILIANA","YOUNG","CHRISTIAN","LESSIE","AMALIA","SAVANNAH","ANASTASIA","VILMA","NATALIA","ROSELLA","LYNNETTE","CORINA","ALFREDA","LEANNA","CAREY","AMPARO","COLEEN","TAMRA","AISHA","WILDA","KARYN","CHERRY","QUEEN","MAURA","MAI","EVANGELINA","ROSANNA","HALLIE","ERNA","ENID","MARIANA","LACY","JULIET","JACKLYN","FREIDA","MADELEINE","MARA","HESTER","CATHRYN","LELIA","CASANDRA","BRIDGETT","ANGELITA","JANNIE","DIONNE","ANNMARIE","KATINA","BERYL","PHOEBE","MILLICENT","KATHERYN","DIANN","CARISSA","MARYELLEN","LIZ","LAURI","HELGA","GILDA","ADRIAN","RHEA","MARQUITA","HOLLIE","TISHA","TAMERA","ANGELIQUE","FRANCESCA","BRITNEY","KAITLIN","LOLITA","FLORINE","ROWENA","REYNA","TWILA","FANNY","JANELL","INES","CONCETTA","BERTIE","ALBA","BRIGITTE","ALYSON","VONDA","PANSY","ELBA","NOELLE","LETITIA","KITTY","DEANN","BRANDIE","LOUELLA","LETA","FELECIA","SHARLENE","LESA","BEVERLEY","ROBERT","ISABELLA","HERMINIA","TERRA","CELINA","TORI","OCTAVIA","JADE","DENICE","GERMAINE","SIERRA","MICHELL","CORTNEY","NELLY","DORETHA","SYDNEY","DEIDRA","MONIKA","LASHONDA","JUDI","CHELSEY","ANTIONETTE","MARGOT","BOBBY","ADELAIDE","NAN","LEEANN","ELISHA","DESSIE","LIBBY","KATHI","GAYLA","LATANYA","MINA","MELLISA","KIMBERLEE","JASMIN","RENAE","ZELDA","ELDA","MA","JUSTINA","GUSSIE","EMILIE","CAMILLA","ABBIE","ROCIO","KAITLYN","JESSE","EDYTHE","ASHLEIGH","SELINA","LAKESHA","GERI","ALLENE","PAMALA","MICHAELA","DAYNA","CARYN","ROSALIA","SUN","JACQULINE","REBECA","MARYBETH","KRYSTLE","IOLA","DOTTIE","BENNIE","BELLE","AUBREY","GRISELDA","ERNESTINA","ELIDA","ADRIANNE","DEMETRIA","DELMA","CHONG","JAQUELINE","DESTINY","ARLEEN","VIRGINA","RETHA","FATIMA","TILLIE","ELEANORE","CARI","TREVA","BIRDIE","WILHELMINA","ROSALEE","MAURINE","LATRICE","YONG","JENA","TARYN","ELIA","DEBBY","MAUDIE","JEANNA","DELILAH","CATRINA","SHONDA","HORTENCIA","THEODORA","TERESITA","ROBBIN","DANETTE","MARYJANE","FREDDIE","DELPHINE","BRIANNE","NILDA","DANNA","CINDI","BESS","IONA","HANNA","ARIEL","WINONA","VIDA","ROSITA","MARIANNA","WILLIAM","RACHEAL","GUILLERMINA","ELOISA","CELESTINE","CAREN","MALISSA","LONA","CHANTEL","SHELLIE","MARISELA","LEORA","AGATHA","SOLEDAD","MIGDALIA","IVETTE","CHRISTEN","ATHENA","JANEL","CHLOE","VEDA","PATTIE","TESSIE","TERA","MARILYNN","LUCRETIA","KARRIE","DINAH","DANIELA","ALECIA","ADELINA","VERNICE","SHIELA","PORTIA","MERRY","LASHAWN","DEVON","DARA","TAWANA","OMA","VERDA","CHRISTIN","ALENE","ZELLA","SANDI","RAFAELA","MAYA","KIRA","CANDIDA","ALVINA","SUZAN","SHAYLA","LYN","LETTIE","ALVA","SAMATHA","ORALIA","MATILDE","MADONNA","LARISSA","VESTA","RENITA","INDIA","DELOIS","SHANDA","PHILLIS","LORRI","ERLINDA","CRUZ","CATHRINE","BARB","ZOE","ISABELL","IONE","GISELA","CHARLIE","VALENCIA","ROXANNA","MAYME","KISHA","ELLIE","MELLISSA","DORRIS","DALIA","BELLA","ANNETTA","ZOILA","RETA","REINA","LAURETTA","KYLIE","CHRISTAL","PILAR","CHARLA","ELISSA","TIFFANI","TANA","PAULINA","LEOTA","BREANNA","JAYME","CARMEL","VERNELL","TOMASA","MANDI","DOMINGA","SANTA","MELODIE","LURA","ALEXA","TAMELA","RYAN","MIRNA","KERRIE","VENUS","NOEL","FELICITA","CRISTY","CARMELITA","BERNIECE","ANNEMARIE","TIARA","ROSEANNE","MISSY","CORI","ROXANA","PRICILLA","KRISTAL","JUNG","ELYSE","HAYDEE","ALETHA","BETTINA","MARGE","GILLIAN","FILOMENA","CHARLES","ZENAIDA","HARRIETTE","CARIDAD","VADA","UNA","ARETHA","PEARLINE","MARJORY","MARCELA","FLOR","EVETTE","ELOUISE","ALINA","TRINIDAD","DAVID","DAMARIS","CATHARINE","CARROLL","BELVA","NAKIA","MARLENA","LUANNE","LORINE","KARON","DORENE","DANITA","BRENNA","TATIANA","SAMMIE","LOUANN","LOREN","JULIANNA","ANDRIA","PHILOMENA","LUCILA","LEONORA","DOVIE","ROMONA","MIMI","JACQUELIN","GAYE","TONJA","MISTI","JOE","GENE","CHASTITY","STACIA","ROXANN","MICAELA","NIKITA","MEI","VELDA","MARLYS","JOHNNA","AURA","LAVERN","IVONNE","HAYLEY","NICKI","MAJORIE","HERLINDA","GEORGE","ALPHA","YADIRA","PERLA","GREGORIA","DANIEL","ANTONETTE","SHELLI","MOZELLE","MARIAH","JOELLE","CORDELIA","JOSETTE","CHIQUITA","TRISTA","LOUIS","LAQUITA","GEORGIANA","CANDI","SHANON","LONNIE","HILDEGARD","CECIL","VALENTINA","STEPHANY","MAGDA","KAROL","GERRY","GABRIELLA","TIANA","ROMA","RICHELLE","RAY","PRINCESS","OLETA","JACQUE","IDELLA","ALAINA","SUZANNA","JOVITA","BLAIR","TOSHA","RAVEN","NEREIDA","MARLYN","KYLA","JOSEPH","DELFINA","TENA","STEPHENIE","SABINA","NATHALIE","MARCELLE","GERTIE","DARLEEN","THEA","SHARONDA","SHANTEL","BELEN","VENESSA","ROSALINA","ONA","GENOVEVA","COREY","CLEMENTINE","ROSALBA","RENATE","RENATA","MI","IVORY","GEORGIANNA","FLOY","DORCAS","ARIANA","TYRA","THEDA","MARIAM","JULI","JESICA","DONNIE","VIKKI","VERLA","ROSELYN","MELVINA","JANNETTE","GINNY","DEBRAH","CORRIE","ASIA","VIOLETA","MYRTIS","LATRICIA","COLLETTE","CHARLEEN","ANISSA","VIVIANA","TWYLA","PRECIOUS","NEDRA","LATONIA","LAN","HELLEN","FABIOLA","ANNAMARIE","ADELL","SHARYN","CHANTAL","NIKI","MAUD","LIZETTE","LINDY","KIA","KESHA","JEANA","DANELLE","CHARLINE","CHANEL","CARROL","VALORIE","LIA","DORTHA","CRISTAL","SUNNY","LEONE","LEILANI","GERRI","DEBI","ANDRA","KESHIA","IMA","EULALIA","EASTER","DULCE","NATIVIDAD","LINNIE","KAMI","GEORGIE","CATINA","BROOK","ALDA","WINNIFRED","SHARLA","RUTHANN","MEAGHAN","MAGDALENE","LISSETTE","ADELAIDA","VENITA","TRENA","SHIRLENE","SHAMEKA","ELIZEBETH","DIAN","SHANTA","MICKEY","LATOSHA","CARLOTTA","WINDY","SOON","ROSINA","MARIANN","LEISA","JONNIE","DAWNA","CATHIE","BILLY","ASTRID","SIDNEY","LAUREEN","JANEEN","HOLLI","FAWN","VICKEY","TERESSA","SHANTE","RUBYE","MARCELINA","CHANDA","CARY","TERESE","SCARLETT","MARTY","MARNIE","LULU","LISETTE","JENIFFER","ELENOR","DORINDA","DONITA","CARMAN","BERNITA","ALTAGRACIA","ALETA","ADRIANNA","ZORAIDA","RONNIE","NICOLA","LYNDSEY","KENDALL","JANINA","CHRISSY","AMI","STARLA","PHYLIS","PHUONG","KYRA","CHARISSE","BLANCH","SANJUANITA","RONA","NANCI","MARILEE","MARANDA","CORY","BRIGETTE","SANJUANA","MARITA","KASSANDRA","JOYCELYN","IRA","FELIPA","CHELSIE","BONNY","MIREYA","LORENZA","KYONG","ILEANA","CANDELARIA","TONY","TOBY","SHERIE","OK","MARK","LUCIE","LEATRICE","LAKESHIA","GERDA","EDIE","BAMBI","MARYLIN","LAVON","HORTENSE","GARNET","EVIE","TRESSA","SHAYNA","LAVINA","KYUNG","JEANETTA","SHERRILL","SHARA","PHYLISS","MITTIE","ANABEL","ALESIA","THUY","TAWANDA","RICHARD","JOANIE","TIFFANIE","LASHANDA","KARISSA","ENRIQUETA","DARIA","DANIELLA","CORINNA","ALANNA","ABBEY","ROXANE","ROSEANNA","MAGNOLIA","LIDA","KYLE","JOELLEN","ERA","CORAL","CARLEEN","TRESA","PEGGIE","NOVELLA","NILA","MAYBELLE","JENELLE","CARINA","NOVA","MELINA","MARQUERITE","MARGARETTE","JOSEPHINA","EVONNE","DEVIN","CINTHIA","ALBINA","TOYA","TAWNYA","SHERITA","SANTOS","MYRIAM","LIZABETH","LISE","KEELY","JENNI","GISELLE","CHERYLE","ARDITH","ARDIS","ALESHA","ADRIANE","SHAINA","LINNEA","KAROLYN","HONG","FLORIDA","FELISHA","DORI","DARCI","ARTIE","ARMIDA","ZOLA","XIOMARA","VERGIE","SHAMIKA","NENA","NANNETTE","MAXIE","LOVIE","JEANE","JAIMIE","INGE","FARRAH","ELAINA","CAITLYN","STARR","FELICITAS","CHERLY","CARYL","YOLONDA","YASMIN","TEENA","PRUDENCE","PENNIE","NYDIA","MACKENZIE","ORPHA","MARVEL","LIZBETH","LAURETTE","JERRIE","HERMELINDA","CAROLEE","TIERRA","MIRIAN","META","MELONY","KORI","JENNETTE","JAMILA","ENA","ANH","YOSHIKO","SUSANNAH","SALINA","RHIANNON","JOLEEN","CRISTINE","ASHTON","ARACELY","TOMEKA","SHALONDA","MARTI","LACIE","KALA","JADA","ILSE","HAILEY","BRITTANI","ZONA","SYBLE","SHERRYL","RANDY","NIDIA","MARLO","KANDICE","KANDI","DEB","DEAN","AMERICA","ALYCIA","TOMMY","RONNA","NORENE","MERCY","JOSE","INGEBORG","GIOVANNA","GEMMA","CHRISTEL","AUDRY","ZORA","VITA","VAN","TRISH","STEPHAINE","SHIRLEE","SHANIKA","MELONIE","MAZIE","JAZMIN","INGA","HOA","HETTIE","GERALYN","FONDA","ESTRELLA","ADELLA","SU","SARITA","RINA","MILISSA","MARIBETH","GOLDA","EVON","ETHELYN","ENEDINA","CHERISE","CHANA","VELVA","TAWANNA","SADE","MIRTA","LI","KARIE","JACINTA","ELNA","DAVINA","CIERRA","ASHLIE","ALBERTHA","TANESHA","STEPHANI","NELLE","MINDI","LU","LORINDA","LARUE","FLORENE","DEMETRA","DEDRA","CIARA","CHANTELLE","ASHLY","SUZY","ROSALVA","NOELIA","LYDA","LEATHA","KRYSTYNA","KRISTAN","KARRI","DARLINE","DARCIE","CINDA","CHEYENNE","CHERRIE","AWILDA","ALMEDA","ROLANDA","LANETTE","JERILYN","GISELE","EVALYN","CYNDI","CLETA","CARIN","ZINA","ZENA","VELIA","TANIKA","PAUL","CHARISSA","THOMAS","TALIA","MARGARETE","LAVONDA","KAYLEE","KATHLENE","JONNA","IRENA","ILONA","IDALIA","CANDIS","CANDANCE","BRANDEE","ANITRA","ALIDA","SIGRID","NICOLETTE","MARYJO","LINETTE","HEDWIG","CHRISTIANA","CASSIDY","ALEXIA","TRESSIE","MODESTA","LUPITA","LITA","GLADIS","EVELIA","DAVIDA","CHERRI","CECILY","ASHELY","ANNABEL","AGUSTINA","WANITA","SHIRLY","ROSAURA","HULDA","EUN","BAILEY","YETTA","VERONA","THOMASINA","SIBYL","SHANNAN","MECHELLE","LUE","LEANDRA","LANI","KYLEE","KANDY","JOLYNN","FERNE","EBONI","CORENE","ALYSIA","ZULA","NADA","MOIRA","LYNDSAY","LORRETTA","JUAN","JAMMIE","HORTENSIA","GAYNELL","CAMERON","ADRIA","VINA","VICENTA","TANGELA","STEPHINE","NORINE","NELLA","LIANA","LESLEE","KIMBERELY","ILIANA","GLORY","FELICA","EMOGENE","ELFRIEDE","EDEN","EARTHA","CARMA","BEA","OCIE","MARRY","LENNIE","KIARA","JACALYN","CARLOTA","ARIELLE","YU","STAR","OTILIA","KIRSTIN","KACEY","JOHNETTA","JOEY","JOETTA","JERALDINE","JAUNITA","ELANA","DORTHEA","CAMI","AMADA","ADELIA","VERNITA","TAMAR","SIOBHAN","RENEA","RASHIDA","OUIDA","ODELL","NILSA","MERYL","KRISTYN","JULIETA","DANICA","BREANNE","AUREA","ANGLEA","SHERRON","ODETTE","MALIA","LORELEI","LIN","LEESA","KENNA","KATHLYN","FIONA","CHARLETTE","SUZIE","SHANTELL","SABRA","RACQUEL","MYONG","MIRA","MARTINE","LUCIENNE","LAVADA","JULIANN","JOHNIE","ELVERA","DELPHIA","CLAIR","CHRISTIANE","CHAROLETTE","CARRI","AUGUSTINE","ASHA","ANGELLA","PAOLA","NINFA","LEDA","LAI","EDA","SUNSHINE","STEFANI","SHANELL","PALMA","MACHELLE","LISSA","KECIA","KATHRYNE","KARLENE","JULISSA","JETTIE","JENNIFFER","HUI","CORRINA","CHRISTOPHER","CAROLANN","ALENA","TESS","ROSARIA","MYRTICE","MARYLEE","LIANE","KENYATTA","JUDIE","JANEY","IN","ELMIRA","ELDORA","DENNA","CRISTI","CATHI","ZAIDA","VONNIE","VIVA","VERNIE","ROSALINE","MARIELA","LUCIANA","LESLI","KARAN","FELICE","DENEEN","ADINA","WYNONA","TARSHA","SHERON","SHASTA","SHANITA","SHANI","SHANDRA","RANDA","PINKIE","PARIS","NELIDA","MARILOU","LYLA","LAURENE","LACI","JOI","JANENE","DOROTHA","DANIELE","DANI","CAROLYNN","CARLYN","BERENICE","AYESHA","ANNELIESE","ALETHEA","THERSA","TAMIKO","RUFINA","OLIVA","MOZELL","MARYLYN","MADISON","KRISTIAN","KATHYRN","KASANDRA","KANDACE","JANAE","GABRIEL","DOMENICA","DEBBRA","DANNIELLE","CHUN","BUFFY","BARBIE","ARCELIA","AJA","ZENOBIA","SHAREN","SHAREE","PATRICK","PAGE","MY","LAVINIA","KUM","KACIE","JACKELINE","HUONG","FELISA","EMELIA","ELEANORA","CYTHIA","CRISTIN","CLYDE","CLARIBEL","CARON","ANASTACIA","ZULMA","ZANDRA","YOKO","TENISHA","SUSANN","SHERILYN","SHAY","SHAWANDA","SABINE","ROMANA","MATHILDA","LINSEY","KEIKO","JOANA","ISELA","GRETTA","GEORGETTA","EUGENIE","DUSTY","DESIRAE","DELORA","CORAZON","ANTONINA","ANIKA","WILLENE","TRACEE","TAMATHA","REGAN","NICHELLE","MICKIE","MAEGAN","LUANA","LANITA","KELSIE","EDELMIRA","BREE","AFTON","TEODORA","TAMIE","SHENA","MEG","LINH","KELI","KACI","DANYELLE","BRITT","ARLETTE","ALBERTINE","ADELLE","TIFFINY","STORMY","SIMONA","NUMBERS","NICOLASA","NICHOL","NIA","NAKISHA","MEE","MAIRA","LOREEN","KIZZY","JOHNNY","JAY","FALLON","CHRISTENE","BOBBYE","ANTHONY","YING","VINCENZA","TANJA","RUBIE","RONI","QUEENIE","MARGARETT","KIMBERLI","IRMGARD","IDELL","HILMA","EVELINA","ESTA","EMILEE","DENNISE","DANIA","CARL","CARIE","ANTONIO","WAI","SANG","RISA","RIKKI","PARTICIA","MUI","MASAKO","MARIO","LUVENIA","LOREE","LONI","LIEN","KEVIN","GIGI","FLORENCIA","DORIAN","DENITA","DALLAS","CHI","BILLYE","ALEXANDER","TOMIKA","SHARITA","RANA","NIKOLE","NEOMA","MARGARITE","MADALYN","LUCINA","LAILA","KALI","JENETTE","GABRIELE","EVELYNE","ELENORA","CLEMENTINA","ALEJANDRINA","ZULEMA","VIOLETTE","VANNESSA","THRESA","RETTA","PIA","PATIENCE","NOELLA","NICKIE","JONELL","DELTA","CHUNG","CHAYA","CAMELIA","BETHEL","ANYA","ANDREW","THANH","SUZANN","SPRING","SHU","MILA","LILLA","LAVERNA","KEESHA","KATTIE","GIA","GEORGENE","EVELINE","ESTELL","ELIZBETH","VIVIENNE","VALLIE","TRUDIE","STEPHANE","MICHEL","MAGALY","MADIE","KENYETTA","KARREN","JANETTA","HERMINE","HARMONY","DRUCILLA","DEBBI","CELESTINA","CANDIE","BRITNI","BECKIE","AMINA","ZITA","YUN","YOLANDE","VIVIEN","VERNETTA","TRUDI","SOMMER","PEARLE","PATRINA","OSSIE","NICOLLE","LOYCE","LETTY","LARISA","KATHARINA","JOSELYN","JONELLE","JENELL","IESHA","HEIDE","FLORINDA","FLORENTINA","FLO","ELODIA","DORINE","BRUNILDA","BRIGID","ASHLI","ARDELLA","TWANA","THU","TARAH","SUNG","SHEA","SHAVON","SHANE","SERINA","RAYNA","RAMONITA","NGA","MARGURITE","LUCRECIA","KOURTNEY","KATI","JESUS","JESENIA","DIAMOND","CRISTA","AYANA","ALICA","ALIA","VINNIE","SUELLEN","ROMELIA","RACHELL","PIPER","OLYMPIA","MICHIKO","KATHALEEN","JOLIE","JESSI","JANESSA","HANA","HA","ELEASE","CARLETTA","BRITANY","SHONA","SALOME","ROSAMOND","REGENA","RAINA","NGOC","NELIA","LOUVENIA","LESIA","LATRINA","LATICIA","LARHONDA","JINA","JACKI","HOLLIS","HOLLEY","EMMY","DEEANN","CORETTA","ARNETTA","VELVET","THALIA","SHANICE","NETA","MIKKI","MICKI","LONNA","LEANA","LASHUNDA","KILEY","JOYE","JACQULYN","IGNACIA","HYUN","HIROKO","HENRY","HENRIETTE","ELAYNE","DELINDA","DARNELL","DAHLIA","COREEN","CONSUELA","CONCHITA","CELINE","BABETTE","AYANNA","ANETTE","ALBERTINA","SKYE","SHAWNEE","SHANEKA","QUIANA","PAMELIA","MIN","MERRI","MERLENE","MARGIT","KIESHA","KIERA","KAYLENE","JODEE","JENISE","ERLENE","EMMIE","ELSE","DARYL","DALILA","DAISEY","CODY","CASIE","BELIA","BABARA","VERSIE","VANESA","SHELBA","SHAWNDA","SAM","NORMAN","NIKIA","NAOMA","MARNA","MARGERET","MADALINE","LAWANA","KINDRA","JUTTA","JAZMINE","JANETT","HANNELORE","GLENDORA","GERTRUD","GARNETT","FREEDA","FREDERICA","FLORANCE","FLAVIA","DENNIS","CARLINE","BEVERLEE","ANJANETTE","VALDA","TRINITY","TAMALA","STEVIE","SHONNA","SHA","SARINA","ONEIDA","MICAH","MERILYN","MARLEEN","LURLINE","LENNA","KATHERIN","JIN","JENI","HAE","GRACIA","GLADY","FARAH","ERIC","ENOLA","EMA","DOMINQUE","DEVONA","DELANA","CECILA","CAPRICE","ALYSHA","ALI","ALETHIA","VENA","THERESIA","TAWNY","SONG","SHAKIRA","SAMARA","SACHIKO","RACHELE","PAMELLA","NICKY","MARNI","MARIEL","MAREN","MALISA","LIGIA","LERA","LATORIA","LARAE","KIMBER","KATHERN","KAREY","JENNEFER","JANETH","HALINA","FREDIA","DELISA","DEBROAH","CIERA","CHIN","ANGELIKA","ANDREE","ALTHA","YEN","VIVAN","TERRESA","TANNA","SUK","SUDIE","SOO","SIGNE","SALENA","RONNI","REBBECCA","MYRTIE","MCKENZIE","MALIKA","MAIDA","LOAN","LEONARDA","KAYLEIGH","FRANCE","ETHYL","ELLYN","DAYLE","CAMMIE","BRITTNI","BIRGIT","AVELINA","ASUNCION","ARIANNA","AKIKO","VENICE","TYESHA","TONIE","TIESHA","TAKISHA","STEFFANIE","SINDY","SANTANA","MEGHANN","MANDA","MACIE","LADY","KELLYE","KELLEE","JOSLYN","JASON","INGER","INDIRA","GLINDA","GLENNIS","FERNANDA","FAUSTINA","ENEIDA","ELICIA","DOT","DIGNA","DELL","ARLETTA","ANDRE","WILLIA","TAMMARA","TABETHA","SHERRELL","SARI","REFUGIO","REBBECA","PAULETTA","NIEVES","NATOSHA","NAKITA","MAMMIE","KENISHA","KAZUKO","KASSIE","GARY","EARLEAN","DAPHINE","CORLISS","CLOTILDE","CAROLYNE","BERNETTA","AUGUSTINA","AUDREA","ANNIS","ANNABELL","YAN","TENNILLE","TAMICA","SELENE","SEAN","ROSANA","REGENIA","QIANA","MARKITA","MACY","LEEANNE","LAURINE","KYM","JESSENIA","JANITA","GEORGINE","GENIE","EMIKO","ELVIE","DEANDRA","DAGMAR","CORIE","COLLEN","CHERISH","ROMAINE","PORSHA","PEARLENE","MICHELINE","MERNA","MARGORIE","MARGARETTA","LORE","KENNETH","JENINE","HERMINA","FREDERICKA","ELKE","DRUSILLA","DORATHY","DIONE","DESIRE","CELENA","BRIGIDA","ANGELES","ALLEGRA","THEO","TAMEKIA","SYNTHIA","STEPHEN","SOOK","SLYVIA","ROSANN","REATHA","RAYE","MARQUETTA","MARGART","LING","LAYLA","KYMBERLY","KIANA","KAYLEEN","KATLYN","KARMEN","JOELLA","IRINA","EMELDA","ELENI","DETRA","CLEMMIE","CHERYLL","CHANTELL","CATHEY","ARNITA","ARLA","ANGLE","ANGELIC","ALYSE","ZOFIA","THOMASINE","TENNIE","SON","SHERLY","SHERLEY","SHARYL","REMEDIOS","PETRINA","NICKOLE","MYUNG","MYRLE","MOZELLA","LOUANNE","LISHA","LATIA","LANE","KRYSTA","JULIENNE","JOEL","JEANENE","JACQUALINE","ISAURA","GWENDA","EARLEEN","DONALD","CLEOPATRA","CARLIE","AUDIE","ANTONIETTA","ALISE","ALEX","VERDELL","VAL","TYLER","TOMOKO","THAO","TALISHA","STEVEN","SO","SHEMIKA","SHAUN","SCARLET","SAVANNA","SANTINA","ROSIA","RAEANN","ODILIA","NANA","MINNA","MAGAN","LYNELLE","LE","KARMA","JOEANN","IVANA","INELL","ILANA","HYE","HONEY","HEE","GUDRUN","FRANK","DREAMA","CRISSY","CHANTE","CARMELINA","ARVILLA","ARTHUR","ANNAMAE","ALVERA","ALEIDA","AARON","YEE","YANIRA","VANDA","TIANNA","TAM","STEFANIA","SHIRA","PERRY","NICOL","NANCIE","MONSERRATE","MINH","MELYNDA","MELANY","MATTHEW","LOVELLA","LAURE","KIRBY","KACY","JACQUELYNN","HYON","GERTHA","FRANCISCO","ELIANA","CHRISTENA","CHRISTEEN","CHARISE","CATERINA","CARLEY","CANDYCE","ARLENA","AMMIE","YANG","WILLETTE","VANITA","TUYET","TINY","SYREETA","SILVA","SCOTT","RONALD","PENNEY","NYLA","MICHAL","MAURICE","MARYAM","MARYA","MAGEN","LUDIE","LOMA","LIVIA","LANELL","KIMBERLIE","JULEE","DONETTA","DIEDRA","DENISHA","DEANE","DAWNE","CLARINE","CHERRYL","BRONWYN","BRANDON","ALLA","VALERY","TONDA","SUEANN","SORAYA","SHOSHANA","SHELA","SHARLEEN","SHANELLE","NERISSA","MICHEAL","MERIDITH","MELLIE","MAYE","MAPLE","MAGARET","LUIS","LILI","LEONILA","LEONIE","LEEANNA","LAVONIA","LAVERA","KRISTEL","KATHEY","KATHE","JUSTIN","JULIAN","JIMMY","JANN","ILDA","HILDRED","HILDEGARDE","GENIA","FUMIKO","EVELIN","ERMELINDA","ELLY","DUNG","DOLORIS","DIONNA","DANAE","BERNEICE","ANNICE","ALIX","VERENA","VERDIE","TRISTAN","SHAWNNA","SHAWANA","SHAUNNA","ROZELLA","RANDEE","RANAE","MILAGRO","LYNELL","LUISE","LOUIE","LOIDA","LISBETH","KARLEEN","JUNITA","JONA","ISIS","HYACINTH","HEDY","GWENN","ETHELENE","ERLINE","EDWARD","DONYA","DOMONIQUE","DELICIA","DANNETTE","CICELY","BRANDA","BLYTHE","BETHANN","ASHLYN","ANNALEE","ALLINE","YUKO","VELLA","TRANG","TOWANDA","TESHA","SHERLYN","NARCISA","MIGUELINA","MERI","MAYBELL","MARLANA","MARGUERITA","MADLYN","LUNA","LORY","LORIANN","LIBERTY","LEONORE","LEIGHANN","LAURICE","LATESHA","LARONDA","KATRICE","KASIE","KARL","KALEY","JADWIGA","GLENNIE","GEARLDINE","FRANCINA","EPIFANIA","DYAN","DORIE","DIEDRE","DENESE","DEMETRICE","DELENA","DARBY","CRISTIE","CLEORA","CATARINA","CARISA","BERNIE","BARBERA","ALMETA","TRULA","TEREASA","SOLANGE","SHEILAH","SHAVONNE","SANORA","ROCHELL","MATHILDE","MARGARETA","MAIA","LYNSEY","LAWANNA","LAUNA","KENA","KEENA","KATIA","JAMEY","GLYNDA","GAYLENE","ELVINA","ELANOR","DANUTA","DANIKA","CRISTEN","CORDIE","COLETTA","CLARITA","CARMON","BRYNN","AZUCENA","AUNDREA","ANGELE","YI","WALTER","VERLIE","VERLENE","TAMESHA","SILVANA","SEBRINA","SAMIRA","REDA","RAYLENE","PENNI","PANDORA","NORAH","NOMA","MIREILLE","MELISSIA","MARYALICE","LARAINE","KIMBERY","KARYL","KARINE","KAM","JOLANDA","JOHANA","JESUSA","JALEESA","JAE","JACQUELYNE","IRISH","ILUMINADA","HILARIA","HANH","GENNIE","FRANCIE","FLORETTA","EXIE","EDDA","DREMA","DELPHA","BEV","BARBAR","ASSUNTA","ARDELL","ANNALISA","ALISIA","YUKIKO","YOLANDO","WONDA","WEI","WALTRAUD","VETA","TEQUILA","TEMEKA","TAMEIKA","SHIRLEEN","SHENITA","PIEDAD","OZELLA","MIRTHA","MARILU","KIMIKO","JULIANE","JENICE","JEN","JANAY","JACQUILINE","HILDE","FE","FAE","EVAN","EUGENE","ELOIS","ECHO","DEVORAH","CHAU","BRINDA","BETSEY","ARMINDA","ARACELIS","APRYL","ANNETT","ALISHIA","VEOLA","USHA","TOSHIKO","THEOLA","TASHIA","TALITHA","SHERY","RUDY","RENETTA","REIKO","RASHEEDA","OMEGA","OBDULIA","MIKA","MELAINE","MEGGAN","MARTIN","MARLEN","MARGET","MARCELINE","MANA","MAGDALEN","LIBRADA","LEZLIE","LEXIE","LATASHIA","LASANDRA","KELLE","ISIDRA","ISA","INOCENCIA","GWYN","FRANCOISE","ERMINIA","ERINN","DIMPLE","DEVORA","CRISELDA","ARMANDA","ARIE","ARIANE","ANGELO","ANGELENA","ALLEN","ALIZA","ADRIENE","ADALINE","XOCHITL","TWANNA","TRAN","TOMIKO","TAMISHA","TAISHA","SUSY","SIU","RUTHA","ROXY","RHONA","RAYMOND","OTHA","NORIKO","NATASHIA","MERRIE","MELVIN","MARINDA","MARIKO","MARGERT","LORIS","LIZZETTE","LEISHA","KAILA","KA","JOANNIE","JERRICA","JENE","JANNET","JANEE","JACINDA","HERTA","ELENORE","DORETTA","DELAINE","DANIELL","CLAUDIE","CHINA","BRITTA","APOLONIA","AMBERLY","ALEASE","YURI","YUK","WEN","WANETA","UTE","TOMI","SHARRI","SANDIE","ROSELLE","REYNALDA","RAGUEL","PHYLICIA","PATRIA","OLIMPIA","ODELIA","MITZIE","MITCHELL","MISS","MINDA","MIGNON","MICA","MENDY","MARIVEL","MAILE","LYNETTA","LAVETTE","LAURYN","LATRISHA","LAKIESHA","KIERSTEN","KARY","JOSPHINE","JOLYN","JETTA","JANISE","JACQUIE","IVELISSE","GLYNIS","GIANNA","GAYNELLE","EMERALD","DEMETRIUS","DANYELL","DANILLE","DACIA","CORALEE","CHER","CEOLA","BRETT","BELL","ARIANNE","ALESHIA","YUNG","WILLIEMAE","TROY","TRINH","THORA","TAI","SVETLANA","SHERIKA","SHEMEKA","SHAUNDA","ROSELINE","RICKI","MELDA","MALLIE","LAVONNA","LATINA","LARRY","LAQUANDA","LALA","LACHELLE","KLARA","KANDIS","JOHNA","JEANMARIE","JAYE","HANG","GRAYCE","GERTUDE","EMERITA","EBONIE","CLORINDA","CHING","CHERY","CAROLA","BREANN","BLOSSOM","BERNARDINE","BECKI","ARLETHA","ARGELIA","ARA","ALITA","YULANDA","YON","YESSENIA","TOBI","TASIA","SYLVIE","SHIRL","SHIRELY","SHERIDAN","SHELLA","SHANTELLE","SACHA","ROYCE","REBECKA","REAGAN","PROVIDENCIA","PAULENE","MISHA","MIKI","MARLINE","MARICA","LORITA","LATOYIA","LASONYA","KERSTIN","KENDA","KEITHA","KATHRIN","JAYMIE","JACK","GRICELDA","GINETTE","ERYN","ELINA","ELFRIEDA","DANYEL","CHEREE","CHANELLE","BARRIE","AVERY","AURORE","ANNAMARIA","ALLEEN","AILENE","AIDE","YASMINE","VASHTI","VALENTINE","TREASA","TORY","TIFFANEY","SHERYLL","SHARIE","SHANAE","SAU","RAISA","PA","NEDA","MITSUKO","MIRELLA","MILDA","MARYANNA","MARAGRET","MABELLE","LUETTA","LORINA","LETISHA","LATARSHA","LANELLE","LAJUANA","KRISSY","KARLY","KARENA","JON","JESSIKA","JERICA","JEANELLE","JANUARY","JALISA","JACELYN","IZOLA","IVEY","GREGORY","EUNA","ETHA","DREW","DOMITILA","DOMINICA","DAINA","CREOLA","CARLI","CAMIE","BUNNY","BRITTNY","ASHANTI","ANISHA","ALEEN","ADAH","YASUKO","WINTER","VIKI","VALRIE","TONA","TINISHA","THI","TERISA","TATUM","TANEKA","SIMONNE","SHALANDA","SERITA","RESSIE","REFUGIA","PAZ","OLENE","NA","MERRILL","MARGHERITA","MANDIE","MAN","MAIRE","LYNDIA","LUCI","LORRIANE","LORETA","LEONIA","LAVONA","LASHAWNDA","LAKIA","KYOKO","KRYSTINA","KRYSTEN","KENIA","KELSI","JUDE","JEANICE","ISOBEL","GEORGIANN","GENNY","FELICIDAD","EILENE","DEON","DELOISE","DEEDEE","DANNIE","CONCEPTION","CLORA","CHERILYN","CHANG","CALANDRA","BERRY","ARMANDINA","ANISA","ULA","TIMOTHY","TIERA","THERESSA","STEPHANIA","SIMA","SHYLA","SHONTA","SHERA","SHAQUITA","SHALA","SAMMY","ROSSANA","NOHEMI","NERY","MORIAH","MELITA","MELIDA","MELANI","MARYLYNN","MARISHA","MARIETTE","MALORIE","MADELENE","LUDIVINA","LORIA","LORETTE","LORALEE","LIANNE","LEON","LAVENIA","LAURINDA","LASHON","KIT","KIMI","KEILA","KATELYNN","KAI","JONE","JOANE","JI","JAYNA","JANELLA","JA","HUE","HERTHA","FRANCENE","ELINORE","DESPINA","DELSIE","DEEDRA","CLEMENCIA","CARRY","CAROLIN","CARLOS","BULAH","BRITTANIE","BOK","BLONDELL","BIBI","BEAULAH","BEATA","ANNITA","AGRIPINA","VIRGEN","VALENE","UN","TWANDA","TOMMYE","TOI","TARRA","TARI","TAMMERA","SHAKIA","SADYE","RUTHANNE","ROCHEL","RIVKA","PURA","NENITA","NATISHA","MING","MERRILEE","MELODEE","MARVIS","LUCILLA","LEENA","LAVETA","LARITA","LANIE","KEREN","ILEEN","GEORGEANN","GENNA","GENESIS","FRIDA","EWA","EUFEMIA","EMELY","ELA","EDYTH","DEONNA","DEADRA","DARLENA","CHANELL","CHAN","CATHERN","CASSONDRA","CASSAUNDRA","BERNARDA","BERNA","ARLINDA","ANAMARIA","ALBERT","WESLEY","VERTIE","VALERI","TORRI","TATYANA","STASIA","SHERISE","SHERILL","SEASON","SCOTTIE","SANDA","RUTHE","ROSY","ROBERTO","ROBBI","RANEE","QUYEN","PEARLY","PALMIRA","ONITA","NISHA","NIESHA","NIDA","NEVADA","NAM","MERLYN","MAYOLA","MARYLOUISE","MARYLAND","MARX","MARTH","MARGENE","MADELAINE","LONDA","LEONTINE","LEOMA","LEIA","LAWRENCE","LAURALEE","LANORA","LAKITA","KIYOKO","KETURAH","KATELIN","KAREEN","JONIE","JOHNETTE","JENEE","JEANETT","IZETTA","HIEDI","HEIKE","HASSIE","HAROLD","GIUSEPPINA","GEORGANN","FIDELA","FERNANDE","ELWANDA","ELLAMAE","ELIZ","DUSTI","DOTTY","CYNDY","CORALIE","CELESTA","ARGENTINA","ALVERTA","XENIA","WAVA","VANETTA","TORRIE","TASHINA","TANDY","TAMBRA","TAMA","STEPANIE","SHILA","SHAUNTA","SHARAN","SHANIQUA","SHAE","SETSUKO","SERAFINA","SANDEE","ROSAMARIA","PRISCILA","OLINDA","NADENE","MUOI","MICHELINA","MERCEDEZ","MARYROSE","MARIN","MARCENE","MAO","MAGALI","MAFALDA","LOGAN","LINN","LANNIE","KAYCE","KAROLINE","KAMILAH","KAMALA","JUSTA","JOLINE","JENNINE","JACQUETTA","IRAIDA","GERALD","GEORGEANNA","FRANCHESCA","FAIRY","EMELINE","ELANE","EHTEL","EARLIE","DULCIE","DALENE","CRIS","CLASSIE","CHERE","CHARIS","CAROYLN","CARMINA","CARITA","BRIAN","BETHANIE","AYAKO","ARICA","AN","ALYSA","ALESSANDRA","AKILAH","ADRIEN","ZETTA","YOULANDA","YELENA","YAHAIRA","XUAN","WENDOLYN","VICTOR","TIJUANA","TERRELL","TERINA","TERESIA","SUZI","SUNDAY","SHERELL","SHAVONDA","SHAUNTE","SHARDA","SHAKITA","SENA","RYANN","RUBI","RIVA","REGINIA","REA","RACHAL","PARTHENIA","PAMULA","MONNIE","MONET","MICHAELE","MELIA","MARINE","MALKA","MAISHA","LISANDRA","LEO","LEKISHA","LEAN","LAURENCE","LAKENDRA","KRYSTIN","KORTNEY","KIZZIE","KITTIE","KERA","KENDAL","KEMBERLY","KANISHA","JULENE","JULE","JOSHUA","JOHANNE","JEFFREY","JAMEE","HAN","HALLEY","GIDGET","GALINA","FREDRICKA","FLETA","FATIMAH","EUSEBIA","ELZA","ELEONORE","DORTHEY","DORIA","DONELLA","DINORAH","DELORSE","CLARETHA","CHRISTINIA","CHARLYN","BONG","BELKIS","AZZIE","ANDERA","AIKO","ADENA","YER","YAJAIRA","WAN","VANIA","ULRIKE","TOSHIA","TIFANY","STEFANY","SHIZUE","SHENIKA","SHAWANNA","SHAROLYN","SHARILYN","SHAQUANA","SHANTAY","SEE","ROZANNE","ROSELEE","RICKIE","REMONA","REANNA","RAELENE","QUINN","PHUNG","PETRONILA","NATACHA","NANCEY","MYRL","MIYOKO","MIESHA","MERIDETH","MARVELLA","MARQUITTA","MARHTA","MARCHELLE","LIZETH","LIBBIE","LAHOMA","LADAWN","KINA","KATHELEEN","KATHARYN","KARISA","KALEIGH","JUNIE","JULIEANN","JOHNSIE","JANEAN","JAIMEE","JACKQUELINE","HISAKO","HERMA","HELAINE","GWYNETH","GLENN","GITA","EUSTOLIA","EMELINA","ELIN","EDRIS","DONNETTE","DONNETTA","DIERDRE","DENAE","DARCEL","CLAUDE","CLARISA","CINDERELLA","CHIA","CHARLESETTA","CHARITA","CELSA","CASSY","CASSI","CARLEE","BRUNA","BRITTANEY","BRANDE","BILLI","BAO","ANTONETTA","ANGLA","ANGELYN","ANALISA","ALANE","WENONA","WENDIE","VERONIQUE","VANNESA","TOBIE","TEMPIE","SUMIKO","SULEMA","SPARKLE","SOMER","SHEBA","SHAYNE","SHARICE","SHANEL","SHALON","SAGE","ROY","ROSIO","ROSELIA","RENAY","REMA","REENA","PORSCHE","PING","PEG","OZIE","ORETHA","ORALEE","ODA","NU","NGAN","NAKESHA","MILLY","MARYBELLE","MARLIN","MARIS","MARGRETT","MARAGARET","MANIE","LURLENE","LILLIA","LIESELOTTE","LAVELLE","LASHAUNDA","LAKEESHA","KEITH","KAYCEE","KALYN","JOYA","JOETTE","JENAE","JANIECE","ILLA","GRISEL","GLAYDS","GENEVIE","GALA","FREDDA","FRED","ELMER","ELEONOR","DEBERA","DEANDREA","DAN","CORRINNE","CORDIA","CONTESSA","COLENE","CLEOTILDE","CHARLOTT","CHANTAY","CECILLE","BEATRIS","AZALEE","ARLEAN","ARDATH","ANJELICA","ANJA","ALFREDIA","ALEISHA","ADAM","ZADA","YUONNE","XIAO","WILLODEAN","WHITLEY","VENNIE","VANNA","TYISHA","TOVA","TORIE","TONISHA","TILDA","TIEN","TEMPLE","SIRENA","SHERRIL","SHANTI","SHAN","SENAIDA","SAMELLA","ROBBYN","RENDA","REITA","PHEBE","PAULITA","NOBUKO","NGUYET","NEOMI","MOON","MIKAELA","MELANIA","MAXIMINA","MARG","MAISIE","LYNNA","LILLI","LAYNE","LASHAUN","LAKENYA","LAEL","KIRSTIE","KATHLINE","KASHA","KARLYN","KARIMA","JOVAN","JOSEFINE","JENNELL","JACQUI","JACKELYN","HYO","HIEN","GRAZYNA","FLORRIE","FLORIA","ELEONORA","DWANA","DORLA","DONG","DELMY","DEJA","DEDE","DANN","CRYSTA","CLELIA","CLARIS","CLARENCE","CHIEKO","CHERLYN","CHERELLE","CHARMAIN","CHARA","CAMMY","BEE","ARNETTE","ARDELLE","ANNIKA","AMIEE","AMEE","ALLENA","YVONE","YUKI","YOSHIE","YEVETTE","YAEL","WILLETTA","VONCILE","VENETTA","TULA","TONETTE","TIMIKA","TEMIKA","TELMA","TEISHA","TAREN","TA","STACEE","SHIN","SHAWNTA","SATURNINA","RICARDA","POK","PASTY","ONIE","NUBIA","MORA","MIKE","MARIELLE","MARIELLA","MARIANELA","MARDELL","MANY","LUANNA","LOISE","LISABETH","LINDSY","LILLIANA","LILLIAM","LELAH","LEIGHA","LEANORA","LANG","KRISTEEN","KHALILAH","KEELEY","KANDRA","JUNKO","JOAQUINA","JERLENE","JANI","JAMIKA","JAME","HSIU","HERMILA","GOLDEN","GENEVIVE","EVIA","EUGENA","EMMALINE","ELFREDA","ELENE","DONETTE","DELCIE","DEEANNA","DARCEY","CUC","CLARINDA","CIRA","CHAE","CELINDA","CATHERYN","CATHERIN","CASIMIRA","CARMELIA","CAMELLIA","BREANA","BOBETTE","BERNARDINA","BEBE","BASILIA","ARLYNE","AMAL","ALAYNA","ZONIA","ZENIA","YURIKO","YAEKO","WYNELL","WILLOW","WILLENA","VERNIA","TU","TRAVIS","TORA","TERRILYN","TERICA","TENESHA","TAWNA","TAJUANA","TAINA","STEPHNIE","SONA","SOL","SINA","SHONDRA","SHIZUKO","SHERLENE","SHERICE","SHARIKA","ROSSIE","ROSENA","RORY","RIMA","RIA","RHEBA","RENNA","PETER","NATALYA","NANCEE","MELODI","MEDA","MAXIMA","MATHA","MARKETTA","MARICRUZ","MARCELENE","MALVINA","LUBA","LOUETTA","LEIDA","LECIA","LAURAN","LASHAWNA","LAINE","KHADIJAH","KATERINE","KASI","KALLIE","JULIETTA","JESUSITA","JESTINE","JESSIA","JEREMY","JEFFIE","JANYCE","ISADORA","GEORGIANNE","FIDELIA","EVITA","EURA","EULAH","ESTEFANA","ELSY","ELIZABET","ELADIA","DODIE","DION","DIA","DENISSE","DELORAS","DELILA","DAYSI","DAKOTA","CURTIS","CRYSTLE","CONCHA","COLBY","CLARETTA","CHU","CHRISTIA","CHARLSIE","CHARLENA","CARYLON","BETTYANN","ASLEY","ASHLEA","AMIRA","AI","AGUEDA","AGNUS","YUETTE","VINITA","VICTORINA","TYNISHA","TREENA","TOCCARA","TISH","THOMASENA","TEGAN","SOILA","SHILOH","SHENNA","SHARMAINE","SHANTAE","SHANDI","SEPTEMBER","SARAN","SARAI","SANA","SAMUEL","SALLEY","ROSETTE","ROLANDE","REGINE","OTELIA","OSCAR","OLEVIA","NICHOLLE","NECOLE","NAIDA","MYRTA","MYESHA","MITSUE","MINTA","MERTIE","MARGY","MAHALIA","MADALENE","LOVE","LOURA","LOREAN","LEWIS","LESHA","LEONIDA","LENITA","LAVONE","LASHELL","LASHANDRA","LAMONICA","KIMBRA","KATHERINA","KARRY","KANESHA","JULIO","JONG","JENEVA","JAQUELYN","HWA","GILMA","GHISLAINE","GERTRUDIS","FRANSISCA","FERMINA","ETTIE","ETSUKO","ELLIS","ELLAN","ELIDIA","EDRA","DORETHEA","DOREATHA","DENYSE","DENNY","DEETTA","DAINE","CYRSTAL","CORRIN","CAYLA","CARLITA","CAMILA","BURMA","BULA","BUENA","BLAKE","BARABARA","AVRIL","AUSTIN","ALAINE","ZANA","WILHEMINA","WANETTA","VIRGIL","VI","VERONIKA","VERNON","VERLINE","VASILIKI","TONITA","TISA","TEOFILA","TAYNA","TAUNYA","TANDRA","TAKAKO","SUNNI","SUANNE","SIXTA","SHARELL","SEEMA","RUSSELL","ROSENDA","ROBENA","RAYMONDE","PEI","PAMILA","OZELL","NEIDA","NEELY","MISTIE","MICHA","MERISSA","MAURITA","MARYLN","MARYETTA","MARSHALL","MARCELL","MALENA","MAKEDA","MADDIE","LOVETTA","LOURIE","LORRINE","LORILEE","LESTER","LAURENA","LASHAY","LARRAINE","LAREE","LACRESHA","KRISTLE","KRISHNA","KEVA","KEIRA","KAROLE","JOIE","JINNY","JEANNETTA","JAMA","HEIDY","GILBERTE","GEMA","FAVIOLA","EVELYNN","ENDA","ELLI","ELLENA","DIVINA","DAGNY","COLLENE","CODI","CINDIE","CHASSIDY","CHASIDY","CATRICE","CATHERINA","CASSEY","CAROLL","CARLENA","CANDRA","CALISTA","BRYANNA","BRITTENY","BEULA","BARI","AUDRIE","AUDRIA","ARDELIA","ANNELLE","ANGILA","ALONA","ALLYN","DOUGLAS","ROGER","JONATHAN","RALPH","NICHOLAS","BENJAMIN","BRUCE","HARRY","WAYNE","STEVE","HOWARD","ERNEST","PHILLIP","TODD","CRAIG","ALAN","PHILIP","EARL","DANNY","BRYAN","STANLEY","LEONARD","NATHAN","MANUEL","RODNEY","MARVIN","VINCENT","JEFFERY","JEFF","CHAD","JACOB","ALFRED","BRADLEY","HERBERT","FREDERICK","EDWIN","DON","RICKY","RANDALL","BARRY","BERNARD","LEROY","MARCUS","THEODORE","CLIFFORD","MIGUEL","JIM","TOM","CALVIN","BILL","LLOYD","DEREK","WARREN","DARRELL","JEROME","FLOYD","ALVIN","TIM","GORDON","GREG","JORGE","DUSTIN","PEDRO","DERRICK","ZACHARY","HERMAN","GLEN","HECTOR","RICARDO","RICK","BRENT","RAMON","GILBERT","MARC","REGINALD","RUBEN","NATHANIEL","RAFAEL","EDGAR","MILTON","RAUL","BEN","CHESTER","DUANE","FRANKLIN","BRAD","RON","ROLAND","ARNOLD","HARVEY","JARED","ERIK","DARRYL","NEIL","JAVIER","FERNANDO","CLINTON","TED","MATHEW","TYRONE","DARREN","LANCE","KURT","ALLAN","NELSON","GUY","CLAYTON","HUGH","MAX","DWAYNE","DWIGHT","ARMANDO","FELIX","EVERETT","IAN","WALLACE","KEN","BOB","ALFREDO","ALBERTO","DAVE","IVAN","BYRON","ISAAC","MORRIS","CLIFTON","WILLARD","ROSS","ANDY","SALVADOR","KIRK","SERGIO","SETH","KENT","TERRANCE","EDUARDO","TERRENCE","ENRIQUE","WADE","STUART","FREDRICK","ARTURO","ALEJANDRO","NICK","LUTHER","WENDELL","JEREMIAH","JULIUS","OTIS","TREVOR","OLIVER","LUKE","HOMER","GERARD","DOUG","KENNY","HUBERT","LYLE","MATT","ALFONSO","ORLANDO","REX","CARLTON","ERNESTO","NEAL","PABLO","LORENZO","OMAR","WILBUR","GRANT","HORACE","RODERICK","ABRAHAM","WILLIS","RICKEY","ANDRES","CESAR","JOHNATHAN","MALCOLM","RUDOLPH","DAMON","KELVIN","PRESTON","ALTON","ARCHIE","MARCO","WM","PETE","RANDOLPH","GARRY","GEOFFREY","JONATHON","FELIPE","GERARDO","ED","DOMINIC","DELBERT","COLIN","GUILLERMO","EARNEST","LUCAS","BENNY","SPENCER","RODOLFO","MYRON","EDMUND","GARRETT","SALVATORE","CEDRIC","LOWELL","GREGG","SHERMAN","WILSON","SYLVESTER","ROOSEVELT","ISRAEL","JERMAINE","FORREST","WILBERT","LELAND","SIMON","CLARK","IRVING","BRYANT","OWEN","RUFUS","WOODROW","KRISTOPHER","MACK","LEVI","MARCOS","GUSTAVO","JAKE","LIONEL","GILBERTO","CLINT","NICOLAS","ISMAEL","ORVILLE","ERVIN","DEWEY","AL","WILFRED","JOSH","HUGO","IGNACIO","CALEB","TOMAS","SHELDON","ERICK","STEWART","DOYLE","DARREL","ROGELIO","TERENCE","SANTIAGO","ALONZO","ELIAS","BERT","ELBERT","RAMIRO","CONRAD","NOAH","GRADY","PHIL","CORNELIUS","LAMAR","ROLANDO","CLAY","PERCY","DEXTER","BRADFORD","DARIN","AMOS","MOSES","IRVIN","SAUL","ROMAN","RANDAL","TIMMY","DARRIN","WINSTON","BRENDAN","ABEL","DOMINICK","BOYD","EMILIO","ELIJAH","DOMINGO","EMMETT","MARLON","EMANUEL","JERALD","EDMOND","EMIL","DEWAYNE","WILL","OTTO","TEDDY","REYNALDO","BRET","JESS","TRENT","HUMBERTO","EMMANUEL","STEPHAN","VICENTE","LAMONT","GARLAND","MILES","EFRAIN","HEATH","RODGER","HARLEY","ETHAN","ELDON","ROCKY","PIERRE","JUNIOR","FREDDY","ELI","BRYCE","ANTOINE","STERLING","CHASE","GROVER","ELTON","CLEVELAND","DYLAN","CHUCK","DAMIAN","REUBEN","STAN","AUGUST","LEONARDO","JASPER","RUSSEL","ERWIN","BENITO","HANS","MONTE","BLAINE","ERNIE","CURT","QUENTIN","AGUSTIN","MURRAY","JAMAL","ADOLFO","HARRISON","TYSON","BURTON","BRADY","ELLIOTT","WILFREDO","BART","JARROD","VANCE","DENIS","DAMIEN","JOAQUIN","HARLAN","DESMOND","ELLIOT","DARWIN","GREGORIO","BUDDY","XAVIER","KERMIT","ROSCOE","ESTEBAN","ANTON","SOLOMON","SCOTTY","NORBERT","ELVIN","WILLIAMS","NOLAN","ROD","QUINTON","HAL","BRAIN","ROB","ELWOOD","KENDRICK","DARIUS","MOISES","FIDEL","THADDEUS","CLIFF","MARCEL","JACKSON","RAPHAEL","BRYON","ARMAND","ALVARO","JEFFRY","DANE","JOESPH","THURMAN","NED","RUSTY","MONTY","FABIAN","REGGIE","MASON","GRAHAM","ISAIAH","VAUGHN","GUS","LOYD","DIEGO","ADOLPH","NORRIS","MILLARD","ROCCO","GONZALO","DERICK","RODRIGO","WILEY","RIGOBERTO","ALPHONSO","TY","NOE","VERN","REED","JEFFERSON","ELVIS","BERNARDO","MAURICIO","HIRAM","DONOVAN","BASIL","RILEY","NICKOLAS","MAYNARD","SCOT","VINCE","QUINCY","EDDY","SEBASTIAN","FEDERICO","ULYSSES","HERIBERTO","DONNELL","COLE","DAVIS","GAVIN","EMERY","WARD","ROMEO","JAYSON","DANTE","CLEMENT","COY","MAXWELL","JARVIS","BRUNO","ISSAC","DUDLEY","BROCK","SANFORD","CARMELO","BARNEY","NESTOR","STEFAN","DONNY","ART","LINWOOD","BEAU","WELDON","GALEN","ISIDRO","TRUMAN","DELMAR","JOHNATHON","SILAS","FREDERIC","DICK","IRWIN","MERLIN","CHARLEY","MARCELINO","HARRIS","CARLO","TRENTON","KURTIS","HUNTER","AURELIO","WINFRED","VITO","COLLIN","DENVER","CARTER","LEONEL","EMORY","PASQUALE","MOHAMMAD","MARIANO","DANIAL","LANDON","DIRK","BRANDEN","ADAN","BUFORD","GERMAN","WILMER","EMERSON","ZACHERY","FLETCHER","JACQUES","ERROL","DALTON","MONROE","JOSUE","EDWARDO","BOOKER","WILFORD","SONNY","SHELTON","CARSON","THERON","RAYMUNDO","DAREN","HOUSTON","ROBBY","LINCOLN","GENARO","BENNETT","OCTAVIO","CORNELL","HUNG","ARRON","ANTONY","HERSCHEL","GIOVANNI","GARTH","CYRUS","CYRIL","RONNY","LON","FREEMAN","DUNCAN","KENNITH","CARMINE","ERICH","CHADWICK","WILBURN","RUSS","REID","MYLES","ANDERSON","MORTON","JONAS","FOREST","MITCHEL","MERVIN","ZANE","RICH","JAMEL","LAZARO","ALPHONSE","RANDELL","MAJOR","JARRETT","BROOKS","ABDUL","LUCIANO","SEYMOUR","EUGENIO","MOHAMMED","VALENTIN","CHANCE","ARNULFO","LUCIEN","FERDINAND","THAD","EZRA","ALDO","RUBIN","ROYAL","MITCH","EARLE","ABE","WYATT","MARQUIS","LANNY","KAREEM","JAMAR","BORIS","ISIAH","EMILE","ELMO","ARON","LEOPOLDO","EVERETTE","JOSEF","ELOY","RODRICK","REINALDO","LUCIO","JERROD","WESTON","HERSHEL","BARTON","PARKER","LEMUEL","BURT","JULES","GIL","ELISEO","AHMAD","NIGEL","EFREN","ANTWAN","ALDEN","MARGARITO","COLEMAN","DINO","OSVALDO","LES","DEANDRE","NORMAND","KIETH","TREY","NORBERTO","NAPOLEON","JEROLD","FRITZ","ROSENDO","MILFORD","CHRISTOPER","ALFONZO","LYMAN","JOSIAH","BRANT","WILTON","RICO","JAMAAL","DEWITT","BRENTON","OLIN","FOSTER","FAUSTINO","CLAUDIO","JUDSON","GINO","EDGARDO","ALEC","TANNER","JARRED","DONN","TAD","PRINCE","PORFIRIO","ODIS","LENARD","CHAUNCEY","TOD","MEL","MARCELO","KORY","AUGUSTUS","KEVEN","HILARIO","BUD","SAL","ORVAL","MAURO","ZACHARIAH","OLEN","ANIBAL","MILO","JED","DILLON","AMADO","NEWTON","LENNY","RICHIE","HORACIO","BRICE","MOHAMED","DELMER","DARIO","REYES","MAC","JONAH","JERROLD","ROBT","HANK","RUPERT","ROLLAND","KENTON","DAMION","ANTONE","WALDO","FREDRIC","BRADLY","KIP","BURL","WALKER","TYREE","JEFFEREY","AHMED","WILLY","STANFORD","OREN","NOBLE","MOSHE","MIKEL","ENOCH","BRENDON","QUINTIN","JAMISON","FLORENCIO","DARRICK","TOBIAS","HASSAN","GIUSEPPE","DEMARCUS","CLETUS","TYRELL","LYNDON","KEENAN","WERNER","GERALDO","COLUMBUS","CHET","BERTRAM","MARKUS","HUEY","HILTON","DWAIN","DONTE","TYRON","OMER","ISAIAS","HIPOLITO","FERMIN","ADALBERTO","BO","BARRETT","TEODORO","MCKINLEY","MAXIMO","GARFIELD","RALEIGH","LAWERENCE","ABRAM","RASHAD","KING","EMMITT","DARON","SAMUAL","MIQUEL","EUSEBIO","DOMENIC","DARRON","BUSTER","WILBER","RENATO","JC","HOYT","HAYWOOD","EZEKIEL","CHAS","FLORENTINO","ELROY","CLEMENTE","ARDEN","NEVILLE","EDISON","DESHAWN","NATHANIAL","JORDON","DANILO","CLAUD","SHERWOOD","RAYMON","RAYFORD","CRISTOBAL","AMBROSE","TITUS","HYMAN","FELTON","EZEQUIEL","ERASMO","STANTON","LONNY","LEN","IKE","MILAN","LINO","JAROD","HERB","ANDREAS","WALTON","RHETT","PALMER","DOUGLASS","CORDELL","OSWALDO","ELLSWORTH","VIRGILIO","TONEY","NATHANAEL","DEL","BENEDICT","MOSE","JOHNSON","ISREAL","GARRET","FAUSTO","ASA","ARLEN","ZACK","WARNER","MODESTO","FRANCESCO","MANUAL","GAYLORD","GASTON","FILIBERTO","DEANGELO","MICHALE","GRANVILLE","WES","MALIK","ZACKARY","TUAN","ELDRIDGE","CRISTOPHER","CORTEZ","ANTIONE","MALCOM","LONG","KOREY","JOSPEH","COLTON","WAYLON","VON","HOSEA","SHAD","SANTO","RUDOLF","ROLF","REY","RENALDO","MARCELLUS","LUCIUS","KRISTOFER","BOYCE","BENTON","HAYDEN","HARLAND","ARNOLDO","RUEBEN","LEANDRO","KRAIG","JERRELL","JEROMY","HOBERT","CEDRICK","ARLIE","WINFORD","WALLY","LUIGI","KENETH","JACINTO","GRAIG","FRANKLYN","EDMUNDO","SID","PORTER","LEIF","JERAMY","BUCK","WILLIAN","VINCENZO","SHON","LYNWOOD","JERE","HAI","ELDEN","DORSEY","DARELL","BRODERICK","ALONSO" \ No newline at end of file diff --git a/euler22.rb b/euler22.rb new file mode 100644 index 0000000..23f7cc3 --- /dev/null +++ b/euler22.rb @@ -0,0 +1,23 @@ +require 'logger' +$log = Logger.new(STDERR) +$log.level = Logger::WARN + +def value_of_char(char) + char.ord - "A".ord + 1 +end + +def value_of_word(word) + word.scan(/./).map{|c| value_of_char c}.reduce(:+) +end + +if __FILE__==$0 + total = 0 + $names = File.read('euler22-names.txt').strip.slice(1..-2).split('","').sort + $names.each_index do |i| + total += (i + 1) * value_of_word($names[i]) + end + + puts total +end + +$log.close \ No newline at end of file diff --git a/euler23.rb b/euler23.rb new file mode 100644 index 0000000..9eaf8cb --- /dev/null +++ b/euler23.rb @@ -0,0 +1,24 @@ +load 'divisors.rb' + +require 'logger' +$log = Logger.new(STDERR) +$log.level = Logger::WARN + +abundant_numbers = (12..28124).select {|i| i.abundant?} + +candidates = Array.new(28124) {|i| i} +candidates[0] = nil + +abundant_numbers.each_index do |i| + j = abundant_numbers.length - 1 + while j >= i + candidates[abundant_numbers[i] + abundant_numbers[j]] = nil + $log.info {"Eliminating #{abundant_numbers[i] + abundant_numbers[j]} as the sum of #{abundant_numbers[i]} and #{abundant_numbers[j]} (i=#{i}, j=#{j})" } + j -= 1 + end +end + +# p candidates.compact +p candidates.compact.reduce(:+) + +$log.close \ No newline at end of file diff --git a/euler24.rb b/euler24.rb new file mode 100644 index 0000000..0621de5 --- /dev/null +++ b/euler24.rb @@ -0,0 +1,54 @@ +require 'logger' +$log = Logger.new(STDERR) +$log.level = Logger::WARN + + +class Integer + def to_factorial_radix + return [0] if self == 0 + remainder = self + result = [] + radix = 1 + while remainder > 0 + result << (remainder % radix) + remainder = remainder.div radix + radix += 1 + end + result.reverse + end +end + +class Array + def factorial_radix_to_i(current_radix = 0) + $log.info { "Calling factorial_radix_to_i with string #{self} and current_radix = #{current_radix}" } + return 0 if self.empty? + return 0 if self == [0] + value_of_rest = self[0..-2].factorial_radix_to_i(current_radix + 1) + $log.info { "Value of remainder = #{value_of_rest}" } + $log.info { "Returning #{self[-1] + value_of_rest}" } + self[-1] + (current_radix + 1) * value_of_rest + end + + def prepad_with_zeros(length) + [0] * [length - self.length, 0].max + self + end + + def permutation_from_factorial_radix_number(n) + $log.info { "Permuting #{self} with frn #{n}" } + return [] if n.empty? + return self if self.empty? + items_copy = self.dup + permutation = [items_copy.delete_at(n[0])] + permutation += items_copy.permutation_from_factorial_radix_number(n[1..-1]) + end + + def nth_permutation(n) + permutation_from_factorial_radix_number(n.to_factorial_radix.prepad_with_zeros(self.length)) + end +end + +if __FILE__==$0 + puts (Array.new(10) {|i| i}).nth_permutation(10 ** 6 - 1).join('') +end + +$log.close \ No newline at end of file diff --git a/euler25.rb b/euler25.rb new file mode 100644 index 0000000..9fa8b30 --- /dev/null +++ b/euler25.rb @@ -0,0 +1,9 @@ +load 'fibonacci.rb' + +i = 100 +while i.fibonacci.to_s.length < 1000 + i += 1 +end + +puts "The #{i}th Fibonacci term has #{i.fibonacci.to_s.length} digits" +puts "The previous, #{i-1}th Fibonacci term has #{(i-1).fibonacci.to_s.length} digits" diff --git a/euler26.ipynb b/euler26.ipynb new file mode 100644 index 0000000..0b25dd6 --- /dev/null +++ b/euler26.ipynb @@ -0,0 +1,368 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "true" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "require \"awesome_print\"" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + ":division" + ] + }, + "execution_count": 91, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def division(n, debug: false)\n", + " dividend = 10\n", + " divisor = n\n", + " quotient = \"0.\"\n", + " trail = []\n", + " while dividend != 0 && !(trail.include?(dividend))\n", + " q, r = dividend.divmod(divisor)\n", + " puts(\"#{dividend} #{divisor} #{q} #{r} #{!(trail.include?(dividend))} #{trail}\") if debug\n", + " if q == 0\n", + " dividend *= 10\n", + " quotient += \"0\"\n", + " trail += [0]\n", + " else\n", + " trail += [dividend]\n", + " quotient += q.to_s\n", + " dividend = r * 10\n", + " end\n", + " end\n", + " if dividend != 0\n", + " cycle_length = trail.length - trail.rindex(dividend)\n", + " else\n", + " cycle_length = 0\n", + " end\n", + " # return quotient, cycle_length, trail + [dividend]\n", + " cycle_length\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[0, 1]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "q, r = 1.divmod(8)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[1, 2]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "q, r = 10.divmod(8)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[2, 4]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "q, r = 20.divmod(8)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[5, 0]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "q, r = 40.divmod(8)" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "division(8)" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "6" + ] + }, + "execution_count": 93, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "division(7)" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 94, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "division(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2: 0\n", + "3: 1\n", + "4: 0\n", + "5: 0\n", + "6: 1\n", + "7: 6\n", + "8: 0\n", + "9: 1\n", + "10: 0\n", + "11: 2\n", + "12: 1\n", + "13: 6\n", + "14: 6\n", + "15: 1\n", + "16: 0\n", + "17: 16\n", + "18: 1\n", + "19: 18\n", + "20: 0\n", + "21: 6\n", + "22: 2\n", + "23: 22\n", + "24: 1\n", + "25: 0\n", + "26: 6\n", + "27: 3\n", + "28: 6\n", + "29: 28\n", + "30: 1\n", + "31: 15\n", + "32: 0\n", + "33: 2\n", + "34: 16\n", + "35: 6\n", + "36: 1\n", + "37: 3\n", + "38: 18\n", + "39: 6\n", + "40: 0\n", + "41: 5\n", + "42: 6\n", + "43: 21\n", + "44: 2\n", + "45: 1\n", + "46: 22\n" + ] + }, + { + "data": { + "text/plain": [ + "2..46" + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(2..46).each do |i| puts(\"#{i}: #{division(i)}\") end" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "983" + ] + }, + "execution_count": 99, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(1..1000).max_by {|i| division(i)}" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 97, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "division(1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Ruby 2.4.0", + "language": "ruby", + "name": "ruby" + }, + "language_info": { + "file_extension": ".rb", + "mimetype": "application/x-ruby", + "name": "ruby", + "version": "2.4.0" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/euler27.ipynb b/euler27.ipynb new file mode 100644 index 0000000..06084a8 --- /dev/null +++ b/euler27.ipynb @@ -0,0 +1,613 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "true" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "require \"awesome_print\"\n", + "load 'primes.rb'" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "#" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "primes = Primes.instance;" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "false" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "primes.include? 10008" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331, 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177, 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297, 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999, 5003, 5009, 5011, 5021, 5023, 5039, 5051, 5059, 5077, 5081, 5087, 5099, 5101, 5107, 5113, 5119, 5147, 5153, 5167, 5171, 5179, 5189, 5197, 5209, 5227, 5231, 5233, 5237, 5261, 5273, 5279, 5281, 5297, 5303, 5309, 5323, 5333, 5347, 5351, 5381, 5387, 5393, 5399, 5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443, 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507, 5519, 5521, 5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591, 5623, 5639, 5641, 5647, 5651, 5653, 5657, 5659, 5669, 5683, 5689, 5693, 5701, 5711, 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791, 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849, 5851, 5857, 5861, 5867, 5869, 5879, 5881, 5897, 5903, 5923, 5927, 5939, 5953, 5981, 5987, 6007, 6011, 6029, 6037, 6043, 6047, 6053, 6067, 6073, 6079, 6089, 6091, 6101, 6113, 6121, 6131, 6133, 6143, 6151, 6163, 6173, 6197, 6199, 6203, 6211, 6217, 6221, 6229, 6247, 6257, 6263, 6269, 6271, 6277, 6287, 6299, 6301, 6311, 6317, 6323, 6329, 6337, 6343, 6353, 6359, 6361, 6367, 6373, 6379, 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473, 6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563, 6569, 6571, 6577, 6581, 6599, 6607, 6619, 6637, 6653, 6659, 6661, 6673, 6679, 6689, 6691, 6701, 6703, 6709, 6719, 6733, 6737, 6761, 6763, 6779, 6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833, 6841, 6857, 6863, 6869, 6871, 6883, 6899, 6907, 6911, 6917, 6947, 6949, 6959, 6961, 6967, 6971, 6977, 6983, 6991, 6997, 7001, 7013, 7019, 7027, 7039, 7043, 7057, 7069, 7079, 7103, 7109, 7121, 7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207, 7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253, 7283, 7297, 7307, 7309, 7321, 7331, 7333, 7349, 7351, 7369, 7393, 7411, 7417, 7433, 7451, 7457, 7459, 7477, 7481, 7487, 7489, 7499, 7507, 7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561, 7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, 7639, 7643, 7649, 7669, 7673, 7681, 7687, 7691, 7699, 7703, 7717, 7723, 7727, 7741, 7753, 7757, 7759, 7789, 7793, 7817, 7823, 7829, 7841, 7853, 7867, 7873, 7877, 7879, 7883, 7901, 7907, 7919, 7927, 7933, 7937, 7949, 7951, 7963, 7993, 8009, 8011, 8017, 8039, 8053, 8059, 8069, 8081, 8087, 8089, 8093, 8101, 8111, 8117, 8123, 8147, 8161, 8167, 8171, 8179, 8191, 8209, 8219, 8221, 8231, 8233, 8237, 8243, 8263, 8269, 8273, 8287, 8291, 8293, 8297, 8311, 8317, 8329, 8353, 8363, 8369, 8377, 8387, 8389, 8419, 8423, 8429, 8431, 8443, 8447, 8461, 8467, 8501, 8513, 8521, 8527, 8537, 8539, 8543, 8563, 8573, 8581, 8597, 8599, 8609, 8623, 8627, 8629, 8641, 8647, 8663, 8669, 8677, 8681, 8689, 8693, 8699, 8707, 8713, 8719, 8731, 8737, 8741, 8747, 8753, 8761, 8779, 8783, 8803, 8807, 8819, 8821, 8831, 8837, 8839, 8849, 8861, 8863, 8867, 8887, 8893, 8923, 8929, 8933, 8941, 8951, 8963, 8969, 8971, 8999, 9001, 9007, 9011, 9013, 9029, 9041, 9043, 9049, 9059, 9067, 9091, 9103, 9109, 9127, 9133, 9137, 9151, 9157, 9161, 9173, 9181, 9187, 9199, 9203, 9209, 9221, 9227, 9239, 9241, 9257, 9277, 9281, 9283, 9293, 9311, 9319, 9323, 9337, 9341, 9343, 9349, 9371, 9377, 9391, 9397, 9403, 9413, 9419, 9421, 9431, 9433, 9437, 9439, 9461, 9463, 9467, 9473, 9479, 9491, 9497, 9511, 9521, 9533, 9539, 9547, 9551, 9587, 9601, 9613, 9619, 9623, 9629, 9631, 9643, 9649, 9661, 9677, 9679, 9689, 9697, 9719, 9721, 9733, 9739, 9743, 9749, 9767, 9769, 9781, 9787, 9791, 9803, 9811, 9817, 9829, 9833, 9839, 9851, 9857, 9859, 9871, 9883, 9887, 9901, 9907, 9923, 9929, 9931, 9941, 9949, 9967, 9973, 10007, 10009]" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "primes.primes" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0: 41\n", + "1: 43\n", + "2: 47\n", + "3: 53\n", + "4: 61\n", + "5: 71\n", + "6: 83\n", + "7: 97\n", + "8: 113\n", + "9: 131\n", + "10: 151\n", + "11: 173\n", + "12: 197\n", + "13: 223\n", + "14: 251\n", + "15: 281\n", + "16: 313\n", + "17: 347\n", + "18: 383\n", + "19: 421\n", + "20: 461\n", + "21: 503\n", + "22: 547\n", + "23: 593\n", + "24: 641\n", + "25: 691\n", + "26: 743\n", + "27: 797\n", + "28: 853\n", + "29: 911\n", + "30: 971\n", + "31: 1033\n", + "32: 1097\n", + "33: 1163\n", + "34: 1231\n", + "35: 1301\n", + "36: 1373\n", + "37: 1447\n", + "38: 1523\n", + "39: 1601\n", + "40: 1681\n", + "41: 1763\n" + ] + }, + { + "data": { + "text/plain": [ + "42" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "42.times do |i|\n", + " puts(\"#{i}: #{i**2 + i + 41}\")\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0: 1601\n", + "1: 1523\n", + "2: 1447\n", + "3: 1373\n", + "4: 1301\n", + "5: 1231\n", + "6: 1163\n", + "7: 1097\n", + "8: 1033\n", + "9: 971\n", + "10: 911\n", + "11: 853\n", + "12: 797\n", + "13: 743\n", + "14: 691\n", + "15: 641\n", + "16: 593\n", + "17: 547\n", + "18: 503\n", + "19: 461\n", + "20: 421\n", + "21: 383\n", + "22: 347\n", + "23: 313\n", + "24: 281\n", + "25: 251\n", + "26: 223\n", + "27: 197\n", + "28: 173\n", + "29: 151\n", + "30: 131\n", + "31: 113\n", + "32: 97\n", + "33: 83\n", + "34: 71\n", + "35: 61\n", + "36: 53\n", + "37: 47\n", + "38: 43\n", + "39: 41\n", + "40: 41\n", + "41: 43\n", + "42: 47\n", + "43: 53\n", + "44: 61\n", + "45: 71\n", + "46: 83\n", + "47: 97\n", + "48: 113\n", + "49: 131\n", + "50: 151\n", + "51: 173\n", + "52: 197\n", + "53: 223\n", + "54: 251\n", + "55: 281\n", + "56: 313\n", + "57: 347\n", + "58: 383\n", + "59: 421\n", + "60: 461\n", + "61: 503\n", + "62: 547\n", + "63: 593\n", + "64: 641\n", + "65: 691\n", + "66: 743\n", + "67: 797\n", + "68: 853\n", + "69: 911\n", + "70: 971\n", + "71: 1033\n", + "72: 1097\n", + "73: 1163\n", + "74: 1231\n", + "75: 1301\n", + "76: 1373\n", + "77: 1447\n", + "78: 1523\n", + "79: 1601\n", + "80: 1681\n", + "81: 1763\n" + ] + }, + { + "data": { + "text/plain": [ + "82" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "82.times do |i|\n", + " puts(\"#{i}: #{i**2 - 79* i + 1601}\")\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-9\n", + "-8\n", + "-7\n", + "-6\n", + "-5\n", + "-4\n", + "-3\n", + "-2\n", + "-1\n", + "0\n", + "1\n", + "2\n", + "3\n", + "4\n", + "5\n", + "6\n", + "7\n", + "8\n", + "9\n" + ] + }, + { + "data": { + "text/plain": [ + "-9..9" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(-9..9).each {|i| puts(i)}" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + ":count_primes" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def count_primes(primes, a, b)\n", + " n = 0\n", + " y = b\n", + " count = 0\n", + " while primes.include? y\n", + " count += 1\n", + " n += 1\n", + " y = n ** 2 + a * n + b\n", + " end\n", + " count \n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "40" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "count_primes(primes, 1, 41)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "80" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "count_primes(primes, -79, 1601)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[[-50, 0], [-50, 1], [-50, 2], [-50, 3], [-50, 4], [-50, 5], [-50, 6], [-50, 7], [-50, 8], [-50, 9], [-50, 10], [-50, 11], [-50, 12], [-50, 13], [-50, 14], [-50, 15], [-50, 16], [-50, 17], [-50, 18], [-50, 19], [-50, 20], [-50, 21], [-50, 22], [-50, 23], [-50, 24], [-50, 25], [-50, 26], [-50, 27], [-50, 28], [-50, 29], [-50, 30], [-50, 31], [-50, 32], [-50, 33], [-50, 34], [-50, 35], [-50, 36], [-50, 37], [-50, 38], [-50, 39], [-50, 40], [-50, 41], [-50, 42], [-50, 43], [-50, 44], [-50, 45], [-50, 46], [-50, 47], [-50, 48], [-50, 49], [-50, 50], [-49, 0], [-49, 1], [-49, 2], [-49, 3], [-49, 4], [-49, 5], [-49, 6], [-49, 7], [-49, 8], [-49, 9], [-49, 10], [-49, 11], [-49, 12], [-49, 13], [-49, 14], [-49, 15], [-49, 16], [-49, 17], [-49, 18], [-49, 19], [-49, 20], [-49, 21], [-49, 22], [-49, 23], [-49, 24], [-49, 25], [-49, 26], [-49, 27], [-49, 28], [-49, 29], [-49, 30], [-49, 31], [-49, 32], [-49, 33], [-49, 34], [-49, 35], [-49, 36], [-49, 37], [-49, 38], [-49, 39], [-49, 40], [-49, 41], [-49, 42], [-49, 43], [-49, 44], [-49, 45], [-49, 46], [-49, 47], [-49, 48], [-49, 49], [-49, 50], [-48, 0], [-48, 1], [-48, 2], [-48, 3], [-48, 4], [-48, 5], [-48, 6], [-48, 7], [-48, 8], [-48, 9], [-48, 10], [-48, 11], [-48, 12], [-48, 13], [-48, 14], [-48, 15], [-48, 16], [-48, 17], [-48, 18], [-48, 19], [-48, 20], [-48, 21], [-48, 22], [-48, 23], [-48, 24], [-48, 25], [-48, 26], [-48, 27], [-48, 28], [-48, 29], [-48, 30], [-48, 31], [-48, 32], [-48, 33], [-48, 34], [-48, 35], [-48, 36], [-48, 37], [-48, 38], [-48, 39], [-48, 40], [-48, 41], [-48, 42], [-48, 43], [-48, 44], [-48, 45], [-48, 46], [-48, 47], [-48, 48], [-48, 49], [-48, 50], [-47, 0], [-47, 1], [-47, 2], [-47, 3], [-47, 4], [-47, 5], [-47, 6], [-47, 7], [-47, 8], [-47, 9], [-47, 10], [-47, 11], [-47, 12], [-47, 13], [-47, 14], [-47, 15], [-47, 16], [-47, 17], [-47, 18], [-47, 19], [-47, 20], [-47, 21], [-47, 22], [-47, 23], [-47, 24], [-47, 25], [-47, 26], [-47, 27], [-47, 28], [-47, 29], [-47, 30], [-47, 31], [-47, 32], [-47, 33], [-47, 34], [-47, 35], [-47, 36], [-47, 37], [-47, 38], [-47, 39], [-47, 40], [-47, 41], [-47, 42], [-47, 43], [-47, 44], [-47, 45], [-47, 46], [-47, 47], [-47, 48], [-47, 49], [-47, 50], [-46, 0], [-46, 1], [-46, 2], [-46, 3], [-46, 4], [-46, 5], [-46, 6], [-46, 7], [-46, 8], [-46, 9], [-46, 10], [-46, 11], [-46, 12], [-46, 13], [-46, 14], [-46, 15], [-46, 16], [-46, 17], [-46, 18], [-46, 19], [-46, 20], [-46, 21], [-46, 22], [-46, 23], [-46, 24], [-46, 25], [-46, 26], [-46, 27], [-46, 28], [-46, 29], [-46, 30], [-46, 31], [-46, 32], [-46, 33], [-46, 34], [-46, 35], [-46, 36], [-46, 37], [-46, 38], [-46, 39], [-46, 40], [-46, 41], [-46, 42], [-46, 43], [-46, 44], [-46, 45], [-46, 46], [-46, 47], [-46, 48], [-46, 49], [-46, 50], [-45, 0], [-45, 1], [-45, 2], [-45, 3], [-45, 4], [-45, 5], [-45, 6], [-45, 7], [-45, 8], [-45, 9], [-45, 10], [-45, 11], [-45, 12], [-45, 13], [-45, 14], [-45, 15], [-45, 16], [-45, 17], [-45, 18], [-45, 19], [-45, 20], [-45, 21], [-45, 22], [-45, 23], [-45, 24], [-45, 25], [-45, 26], [-45, 27], [-45, 28], [-45, 29], [-45, 30], [-45, 31], [-45, 32], [-45, 33], [-45, 34], [-45, 35], [-45, 36], [-45, 37], [-45, 38], [-45, 39], [-45, 40], [-45, 41], [-45, 42], [-45, 43], [-45, 44], [-45, 45], [-45, 46], [-45, 47], [-45, 48], [-45, 49], [-45, 50], [-44, 0], [-44, 1], [-44, 2], [-44, 3], [-44, 4], [-44, 5], [-44, 6], [-44, 7], [-44, 8], [-44, 9], [-44, 10], [-44, 11], [-44, 12], [-44, 13], [-44, 14], [-44, 15], [-44, 16], [-44, 17], [-44, 18], [-44, 19], [-44, 20], [-44, 21], [-44, 22], [-44, 23], [-44, 24], [-44, 25], [-44, 26], [-44, 27], [-44, 28], [-44, 29], [-44, 30], [-44, 31], [-44, 32], [-44, 33], [-44, 34], [-44, 35], [-44, 36], [-44, 37], [-44, 38], [-44, 39], [-44, 40], [-44, 41], [-44, 42], [-44, 43], [-44, 44], [-44, 45], [-44, 46], [-44, 47], [-44, 48], [-44, 49], [-44, 50], [-43, 0], [-43, 1], [-43, 2], [-43, 3], [-43, 4], [-43, 5], [-43, 6], [-43, 7], [-43, 8], [-43, 9], [-43, 10], [-43, 11], [-43, 12], [-43, 13], [-43, 14], [-43, 15], [-43, 16], [-43, 17], [-43, 18], [-43, 19], [-43, 20], [-43, 21], [-43, 22], [-43, 23], [-43, 24], [-43, 25], [-43, 26], [-43, 27], [-43, 28], [-43, 29], [-43, 30], [-43, 31], [-43, 32], [-43, 33], [-43, 34], [-43, 35], [-43, 36], [-43, 37], [-43, 38], [-43, 39], [-43, 40], [-43, 41], [-43, 42], [-43, 43], [-43, 44], [-43, 45], [-43, 46], [-43, 47], [-43, 48], [-43, 49], [-43, 50], [-42, 0], [-42, 1], [-42, 2], [-42, 3], [-42, 4], [-42, 5], [-42, 6], [-42, 7], [-42, 8], [-42, 9], [-42, 10], [-42, 11], [-42, 12], [-42, 13], [-42, 14], [-42, 15], [-42, 16], [-42, 17], [-42, 18], [-42, 19], [-42, 20], [-42, 21], [-42, 22], [-42, 23], [-42, 24], [-42, 25], [-42, 26], [-42, 27], [-42, 28], [-42, 29], [-42, 30], [-42, 31], [-42, 32], [-42, 33], [-42, 34], [-42, 35], [-42, 36], [-42, 37], [-42, 38], [-42, 39], [-42, 40], [-42, 41], [-42, 42], [-42, 43], [-42, 44], [-42, 45], [-42, 46], [-42, 47], [-42, 48], [-42, 49], [-42, 50], [-41, 0], [-41, 1], [-41, 2], [-41, 3], [-41, 4], [-41, 5], [-41, 6], [-41, 7], [-41, 8], [-41, 9], [-41, 10], [-41, 11], [-41, 12], [-41, 13], [-41, 14], [-41, 15], [-41, 16], [-41, 17], [-41, 18], [-41, 19], [-41, 20], [-41, 21], [-41, 22], [-41, 23], [-41, 24], [-41, 25], [-41, 26], [-41, 27], [-41, 28], [-41, 29], [-41, 30], [-41, 31], [-41, 32], [-41, 33], [-41, 34], [-41, 35], [-41, 36], [-41, 37], [-41, 38], [-41, 39], [-41, 40], [-41, 41], [-41, 42], [-41, 43], [-41, 44], [-41, 45], [-41, 46], [-41, 47], [-41, 48], [-41, 49], [-41, 50], [-40, 0], [-40, 1], [-40, 2], [-40, 3], [-40, 4], [-40, 5], [-40, 6], [-40, 7], [-40, 8], [-40, 9], [-40, 10], [-40, 11], [-40, 12], [-40, 13], [-40, 14], [-40, 15], [-40, 16], [-40, 17], [-40, 18], [-40, 19], [-40, 20], [-40, 21], [-40, 22], [-40, 23], [-40, 24], [-40, 25], [-40, 26], [-40, 27], [-40, 28], [-40, 29], [-40, 30], [-40, 31], [-40, 32], [-40, 33], [-40, 34], [-40, 35], [-40, 36], [-40, 37], [-40, 38], [-40, 39], [-40, 40], [-40, 41], [-40, 42], [-40, 43], [-40, 44], [-40, 45], [-40, 46], [-40, 47], [-40, 48], [-40, 49], [-40, 50], [-39, 0], [-39, 1], [-39, 2], [-39, 3], [-39, 4], [-39, 5], [-39, 6], [-39, 7], [-39, 8], [-39, 9], [-39, 10], [-39, 11], [-39, 12], [-39, 13], [-39, 14], [-39, 15], [-39, 16], [-39, 17], [-39, 18], [-39, 19], [-39, 20], [-39, 21], [-39, 22], [-39, 23], [-39, 24], [-39, 25], [-39, 26], [-39, 27], [-39, 28], [-39, 29], [-39, 30], [-39, 31], [-39, 32], [-39, 33], [-39, 34], [-39, 35], [-39, 36], [-39, 37], [-39, 38], [-39, 39], [-39, 40], [-39, 41], [-39, 42], [-39, 43], [-39, 44], [-39, 45], [-39, 46], [-39, 47], [-39, 48], [-39, 49], [-39, 50], [-38, 0], [-38, 1], [-38, 2], [-38, 3], [-38, 4], [-38, 5], [-38, 6], [-38, 7], [-38, 8], [-38, 9], [-38, 10], [-38, 11], [-38, 12], [-38, 13], [-38, 14], [-38, 15], [-38, 16], [-38, 17], [-38, 18], [-38, 19], [-38, 20], [-38, 21], [-38, 22], [-38, 23], [-38, 24], [-38, 25], [-38, 26], [-38, 27], [-38, 28], [-38, 29], [-38, 30], [-38, 31], [-38, 32], [-38, 33], [-38, 34], [-38, 35], [-38, 36], [-38, 37], [-38, 38], [-38, 39], [-38, 40], [-38, 41], [-38, 42], [-38, 43], [-38, 44], [-38, 45], [-38, 46], [-38, 47], [-38, 48], [-38, 49], [-38, 50], [-37, 0], [-37, 1], [-37, 2], [-37, 3], [-37, 4], [-37, 5], [-37, 6], [-37, 7], [-37, 8], [-37, 9], [-37, 10], [-37, 11], [-37, 12], [-37, 13], [-37, 14], [-37, 15], [-37, 16], [-37, 17], [-37, 18], [-37, 19], [-37, 20], [-37, 21], [-37, 22], [-37, 23], [-37, 24], [-37, 25], [-37, 26], [-37, 27], [-37, 28], [-37, 29], [-37, 30], [-37, 31], [-37, 32], [-37, 33], [-37, 34], [-37, 35], [-37, 36], [-37, 37], [-37, 38], [-37, 39], [-37, 40], [-37, 41], [-37, 42], [-37, 43], [-37, 44], [-37, 45], [-37, 46], [-37, 47], [-37, 48], [-37, 49], [-37, 50], [-36, 0], [-36, 1], [-36, 2], [-36, 3], [-36, 4], [-36, 5], [-36, 6], [-36, 7], [-36, 8], [-36, 9], [-36, 10], [-36, 11], [-36, 12], [-36, 13], [-36, 14], [-36, 15], [-36, 16], [-36, 17], [-36, 18], [-36, 19], [-36, 20], [-36, 21], [-36, 22], [-36, 23], [-36, 24], [-36, 25], [-36, 26], [-36, 27], [-36, 28], [-36, 29], [-36, 30], [-36, 31], [-36, 32], [-36, 33], [-36, 34], [-36, 35], [-36, 36], [-36, 37], [-36, 38], [-36, 39], [-36, 40], [-36, 41], [-36, 42], [-36, 43], [-36, 44], [-36, 45], [-36, 46], [-36, 47], [-36, 48], [-36, 49], [-36, 50], [-35, 0], [-35, 1], [-35, 2], [-35, 3], [-35, 4], [-35, 5], [-35, 6], [-35, 7], [-35, 8], [-35, 9], [-35, 10], [-35, 11], [-35, 12], [-35, 13], [-35, 14], [-35, 15], [-35, 16], [-35, 17], [-35, 18], [-35, 19], [-35, 20], [-35, 21], [-35, 22], [-35, 23], [-35, 24], [-35, 25], [-35, 26], [-35, 27], [-35, 28], [-35, 29], [-35, 30], [-35, 31], [-35, 32], [-35, 33], [-35, 34], [-35, 35], [-35, 36], [-35, 37], [-35, 38], [-35, 39], [-35, 40], [-35, 41], [-35, 42], [-35, 43], [-35, 44], [-35, 45], [-35, 46], [-35, 47], [-35, 48], [-35, 49], [-35, 50], [-34, 0], [-34, 1], [-34, 2], [-34, 3], [-34, 4], [-34, 5], [-34, 6], [-34, 7], [-34, 8], [-34, 9], [-34, 10], [-34, 11], [-34, 12], [-34, 13], [-34, 14], [-34, 15], [-34, 16], [-34, 17], [-34, 18], [-34, 19], [-34, 20], [-34, 21], [-34, 22], [-34, 23], [-34, 24], [-34, 25], [-34, 26], [-34, 27], [-34, 28], [-34, 29], [-34, 30], [-34, 31], [-34, 32], [-34, 33], [-34, 34], [-34, 35], [-34, 36], [-34, 37], [-34, 38], [-34, 39], [-34, 40], [-34, 41], [-34, 42], [-34, 43], [-34, 44], [-34, 45], [-34, 46], [-34, 47], [-34, 48], [-34, 49], [-34, 50], [-33, 0], [-33, 1], [-33, 2], [-33, 3], [-33, 4], [-33, 5], [-33, 6], [-33, 7], [-33, 8], [-33, 9], [-33, 10], [-33, 11], [-33, 12], [-33, 13], [-33, 14], [-33, 15], [-33, 16], [-33, 17], [-33, 18], [-33, 19], [-33, 20], [-33, 21], [-33, 22], [-33, 23], [-33, 24], [-33, 25], [-33, 26], [-33, 27], [-33, 28], [-33, 29], [-33, 30], [-33, 31], [-33, 32], [-33, 33], [-33, 34], [-33, 35], [-33, 36], [-33, 37], [-33, 38], [-33, 39], [-33, 40], [-33, 41], [-33, 42], [-33, 43], [-33, 44], [-33, 45], [-33, 46], [-33, 47], [-33, 48], [-33, 49], [-33, 50], [-32, 0], [-32, 1], [-32, 2], [-32, 3], [-32, 4], [-32, 5], [-32, 6], [-32, 7], [-32, 8], [-32, 9], [-32, 10], [-32, 11], [-32, 12], [-32, 13], [-32, 14], [-32, 15], [-32, 16], [-32, 17], [-32, 18], [-32, 19], [-32, 20], [-32, 21], [-32, 22], [-32, 23], [-32, 24], [-32, 25], [-32, 26], [-32, 27], [-32, 28], [-32, 29], [-32, 30], [-32, 31], [-32, 32], [-32, 33], [-32, 34], [-32, 35], [-32, 36], [-32, 37], [-32, 38], [-32, 39], [-32, 40], [-32, 41], [-32, 42], [-32, 43], [-32, 44], [-32, 45], [-32, 46], [-32, 47], [-32, 48], [-32, 49], [-32, 50], [-31, 0], [-31, 1], [-31, 2], [-31, 3], [-31, 4], [-31, 5], [-31, 6], [-31, 7], [-31, 8], [-31, 9], [-31, 10], [-31, 11], [-31, 12], [-31, 13], [-31, 14], [-31, 15], [-31, 16], [-31, 17], [-31, 18], [-31, 19], [-31, 20], [-31, 21], [-31, 22], [-31, 23], [-31, 24], [-31, 25], [-31, 26], [-31, 27], [-31, 28], [-31, 29], [-31, 30], [-31, 31], [-31, 32], [-31, 33], [-31, 34], [-31, 35], [-31, 36], [-31, 37], [-31, 38], [-31, 39], [-31, 40], [-31, 41], [-31, 42], [-31, 43], [-31, 44], [-31, 45], [-31, 46], [-31, 47], [-31, 48], [-31, 49], [-31, 50], [-30, 0], [-30, 1], [-30, 2], [-30, 3], [-30, 4], [-30, 5], [-30, 6], [-30, 7], [-30, 8], [-30, 9], [-30, 10], [-30, 11], [-30, 12], [-30, 13], [-30, 14], [-30, 15], [-30, 16], [-30, 17], [-30, 18], [-30, 19], [-30, 20], [-30, 21], [-30, 22], [-30, 23], [-30, 24], [-30, 25], [-30, 26], [-30, 27], [-30, 28], [-30, 29], [-30, 30], [-30, 31], [-30, 32], [-30, 33], [-30, 34], [-30, 35], [-30, 36], [-30, 37], [-30, 38], [-30, 39], [-30, 40], [-30, 41], [-30, 42], [-30, 43], [-30, 44], [-30, 45], [-30, 46], [-30, 47], [-30, 48], [-30, 49], [-30, 50], [-29, 0], [-29, 1], [-29, 2], [-29, 3], [-29, 4], [-29, 5], [-29, 6], [-29, 7], [-29, 8], [-29, 9], [-29, 10], [-29, 11], [-29, 12], [-29, 13], [-29, 14], [-29, 15], [-29, 16], [-29, 17], [-29, 18], [-29, 19], [-29, 20], [-29, 21], [-29, 22], [-29, 23], [-29, 24], [-29, 25], [-29, 26], [-29, 27], [-29, 28], [-29, 29], [-29, 30], [-29, 31], [-29, 32], [-29, 33], [-29, 34], [-29, 35], [-29, 36], [-29, 37], [-29, 38], [-29, 39], [-29, 40], [-29, 41], [-29, 42], [-29, 43], [-29, 44], [-29, 45], [-29, 46], [-29, 47], [-29, 48], [-29, 49], [-29, 50], [-28, 0], [-28, 1], [-28, 2], [-28, 3], [-28, 4], [-28, 5], [-28, 6], [-28, 7], [-28, 8], [-28, 9], [-28, 10], [-28, 11], [-28, 12], [-28, 13], [-28, 14], [-28, 15], [-28, 16], [-28, 17], [-28, 18], [-28, 19], [-28, 20], [-28, 21], [-28, 22], [-28, 23], [-28, 24], [-28, 25], [-28, 26], [-28, 27], [-28, 28], [-28, 29], [-28, 30], [-28, 31], [-28, 32], [-28, 33], [-28, 34], [-28, 35], [-28, 36], [-28, 37], [-28, 38], [-28, 39], [-28, 40], [-28, 41], [-28, 42], [-28, 43], [-28, 44], [-28, 45], [-28, 46], [-28, 47], [-28, 48], [-28, 49], [-28, 50], [-27, 0], [-27, 1], [-27, 2], [-27, 3], [-27, 4], [-27, 5], [-27, 6], [-27, 7], [-27, 8], [-27, 9], [-27, 10], [-27, 11], [-27, 12], [-27, 13], [-27, 14], [-27, 15], [-27, 16], [-27, 17], [-27, 18], [-27, 19], [-27, 20], [-27, 21], [-27, 22], [-27, 23], [-27, 24], [-27, 25], [-27, 26], [-27, 27], [-27, 28], [-27, 29], [-27, 30], [-27, 31], [-27, 32], [-27, 33], [-27, 34], [-27, 35], [-27, 36], [-27, 37], [-27, 38], [-27, 39], [-27, 40], [-27, 41], [-27, 42], [-27, 43], [-27, 44], [-27, 45], [-27, 46], [-27, 47], [-27, 48], [-27, 49], [-27, 50], [-26, 0], [-26, 1], [-26, 2], [-26, 3], [-26, 4], [-26, 5], [-26, 6], [-26, 7], [-26, 8], [-26, 9], [-26, 10], [-26, 11], [-26, 12], [-26, 13], [-26, 14], [-26, 15], [-26, 16], [-26, 17], [-26, 18], [-26, 19], [-26, 20], [-26, 21], [-26, 22], [-26, 23], [-26, 24], [-26, 25], [-26, 26], [-26, 27], [-26, 28], [-26, 29], [-26, 30], [-26, 31], [-26, 32], [-26, 33], [-26, 34], [-26, 35], [-26, 36], [-26, 37], [-26, 38], [-26, 39], [-26, 40], [-26, 41], [-26, 42], [-26, 43], [-26, 44], [-26, 45], [-26, 46], [-26, 47], [-26, 48], [-26, 49], [-26, 50], [-25, 0], [-25, 1], [-25, 2], [-25, 3], [-25, 4], [-25, 5], [-25, 6], [-25, 7], [-25, 8], [-25, 9], [-25, 10], [-25, 11], [-25, 12], [-25, 13], [-25, 14], [-25, 15], [-25, 16], [-25, 17], [-25, 18], [-25, 19], [-25, 20], [-25, 21], [-25, 22], [-25, 23], [-25, 24], [-25, 25], [-25, 26], [-25, 27], [-25, 28], [-25, 29], [-25, 30], [-25, 31], [-25, 32], [-25, 33], [-25, 34], [-25, 35], [-25, 36], [-25, 37], [-25, 38], [-25, 39], [-25, 40], [-25, 41], [-25, 42], [-25, 43], [-25, 44], [-25, 45], [-25, 46], [-25, 47], [-25, 48], [-25, 49], [-25, 50], [-24, 0], [-24, 1], [-24, 2], [-24, 3], [-24, 4], [-24, 5], [-24, 6], [-24, 7], [-24, 8], [-24, 9], [-24, 10], [-24, 11], [-24, 12], [-24, 13], [-24, 14], [-24, 15], [-24, 16], [-24, 17], [-24, 18], [-24, 19], [-24, 20], [-24, 21], [-24, 22], [-24, 23], [-24, 24], [-24, 25], [-24, 26], [-24, 27], [-24, 28], [-24, 29], [-24, 30], [-24, 31], [-24, 32], [-24, 33], [-24, 34], [-24, 35], [-24, 36], [-24, 37], [-24, 38], [-24, 39], [-24, 40], [-24, 41], [-24, 42], [-24, 43], [-24, 44], [-24, 45], [-24, 46], [-24, 47], [-24, 48], [-24, 49], [-24, 50], [-23, 0], [-23, 1], [-23, 2], [-23, 3], [-23, 4], [-23, 5], [-23, 6], [-23, 7], [-23, 8], [-23, 9], [-23, 10], [-23, 11], [-23, 12], [-23, 13], [-23, 14], [-23, 15], [-23, 16], [-23, 17], [-23, 18], [-23, 19], [-23, 20], [-23, 21], [-23, 22], [-23, 23], [-23, 24], [-23, 25], [-23, 26], [-23, 27], [-23, 28], [-23, 29], [-23, 30], [-23, 31], [-23, 32], [-23, 33], [-23, 34], [-23, 35], [-23, 36], [-23, 37], [-23, 38], [-23, 39], [-23, 40], [-23, 41], [-23, 42], [-23, 43], [-23, 44], [-23, 45], [-23, 46], [-23, 47], [-23, 48], [-23, 49], [-23, 50], [-22, 0], [-22, 1], [-22, 2], [-22, 3], [-22, 4], [-22, 5], [-22, 6], [-22, 7], [-22, 8], [-22, 9], [-22, 10], [-22, 11], [-22, 12], [-22, 13], [-22, 14], [-22, 15], [-22, 16], [-22, 17], [-22, 18], [-22, 19], [-22, 20], [-22, 21], [-22, 22], [-22, 23], [-22, 24], [-22, 25], [-22, 26], [-22, 27], [-22, 28], [-22, 29], [-22, 30], [-22, 31], [-22, 32], [-22, 33], [-22, 34], [-22, 35], [-22, 36], [-22, 37], [-22, 38], [-22, 39], [-22, 40], [-22, 41], [-22, 42], [-22, 43], [-22, 44], [-22, 45], [-22, 46], [-22, 47], [-22, 48], [-22, 49], [-22, 50], [-21, 0], [-21, 1], [-21, 2], [-21, 3], [-21, 4], [-21, 5], [-21, 6], [-21, 7], [-21, 8], [-21, 9], [-21, 10], [-21, 11], [-21, 12], [-21, 13], [-21, 14], [-21, 15], [-21, 16], [-21, 17], [-21, 18], [-21, 19], [-21, 20], [-21, 21], [-21, 22], [-21, 23], [-21, 24], [-21, 25], [-21, 26], [-21, 27], [-21, 28], [-21, 29], [-21, 30], [-21, 31], [-21, 32], [-21, 33], [-21, 34], [-21, 35], [-21, 36], [-21, 37], [-21, 38], [-21, 39], [-21, 40], [-21, 41], [-21, 42], [-21, 43], [-21, 44], [-21, 45], [-21, 46], [-21, 47], [-21, 48], [-21, 49], [-21, 50], [-20, 0], [-20, 1], [-20, 2], [-20, 3], [-20, 4], [-20, 5], [-20, 6], [-20, 7], [-20, 8], [-20, 9], [-20, 10], [-20, 11], [-20, 12], [-20, 13], [-20, 14], [-20, 15], [-20, 16], [-20, 17], [-20, 18], [-20, 19], [-20, 20], [-20, 21], [-20, 22], [-20, 23], [-20, 24], [-20, 25], [-20, 26], [-20, 27], [-20, 28], [-20, 29], [-20, 30], [-20, 31], [-20, 32], [-20, 33], [-20, 34], [-20, 35], [-20, 36], [-20, 37], [-20, 38], [-20, 39], [-20, 40], [-20, 41], [-20, 42], [-20, 43], [-20, 44], [-20, 45], [-20, 46], [-20, 47], [-20, 48], [-20, 49], [-20, 50], [-19, 0], [-19, 1], [-19, 2], [-19, 3], [-19, 4], [-19, 5], [-19, 6], [-19, 7], [-19, 8], [-19, 9], [-19, 10], [-19, 11], [-19, 12], [-19, 13], [-19, 14], [-19, 15], [-19, 16], [-19, 17], [-19, 18], [-19, 19], [-19, 20], [-19, 21], [-19, 22], [-19, 23], [-19, 24], [-19, 25], [-19, 26], [-19, 27], [-19, 28], [-19, 29], [-19, 30], [-19, 31], [-19, 32], [-19, 33], [-19, 34], [-19, 35], [-19, 36], [-19, 37], [-19, 38], [-19, 39], [-19, 40], [-19, 41], [-19, 42], [-19, 43], [-19, 44], [-19, 45], [-19, 46], [-19, 47], [-19, 48], [-19, 49], [-19, 50], [-18, 0], [-18, 1], [-18, 2], [-18, 3], [-18, 4], [-18, 5], [-18, 6], [-18, 7], [-18, 8], [-18, 9], [-18, 10], [-18, 11], [-18, 12], [-18, 13], [-18, 14], [-18, 15], [-18, 16], [-18, 17], [-18, 18], [-18, 19], [-18, 20], [-18, 21], [-18, 22], [-18, 23], [-18, 24], [-18, 25], [-18, 26], [-18, 27], [-18, 28], [-18, 29], [-18, 30], [-18, 31], [-18, 32], [-18, 33], [-18, 34], [-18, 35], [-18, 36], [-18, 37], [-18, 38], [-18, 39], [-18, 40], [-18, 41], [-18, 42], [-18, 43], [-18, 44], [-18, 45], [-18, 46], [-18, 47], [-18, 48], [-18, 49], [-18, 50], [-17, 0], [-17, 1], [-17, 2], [-17, 3], [-17, 4], [-17, 5], [-17, 6], [-17, 7], [-17, 8], [-17, 9], [-17, 10], [-17, 11], [-17, 12], [-17, 13], [-17, 14], [-17, 15], [-17, 16], [-17, 17], [-17, 18], [-17, 19], [-17, 20], [-17, 21], [-17, 22], [-17, 23], [-17, 24], [-17, 25], [-17, 26], [-17, 27], [-17, 28], [-17, 29], [-17, 30], [-17, 31], [-17, 32], [-17, 33], [-17, 34], [-17, 35], [-17, 36], [-17, 37], [-17, 38], [-17, 39], [-17, 40], [-17, 41], [-17, 42], [-17, 43], [-17, 44], [-17, 45], [-17, 46], [-17, 47], [-17, 48], [-17, 49], [-17, 50], [-16, 0], [-16, 1], [-16, 2], [-16, 3], [-16, 4], [-16, 5], [-16, 6], [-16, 7], [-16, 8], [-16, 9], [-16, 10], [-16, 11], [-16, 12], [-16, 13], [-16, 14], [-16, 15], [-16, 16], [-16, 17], [-16, 18], [-16, 19], [-16, 20], [-16, 21], [-16, 22], [-16, 23], [-16, 24], [-16, 25], [-16, 26], [-16, 27], [-16, 28], [-16, 29], [-16, 30], [-16, 31], [-16, 32], [-16, 33], [-16, 34], [-16, 35], [-16, 36], [-16, 37], [-16, 38], [-16, 39], [-16, 40], [-16, 41], [-16, 42], [-16, 43], [-16, 44], [-16, 45], [-16, 46], [-16, 47], [-16, 48], [-16, 49], [-16, 50], [-15, 0], [-15, 1], [-15, 2], [-15, 3], [-15, 4], [-15, 5], [-15, 6], [-15, 7], [-15, 8], [-15, 9], [-15, 10], [-15, 11], [-15, 12], [-15, 13], [-15, 14], [-15, 15], [-15, 16], [-15, 17], [-15, 18], [-15, 19], [-15, 20], [-15, 21], [-15, 22], [-15, 23], [-15, 24], [-15, 25], [-15, 26], [-15, 27], [-15, 28], [-15, 29], [-15, 30], [-15, 31], [-15, 32], [-15, 33], [-15, 34], [-15, 35], [-15, 36], [-15, 37], [-15, 38], [-15, 39], [-15, 40], [-15, 41], [-15, 42], [-15, 43], [-15, 44], [-15, 45], [-15, 46], [-15, 47], [-15, 48], [-15, 49], [-15, 50], [-14, 0], [-14, 1], [-14, 2], [-14, 3], [-14, 4], [-14, 5], [-14, 6], [-14, 7], [-14, 8], [-14, 9], [-14, 10], [-14, 11], [-14, 12], [-14, 13], [-14, 14], [-14, 15], [-14, 16], [-14, 17], [-14, 18], [-14, 19], [-14, 20], [-14, 21], [-14, 22], [-14, 23], [-14, 24], [-14, 25], [-14, 26], [-14, 27], [-14, 28], [-14, 29], [-14, 30], [-14, 31], [-14, 32], [-14, 33], [-14, 34], [-14, 35], [-14, 36], [-14, 37], [-14, 38], [-14, 39], [-14, 40], [-14, 41], [-14, 42], [-14, 43], [-14, 44], [-14, 45], [-14, 46], [-14, 47], [-14, 48], [-14, 49], [-14, 50], [-13, 0], [-13, 1], [-13, 2], [-13, 3], [-13, 4], [-13, 5], [-13, 6], [-13, 7], [-13, 8], [-13, 9], [-13, 10], [-13, 11], [-13, 12], [-13, 13], [-13, 14], [-13, 15], [-13, 16], [-13, 17], [-13, 18], [-13, 19], [-13, 20], [-13, 21], [-13, 22], [-13, 23], [-13, 24], [-13, 25], [-13, 26], [-13, 27], [-13, 28], [-13, 29], [-13, 30], [-13, 31], [-13, 32], [-13, 33], [-13, 34], [-13, 35], [-13, 36], [-13, 37], [-13, 38], [-13, 39], [-13, 40], [-13, 41], [-13, 42], [-13, 43], [-13, 44], [-13, 45], [-13, 46], [-13, 47], [-13, 48], [-13, 49], [-13, 50], [-12, 0], [-12, 1], [-12, 2], [-12, 3], [-12, 4], [-12, 5], [-12, 6], [-12, 7], [-12, 8], [-12, 9], [-12, 10], [-12, 11], [-12, 12], [-12, 13], [-12, 14], [-12, 15], [-12, 16], [-12, 17], [-12, 18], [-12, 19], [-12, 20], [-12, 21], [-12, 22], [-12, 23], [-12, 24], [-12, 25], [-12, 26], [-12, 27], [-12, 28], [-12, 29], [-12, 30], [-12, 31], [-12, 32], [-12, 33], [-12, 34], [-12, 35], [-12, 36], [-12, 37], [-12, 38], [-12, 39], [-12, 40], [-12, 41], [-12, 42], [-12, 43], [-12, 44], [-12, 45], [-12, 46], [-12, 47], [-12, 48], [-12, 49], [-12, 50], [-11, 0], [-11, 1], [-11, 2], [-11, 3], [-11, 4], [-11, 5], [-11, 6], [-11, 7], [-11, 8], [-11, 9], [-11, 10], [-11, 11], [-11, 12], [-11, 13], [-11, 14], [-11, 15], [-11, 16], [-11, 17], [-11, 18], [-11, 19], [-11, 20], [-11, 21], [-11, 22], [-11, 23], [-11, 24], [-11, 25], [-11, 26], [-11, 27], [-11, 28], [-11, 29], [-11, 30], [-11, 31], [-11, 32], [-11, 33], [-11, 34], [-11, 35], [-11, 36], [-11, 37], [-11, 38], [-11, 39], [-11, 40], [-11, 41], [-11, 42], [-11, 43], [-11, 44], [-11, 45], [-11, 46], [-11, 47], [-11, 48], [-11, 49], [-11, 50], [-10, 0], [-10, 1], [-10, 2], [-10, 3], [-10, 4], [-10, 5], [-10, 6], [-10, 7], [-10, 8], [-10, 9], [-10, 10], [-10, 11], [-10, 12], [-10, 13], [-10, 14], [-10, 15], [-10, 16], [-10, 17], [-10, 18], [-10, 19], [-10, 20], [-10, 21], [-10, 22], [-10, 23], [-10, 24], [-10, 25], [-10, 26], [-10, 27], [-10, 28], [-10, 29], [-10, 30], [-10, 31], [-10, 32], [-10, 33], [-10, 34], [-10, 35], [-10, 36], [-10, 37], [-10, 38], [-10, 39], [-10, 40], [-10, 41], [-10, 42], [-10, 43], [-10, 44], [-10, 45], [-10, 46], [-10, 47], [-10, 48], [-10, 49], [-10, 50], [-9, 0], [-9, 1], [-9, 2], [-9, 3], [-9, 4], [-9, 5], [-9, 6], [-9, 7], [-9, 8], [-9, 9], [-9, 10], [-9, 11], [-9, 12], [-9, 13], [-9, 14], [-9, 15], [-9, 16], [-9, 17], [-9, 18], [-9, 19], [-9, 20], [-9, 21], [-9, 22], [-9, 23], [-9, 24], [-9, 25], [-9, 26], [-9, 27], [-9, 28], [-9, 29], [-9, 30], [-9, 31], [-9, 32], [-9, 33], [-9, 34], [-9, 35], [-9, 36], [-9, 37], [-9, 38], [-9, 39], [-9, 40], [-9, 41], [-9, 42], [-9, 43], [-9, 44], [-9, 45], [-9, 46], [-9, 47], [-9, 48], [-9, 49], [-9, 50], [-8, 0], [-8, 1], [-8, 2], [-8, 3], [-8, 4], [-8, 5], [-8, 6], [-8, 7], [-8, 8], [-8, 9], [-8, 10], [-8, 11], [-8, 12], [-8, 13], [-8, 14], [-8, 15], [-8, 16], [-8, 17], [-8, 18], [-8, 19], [-8, 20], [-8, 21], [-8, 22], [-8, 23], [-8, 24], [-8, 25], [-8, 26], [-8, 27], [-8, 28], [-8, 29], [-8, 30], [-8, 31], [-8, 32], [-8, 33], [-8, 34], [-8, 35], [-8, 36], [-8, 37], [-8, 38], [-8, 39], [-8, 40], [-8, 41], [-8, 42], [-8, 43], [-8, 44], [-8, 45], [-8, 46], [-8, 47], [-8, 48], [-8, 49], [-8, 50], [-7, 0], [-7, 1], [-7, 2], [-7, 3], [-7, 4], [-7, 5], [-7, 6], [-7, 7], [-7, 8], [-7, 9], [-7, 10], [-7, 11], [-7, 12], [-7, 13], [-7, 14], [-7, 15], [-7, 16], [-7, 17], [-7, 18], [-7, 19], [-7, 20], [-7, 21], [-7, 22], [-7, 23], [-7, 24], [-7, 25], [-7, 26], [-7, 27], [-7, 28], [-7, 29], [-7, 30], [-7, 31], [-7, 32], [-7, 33], [-7, 34], [-7, 35], [-7, 36], [-7, 37], [-7, 38], [-7, 39], [-7, 40], [-7, 41], [-7, 42], [-7, 43], [-7, 44], [-7, 45], [-7, 46], [-7, 47], [-7, 48], [-7, 49], [-7, 50], [-6, 0], [-6, 1], [-6, 2], [-6, 3], [-6, 4], [-6, 5], [-6, 6], [-6, 7], [-6, 8], [-6, 9], [-6, 10], [-6, 11], [-6, 12], [-6, 13], [-6, 14], [-6, 15], [-6, 16], [-6, 17], [-6, 18], [-6, 19], [-6, 20], [-6, 21], [-6, 22], [-6, 23], [-6, 24], [-6, 25], [-6, 26], [-6, 27], [-6, 28], [-6, 29], [-6, 30], [-6, 31], [-6, 32], [-6, 33], [-6, 34], [-6, 35], [-6, 36], [-6, 37], [-6, 38], [-6, 39], [-6, 40], [-6, 41], [-6, 42], [-6, 43], [-6, 44], [-6, 45], [-6, 46], [-6, 47], [-6, 48], [-6, 49], [-6, 50], [-5, 0], [-5, 1], [-5, 2], [-5, 3], [-5, 4], [-5, 5], [-5, 6], [-5, 7], [-5, 8], [-5, 9], [-5, 10], [-5, 11], [-5, 12], [-5, 13], [-5, 14], [-5, 15], [-5, 16], [-5, 17], [-5, 18], [-5, 19], [-5, 20], [-5, 21], [-5, 22], [-5, 23], [-5, 24], [-5, 25], [-5, 26], [-5, 27], [-5, 28], [-5, 29], [-5, 30], [-5, 31], [-5, 32], [-5, 33], [-5, 34], [-5, 35], [-5, 36], [-5, 37], [-5, 38], [-5, 39], [-5, 40], [-5, 41], [-5, 42], [-5, 43], [-5, 44], [-5, 45], [-5, 46], [-5, 47], [-5, 48], [-5, 49], [-5, 50], [-4, 0], [-4, 1], [-4, 2], [-4, 3], [-4, 4], [-4, 5], [-4, 6], [-4, 7], [-4, 8], [-4, 9], [-4, 10], [-4, 11], [-4, 12], [-4, 13], [-4, 14], [-4, 15], [-4, 16], [-4, 17], [-4, 18], [-4, 19], [-4, 20], [-4, 21], [-4, 22], [-4, 23], [-4, 24], [-4, 25], [-4, 26], [-4, 27], [-4, 28], [-4, 29], [-4, 30], [-4, 31], [-4, 32], [-4, 33], [-4, 34], [-4, 35], [-4, 36], [-4, 37], [-4, 38], [-4, 39], [-4, 40], [-4, 41], [-4, 42], [-4, 43], [-4, 44], [-4, 45], [-4, 46], [-4, 47], [-4, 48], [-4, 49], [-4, 50], [-3, 0], [-3, 1], [-3, 2], [-3, 3], [-3, 4], [-3, 5], [-3, 6], [-3, 7], [-3, 8], [-3, 9], [-3, 10], [-3, 11], [-3, 12], [-3, 13], [-3, 14], [-3, 15], [-3, 16], [-3, 17], [-3, 18], [-3, 19], [-3, 20], [-3, 21], [-3, 22], [-3, 23], [-3, 24], [-3, 25], [-3, 26], [-3, 27], [-3, 28], [-3, 29], [-3, 30], [-3, 31], [-3, 32], [-3, 33], [-3, 34], [-3, 35], [-3, 36], [-3, 37], [-3, 38], [-3, 39], [-3, 40], [-3, 41], [-3, 42], [-3, 43], [-3, 44], [-3, 45], [-3, 46], [-3, 47], [-3, 48], [-3, 49], [-3, 50], [-2, 0], [-2, 1], [-2, 2], [-2, 3], [-2, 4], [-2, 5], [-2, 6], [-2, 7], [-2, 8], [-2, 9], [-2, 10], [-2, 11], [-2, 12], [-2, 13], [-2, 14], [-2, 15], [-2, 16], [-2, 17], [-2, 18], [-2, 19], [-2, 20], [-2, 21], [-2, 22], [-2, 23], [-2, 24], [-2, 25], [-2, 26], [-2, 27], [-2, 28], [-2, 29], [-2, 30], [-2, 31], [-2, 32], [-2, 33], [-2, 34], [-2, 35], [-2, 36], [-2, 37], [-2, 38], [-2, 39], [-2, 40], [-2, 41], [-2, 42], [-2, 43], [-2, 44], [-2, 45], [-2, 46], [-2, 47], [-2, 48], [-2, 49], [-2, 50], [-1, 0], [-1, 1], [-1, 2], [-1, 3], [-1, 4], [-1, 5], [-1, 6], [-1, 7], [-1, 8], [-1, 9], [-1, 10], [-1, 11], [-1, 12], [-1, 13], [-1, 14], [-1, 15], [-1, 16], [-1, 17], [-1, 18], [-1, 19], [-1, 20], [-1, 21], [-1, 22], [-1, 23], [-1, 24], [-1, 25], [-1, 26], [-1, 27], [-1, 28], [-1, 29], [-1, 30], [-1, 31], [-1, 32], [-1, 33], [-1, 34], [-1, 35], [-1, 36], [-1, 37], [-1, 38], [-1, 39], [-1, 40], [-1, 41], [-1, 42], [-1, 43], [-1, 44], [-1, 45], [-1, 46], [-1, 47], [-1, 48], [-1, 49], [-1, 50], [0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [0, 5], [0, 6], [0, 7], [0, 8], [0, 9], [0, 10], [0, 11], [0, 12], [0, 13], [0, 14], [0, 15], [0, 16], [0, 17], [0, 18], [0, 19], [0, 20], [0, 21], [0, 22], [0, 23], [0, 24], [0, 25], [0, 26], [0, 27], [0, 28], [0, 29], [0, 30], [0, 31], [0, 32], [0, 33], [0, 34], [0, 35], [0, 36], [0, 37], [0, 38], [0, 39], [0, 40], [0, 41], [0, 42], [0, 43], [0, 44], [0, 45], [0, 46], [0, 47], [0, 48], [0, 49], [0, 50], [1, 0], [1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [1, 8], [1, 9], [1, 10], [1, 11], [1, 12], [1, 13], [1, 14], [1, 15], [1, 16], [1, 17], [1, 18], [1, 19], [1, 20], [1, 21], [1, 22], [1, 23], [1, 24], [1, 25], [1, 26], [1, 27], [1, 28], [1, 29], [1, 30], [1, 31], [1, 32], [1, 33], [1, 34], [1, 35], [1, 36], [1, 37], [1, 38], [1, 39], [1, 40], [1, 41], [1, 42], [1, 43], [1, 44], [1, 45], [1, 46], [1, 47], [1, 48], [1, 49], [1, 50], [2, 0], [2, 1], [2, 2], [2, 3], [2, 4], [2, 5], [2, 6], [2, 7], [2, 8], [2, 9], [2, 10], [2, 11], [2, 12], [2, 13], [2, 14], [2, 15], [2, 16], [2, 17], [2, 18], [2, 19], [2, 20], [2, 21], [2, 22], [2, 23], [2, 24], [2, 25], [2, 26], [2, 27], [2, 28], [2, 29], [2, 30], [2, 31], [2, 32], [2, 33], [2, 34], [2, 35], [2, 36], [2, 37], [2, 38], [2, 39], [2, 40], [2, 41], [2, 42], [2, 43], [2, 44], [2, 45], [2, 46], [2, 47], [2, 48], [2, 49], [2, 50], [3, 0], [3, 1], [3, 2], [3, 3], [3, 4], [3, 5], [3, 6], [3, 7], [3, 8], [3, 9], [3, 10], [3, 11], [3, 12], [3, 13], [3, 14], [3, 15], [3, 16], [3, 17], [3, 18], [3, 19], [3, 20], [3, 21], [3, 22], [3, 23], [3, 24], [3, 25], [3, 26], [3, 27], [3, 28], [3, 29], [3, 30], [3, 31], [3, 32], [3, 33], [3, 34], [3, 35], [3, 36], [3, 37], [3, 38], [3, 39], [3, 40], [3, 41], [3, 42], [3, 43], [3, 44], [3, 45], [3, 46], [3, 47], [3, 48], [3, 49], [3, 50], [4, 0], [4, 1], [4, 2], [4, 3], [4, 4], [4, 5], [4, 6], [4, 7], [4, 8], [4, 9], [4, 10], [4, 11], [4, 12], [4, 13], [4, 14], [4, 15], [4, 16], [4, 17], [4, 18], [4, 19], [4, 20], [4, 21], [4, 22], [4, 23], [4, 24], [4, 25], [4, 26], [4, 27], [4, 28], [4, 29], [4, 30], [4, 31], [4, 32], [4, 33], [4, 34], [4, 35], [4, 36], [4, 37], [4, 38], [4, 39], [4, 40], [4, 41], [4, 42], [4, 43], [4, 44], [4, 45], [4, 46], [4, 47], [4, 48], [4, 49], [4, 50], [5, 0], [5, 1], [5, 2], [5, 3], [5, 4], [5, 5], [5, 6], [5, 7], [5, 8], [5, 9], [5, 10], [5, 11], [5, 12], [5, 13], [5, 14], [5, 15], [5, 16], [5, 17], [5, 18], [5, 19], [5, 20], [5, 21], [5, 22], [5, 23], [5, 24], [5, 25], [5, 26], [5, 27], [5, 28], [5, 29], [5, 30], [5, 31], [5, 32], [5, 33], [5, 34], [5, 35], [5, 36], [5, 37], [5, 38], [5, 39], [5, 40], [5, 41], [5, 42], [5, 43], [5, 44], [5, 45], [5, 46], [5, 47], [5, 48], [5, 49], [5, 50], [6, 0], [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6], [6, 7], [6, 8], [6, 9], [6, 10], [6, 11], [6, 12], [6, 13], [6, 14], [6, 15], [6, 16], [6, 17], [6, 18], [6, 19], [6, 20], [6, 21], [6, 22], [6, 23], [6, 24], [6, 25], [6, 26], [6, 27], [6, 28], [6, 29], [6, 30], [6, 31], [6, 32], [6, 33], [6, 34], [6, 35], [6, 36], [6, 37], [6, 38], [6, 39], [6, 40], [6, 41], [6, 42], [6, 43], [6, 44], [6, 45], [6, 46], [6, 47], [6, 48], [6, 49], [6, 50], [7, 0], [7, 1], [7, 2], [7, 3], [7, 4], [7, 5], [7, 6], [7, 7], [7, 8], [7, 9], [7, 10], [7, 11], [7, 12], [7, 13], [7, 14], [7, 15], [7, 16], [7, 17], [7, 18], [7, 19], [7, 20], [7, 21], [7, 22], [7, 23], [7, 24], [7, 25], [7, 26], [7, 27], [7, 28], [7, 29], [7, 30], [7, 31], [7, 32], [7, 33], [7, 34], [7, 35], [7, 36], [7, 37], [7, 38], [7, 39], [7, 40], [7, 41], [7, 42], [7, 43], [7, 44], [7, 45], [7, 46], [7, 47], [7, 48], [7, 49], [7, 50], [8, 0], [8, 1], [8, 2], [8, 3], [8, 4], [8, 5], [8, 6], [8, 7], [8, 8], [8, 9], [8, 10], [8, 11], [8, 12], [8, 13], [8, 14], [8, 15], [8, 16], [8, 17], [8, 18], [8, 19], [8, 20], [8, 21], [8, 22], [8, 23], [8, 24], [8, 25], [8, 26], [8, 27], [8, 28], [8, 29], [8, 30], [8, 31], [8, 32], [8, 33], [8, 34], [8, 35], [8, 36], [8, 37], [8, 38], [8, 39], [8, 40], [8, 41], [8, 42], [8, 43], [8, 44], [8, 45], [8, 46], [8, 47], [8, 48], [8, 49], [8, 50], [9, 0], [9, 1], [9, 2], [9, 3], [9, 4], [9, 5], [9, 6], [9, 7], [9, 8], [9, 9], [9, 10], [9, 11], [9, 12], [9, 13], [9, 14], [9, 15], [9, 16], [9, 17], [9, 18], [9, 19], [9, 20], [9, 21], [9, 22], [9, 23], [9, 24], [9, 25], [9, 26], [9, 27], [9, 28], [9, 29], [9, 30], [9, 31], [9, 32], [9, 33], [9, 34], [9, 35], [9, 36], [9, 37], [9, 38], [9, 39], [9, 40], [9, 41], [9, 42], [9, 43], [9, 44], [9, 45], [9, 46], [9, 47], [9, 48], [9, 49], [9, 50], [10, 0], [10, 1], [10, 2], [10, 3], [10, 4], [10, 5], [10, 6], [10, 7], [10, 8], [10, 9], [10, 10], [10, 11], [10, 12], [10, 13], [10, 14], [10, 15], [10, 16], [10, 17], [10, 18], [10, 19], [10, 20], [10, 21], [10, 22], [10, 23], [10, 24], [10, 25], [10, 26], [10, 27], [10, 28], [10, 29], [10, 30], [10, 31], [10, 32], [10, 33], [10, 34], [10, 35], [10, 36], [10, 37], [10, 38], [10, 39], [10, 40], [10, 41], [10, 42], [10, 43], [10, 44], [10, 45], [10, 46], [10, 47], [10, 48], [10, 49], [10, 50], [11, 0], [11, 1], [11, 2], [11, 3], [11, 4], [11, 5], [11, 6], [11, 7], [11, 8], [11, 9], [11, 10], [11, 11], [11, 12], [11, 13], [11, 14], [11, 15], [11, 16], [11, 17], [11, 18], [11, 19], [11, 20], [11, 21], [11, 22], [11, 23], [11, 24], [11, 25], [11, 26], [11, 27], [11, 28], [11, 29], [11, 30], [11, 31], [11, 32], [11, 33], [11, 34], [11, 35], [11, 36], [11, 37], [11, 38], [11, 39], [11, 40], [11, 41], [11, 42], [11, 43], [11, 44], [11, 45], [11, 46], [11, 47], [11, 48], [11, 49], [11, 50], [12, 0], [12, 1], [12, 2], [12, 3], [12, 4], [12, 5], [12, 6], [12, 7], [12, 8], [12, 9], [12, 10], [12, 11], [12, 12], [12, 13], [12, 14], [12, 15], [12, 16], [12, 17], [12, 18], [12, 19], [12, 20], [12, 21], [12, 22], [12, 23], [12, 24], [12, 25], [12, 26], [12, 27], [12, 28], [12, 29], [12, 30], [12, 31], [12, 32], [12, 33], [12, 34], [12, 35], [12, 36], [12, 37], [12, 38], [12, 39], [12, 40], [12, 41], [12, 42], [12, 43], [12, 44], [12, 45], [12, 46], [12, 47], [12, 48], [12, 49], [12, 50], [13, 0], [13, 1], [13, 2], [13, 3], [13, 4], [13, 5], [13, 6], [13, 7], [13, 8], [13, 9], [13, 10], [13, 11], [13, 12], [13, 13], [13, 14], [13, 15], [13, 16], [13, 17], [13, 18], [13, 19], [13, 20], [13, 21], [13, 22], [13, 23], [13, 24], [13, 25], [13, 26], [13, 27], [13, 28], [13, 29], [13, 30], [13, 31], [13, 32], [13, 33], [13, 34], [13, 35], [13, 36], [13, 37], [13, 38], [13, 39], [13, 40], [13, 41], [13, 42], [13, 43], [13, 44], [13, 45], [13, 46], [13, 47], [13, 48], [13, 49], [13, 50], [14, 0], [14, 1], [14, 2], [14, 3], [14, 4], [14, 5], [14, 6], [14, 7], [14, 8], [14, 9], [14, 10], [14, 11], [14, 12], [14, 13], [14, 14], [14, 15], [14, 16], [14, 17], [14, 18], [14, 19], [14, 20], [14, 21], [14, 22], [14, 23], [14, 24], [14, 25], [14, 26], [14, 27], [14, 28], [14, 29], [14, 30], [14, 31], [14, 32], [14, 33], [14, 34], [14, 35], [14, 36], [14, 37], [14, 38], [14, 39], [14, 40], [14, 41], [14, 42], [14, 43], [14, 44], [14, 45], [14, 46], [14, 47], [14, 48], [14, 49], [14, 50], [15, 0], [15, 1], [15, 2], [15, 3], [15, 4], [15, 5], [15, 6], [15, 7], [15, 8], [15, 9], [15, 10], [15, 11], [15, 12], [15, 13], [15, 14], [15, 15], [15, 16], [15, 17], [15, 18], [15, 19], [15, 20], [15, 21], [15, 22], [15, 23], [15, 24], [15, 25], [15, 26], [15, 27], [15, 28], [15, 29], [15, 30], [15, 31], [15, 32], [15, 33], [15, 34], [15, 35], [15, 36], [15, 37], [15, 38], [15, 39], [15, 40], [15, 41], [15, 42], [15, 43], [15, 44], [15, 45], [15, 46], [15, 47], [15, 48], [15, 49], [15, 50], [16, 0], [16, 1], [16, 2], [16, 3], [16, 4], [16, 5], [16, 6], [16, 7], [16, 8], [16, 9], [16, 10], [16, 11], [16, 12], [16, 13], [16, 14], [16, 15], [16, 16], [16, 17], [16, 18], [16, 19], [16, 20], [16, 21], [16, 22], [16, 23], [16, 24], [16, 25], [16, 26], [16, 27], [16, 28], [16, 29], [16, 30], [16, 31], [16, 32], [16, 33], [16, 34], [16, 35], [16, 36], [16, 37], [16, 38], [16, 39], [16, 40], [16, 41], [16, 42], [16, 43], [16, 44], [16, 45], [16, 46], [16, 47], [16, 48], [16, 49], [16, 50], [17, 0], [17, 1], [17, 2], [17, 3], [17, 4], [17, 5], [17, 6], [17, 7], [17, 8], [17, 9], [17, 10], [17, 11], [17, 12], [17, 13], [17, 14], [17, 15], [17, 16], [17, 17], [17, 18], [17, 19], [17, 20], [17, 21], [17, 22], [17, 23], [17, 24], [17, 25], [17, 26], [17, 27], [17, 28], [17, 29], [17, 30], [17, 31], [17, 32], [17, 33], [17, 34], [17, 35], [17, 36], [17, 37], [17, 38], [17, 39], [17, 40], [17, 41], [17, 42], [17, 43], [17, 44], [17, 45], [17, 46], [17, 47], [17, 48], [17, 49], [17, 50], [18, 0], [18, 1], [18, 2], [18, 3], [18, 4], [18, 5], [18, 6], [18, 7], [18, 8], [18, 9], [18, 10], [18, 11], [18, 12], [18, 13], [18, 14], [18, 15], [18, 16], [18, 17], [18, 18], [18, 19], [18, 20], [18, 21], [18, 22], [18, 23], [18, 24], [18, 25], [18, 26], [18, 27], [18, 28], [18, 29], [18, 30], [18, 31], [18, 32], [18, 33], [18, 34], [18, 35], [18, 36], [18, 37], [18, 38], [18, 39], [18, 40], [18, 41], [18, 42], [18, 43], [18, 44], [18, 45], [18, 46], [18, 47], [18, 48], [18, 49], [18, 50], [19, 0], [19, 1], [19, 2], [19, 3], [19, 4], [19, 5], [19, 6], [19, 7], [19, 8], [19, 9], [19, 10], [19, 11], [19, 12], [19, 13], [19, 14], [19, 15], [19, 16], [19, 17], [19, 18], [19, 19], [19, 20], [19, 21], [19, 22], [19, 23], [19, 24], [19, 25], [19, 26], [19, 27], [19, 28], [19, 29], [19, 30], [19, 31], [19, 32], [19, 33], [19, 34], [19, 35], [19, 36], [19, 37], [19, 38], [19, 39], [19, 40], [19, 41], [19, 42], [19, 43], [19, 44], [19, 45], [19, 46], [19, 47], [19, 48], [19, 49], [19, 50], [20, 0], [20, 1], [20, 2], [20, 3], [20, 4], [20, 5], [20, 6], [20, 7], [20, 8], [20, 9], [20, 10], [20, 11], [20, 12], [20, 13], [20, 14], [20, 15], [20, 16], [20, 17], [20, 18], [20, 19], [20, 20], [20, 21], [20, 22], [20, 23], [20, 24], [20, 25], [20, 26], [20, 27], [20, 28], [20, 29], [20, 30], [20, 31], [20, 32], [20, 33], [20, 34], [20, 35], [20, 36], [20, 37], [20, 38], [20, 39], [20, 40], [20, 41], [20, 42], [20, 43], [20, 44], [20, 45], [20, 46], [20, 47], [20, 48], [20, 49], [20, 50], [21, 0], [21, 1], [21, 2], [21, 3], [21, 4], [21, 5], [21, 6], [21, 7], [21, 8], [21, 9], [21, 10], [21, 11], [21, 12], [21, 13], [21, 14], [21, 15], [21, 16], [21, 17], [21, 18], [21, 19], [21, 20], [21, 21], [21, 22], [21, 23], [21, 24], [21, 25], [21, 26], [21, 27], [21, 28], [21, 29], [21, 30], [21, 31], [21, 32], [21, 33], [21, 34], [21, 35], [21, 36], [21, 37], [21, 38], [21, 39], [21, 40], [21, 41], [21, 42], [21, 43], [21, 44], [21, 45], [21, 46], [21, 47], [21, 48], [21, 49], [21, 50], [22, 0], [22, 1], [22, 2], [22, 3], [22, 4], [22, 5], [22, 6], [22, 7], [22, 8], [22, 9], [22, 10], [22, 11], [22, 12], [22, 13], [22, 14], [22, 15], [22, 16], [22, 17], [22, 18], [22, 19], [22, 20], [22, 21], [22, 22], [22, 23], [22, 24], [22, 25], [22, 26], [22, 27], [22, 28], [22, 29], [22, 30], [22, 31], [22, 32], [22, 33], [22, 34], [22, 35], [22, 36], [22, 37], [22, 38], [22, 39], [22, 40], [22, 41], [22, 42], [22, 43], [22, 44], [22, 45], [22, 46], [22, 47], [22, 48], [22, 49], [22, 50], [23, 0], [23, 1], [23, 2], [23, 3], [23, 4], [23, 5], [23, 6], [23, 7], [23, 8], [23, 9], [23, 10], [23, 11], [23, 12], [23, 13], [23, 14], [23, 15], [23, 16], [23, 17], [23, 18], [23, 19], [23, 20], [23, 21], [23, 22], [23, 23], [23, 24], [23, 25], [23, 26], [23, 27], [23, 28], [23, 29], [23, 30], [23, 31], [23, 32], [23, 33], [23, 34], [23, 35], [23, 36], [23, 37], [23, 38], [23, 39], [23, 40], [23, 41], [23, 42], [23, 43], [23, 44], [23, 45], [23, 46], [23, 47], [23, 48], [23, 49], [23, 50], [24, 0], [24, 1], [24, 2], [24, 3], [24, 4], [24, 5], [24, 6], [24, 7], [24, 8], [24, 9], [24, 10], [24, 11], [24, 12], [24, 13], [24, 14], [24, 15], [24, 16], [24, 17], [24, 18], [24, 19], [24, 20], [24, 21], [24, 22], [24, 23], [24, 24], [24, 25], [24, 26], [24, 27], [24, 28], [24, 29], [24, 30], [24, 31], [24, 32], [24, 33], [24, 34], [24, 35], [24, 36], [24, 37], [24, 38], [24, 39], [24, 40], [24, 41], [24, 42], [24, 43], [24, 44], [24, 45], [24, 46], [24, 47], [24, 48], [24, 49], [24, 50], [25, 0], [25, 1], [25, 2], [25, 3], [25, 4], [25, 5], [25, 6], [25, 7], [25, 8], [25, 9], [25, 10], [25, 11], [25, 12], [25, 13], [25, 14], [25, 15], [25, 16], [25, 17], [25, 18], [25, 19], [25, 20], [25, 21], [25, 22], [25, 23], [25, 24], [25, 25], [25, 26], [25, 27], [25, 28], [25, 29], [25, 30], [25, 31], [25, 32], [25, 33], [25, 34], [25, 35], [25, 36], [25, 37], [25, 38], [25, 39], [25, 40], [25, 41], [25, 42], [25, 43], [25, 44], [25, 45], [25, 46], [25, 47], [25, 48], [25, 49], [25, 50], [26, 0], [26, 1], [26, 2], [26, 3], [26, 4], [26, 5], [26, 6], [26, 7], [26, 8], [26, 9], [26, 10], [26, 11], [26, 12], [26, 13], [26, 14], [26, 15], [26, 16], [26, 17], [26, 18], [26, 19], [26, 20], [26, 21], [26, 22], [26, 23], [26, 24], [26, 25], [26, 26], [26, 27], [26, 28], [26, 29], [26, 30], [26, 31], [26, 32], [26, 33], [26, 34], [26, 35], [26, 36], [26, 37], [26, 38], [26, 39], [26, 40], [26, 41], [26, 42], [26, 43], [26, 44], [26, 45], [26, 46], [26, 47], [26, 48], [26, 49], [26, 50], [27, 0], [27, 1], [27, 2], [27, 3], [27, 4], [27, 5], [27, 6], [27, 7], [27, 8], [27, 9], [27, 10], [27, 11], [27, 12], [27, 13], [27, 14], [27, 15], [27, 16], [27, 17], [27, 18], [27, 19], [27, 20], [27, 21], [27, 22], [27, 23], [27, 24], [27, 25], [27, 26], [27, 27], [27, 28], [27, 29], [27, 30], [27, 31], [27, 32], [27, 33], [27, 34], [27, 35], [27, 36], [27, 37], [27, 38], [27, 39], [27, 40], [27, 41], [27, 42], [27, 43], [27, 44], [27, 45], [27, 46], [27, 47], [27, 48], [27, 49], [27, 50], [28, 0], [28, 1], [28, 2], [28, 3], [28, 4], [28, 5], [28, 6], [28, 7], [28, 8], [28, 9], [28, 10], [28, 11], [28, 12], [28, 13], [28, 14], [28, 15], [28, 16], [28, 17], [28, 18], [28, 19], [28, 20], [28, 21], [28, 22], [28, 23], [28, 24], [28, 25], [28, 26], [28, 27], [28, 28], [28, 29], [28, 30], [28, 31], [28, 32], [28, 33], [28, 34], [28, 35], [28, 36], [28, 37], [28, 38], [28, 39], [28, 40], [28, 41], [28, 42], [28, 43], [28, 44], [28, 45], [28, 46], [28, 47], [28, 48], [28, 49], [28, 50], [29, 0], [29, 1], [29, 2], [29, 3], [29, 4], [29, 5], [29, 6], [29, 7], [29, 8], [29, 9], [29, 10], [29, 11], [29, 12], [29, 13], [29, 14], [29, 15], [29, 16], [29, 17], [29, 18], [29, 19], [29, 20], [29, 21], [29, 22], [29, 23], [29, 24], [29, 25], [29, 26], [29, 27], [29, 28], [29, 29], [29, 30], [29, 31], [29, 32], [29, 33], [29, 34], [29, 35], [29, 36], [29, 37], [29, 38], [29, 39], [29, 40], [29, 41], [29, 42], [29, 43], [29, 44], [29, 45], [29, 46], [29, 47], [29, 48], [29, 49], [29, 50], [30, 0], [30, 1], [30, 2], [30, 3], [30, 4], [30, 5], [30, 6], [30, 7], [30, 8], [30, 9], [30, 10], [30, 11], [30, 12], [30, 13], [30, 14], [30, 15], [30, 16], [30, 17], [30, 18], [30, 19], [30, 20], [30, 21], [30, 22], [30, 23], [30, 24], [30, 25], [30, 26], [30, 27], [30, 28], [30, 29], [30, 30], [30, 31], [30, 32], [30, 33], [30, 34], [30, 35], [30, 36], [30, 37], [30, 38], [30, 39], [30, 40], [30, 41], [30, 42], [30, 43], [30, 44], [30, 45], [30, 46], [30, 47], [30, 48], [30, 49], [30, 50], [31, 0], [31, 1], [31, 2], [31, 3], [31, 4], [31, 5], [31, 6], [31, 7], [31, 8], [31, 9], [31, 10], [31, 11], [31, 12], [31, 13], [31, 14], [31, 15], [31, 16], [31, 17], [31, 18], [31, 19], [31, 20], [31, 21], [31, 22], [31, 23], [31, 24], [31, 25], [31, 26], [31, 27], [31, 28], [31, 29], [31, 30], [31, 31], [31, 32], [31, 33], [31, 34], [31, 35], [31, 36], [31, 37], [31, 38], [31, 39], [31, 40], [31, 41], [31, 42], [31, 43], [31, 44], [31, 45], [31, 46], [31, 47], [31, 48], [31, 49], [31, 50], [32, 0], [32, 1], [32, 2], [32, 3], [32, 4], [32, 5], [32, 6], [32, 7], [32, 8], [32, 9], [32, 10], [32, 11], [32, 12], [32, 13], [32, 14], [32, 15], [32, 16], [32, 17], [32, 18], [32, 19], [32, 20], [32, 21], [32, 22], [32, 23], [32, 24], [32, 25], [32, 26], [32, 27], [32, 28], [32, 29], [32, 30], [32, 31], [32, 32], [32, 33], [32, 34], [32, 35], [32, 36], [32, 37], [32, 38], [32, 39], [32, 40], [32, 41], [32, 42], [32, 43], [32, 44], [32, 45], [32, 46], [32, 47], [32, 48], [32, 49], [32, 50], [33, 0], [33, 1], [33, 2], [33, 3], [33, 4], [33, 5], [33, 6], [33, 7], [33, 8], [33, 9], [33, 10], [33, 11], [33, 12], [33, 13], [33, 14], [33, 15], [33, 16], [33, 17], [33, 18], [33, 19], [33, 20], [33, 21], [33, 22], [33, 23], [33, 24], [33, 25], [33, 26], [33, 27], [33, 28], [33, 29], [33, 30], [33, 31], [33, 32], [33, 33], [33, 34], [33, 35], [33, 36], [33, 37], [33, 38], [33, 39], [33, 40], [33, 41], [33, 42], [33, 43], [33, 44], [33, 45], [33, 46], [33, 47], [33, 48], [33, 49], [33, 50], [34, 0], [34, 1], [34, 2], [34, 3], [34, 4], [34, 5], [34, 6], [34, 7], [34, 8], [34, 9], [34, 10], [34, 11], [34, 12], [34, 13], [34, 14], [34, 15], [34, 16], [34, 17], [34, 18], [34, 19], [34, 20], [34, 21], [34, 22], [34, 23], [34, 24], [34, 25], [34, 26], [34, 27], [34, 28], [34, 29], [34, 30], [34, 31], [34, 32], [34, 33], [34, 34], [34, 35], [34, 36], [34, 37], [34, 38], [34, 39], [34, 40], [34, 41], [34, 42], [34, 43], [34, 44], [34, 45], [34, 46], [34, 47], [34, 48], [34, 49], [34, 50], [35, 0], [35, 1], [35, 2], [35, 3], [35, 4], [35, 5], [35, 6], [35, 7], [35, 8], [35, 9], [35, 10], [35, 11], [35, 12], [35, 13], [35, 14], [35, 15], [35, 16], [35, 17], [35, 18], [35, 19], [35, 20], [35, 21], [35, 22], [35, 23], [35, 24], [35, 25], [35, 26], [35, 27], [35, 28], [35, 29], [35, 30], [35, 31], [35, 32], [35, 33], [35, 34], [35, 35], [35, 36], [35, 37], [35, 38], [35, 39], [35, 40], [35, 41], [35, 42], [35, 43], [35, 44], [35, 45], [35, 46], [35, 47], [35, 48], [35, 49], [35, 50], [36, 0], [36, 1], [36, 2], [36, 3], [36, 4], [36, 5], [36, 6], [36, 7], [36, 8], [36, 9], [36, 10], [36, 11], [36, 12], [36, 13], [36, 14], [36, 15], [36, 16], [36, 17], [36, 18], [36, 19], [36, 20], [36, 21], [36, 22], [36, 23], [36, 24], [36, 25], [36, 26], [36, 27], [36, 28], [36, 29], [36, 30], [36, 31], [36, 32], [36, 33], [36, 34], [36, 35], [36, 36], [36, 37], [36, 38], [36, 39], [36, 40], [36, 41], [36, 42], [36, 43], [36, 44], [36, 45], [36, 46], [36, 47], [36, 48], [36, 49], [36, 50], [37, 0], [37, 1], [37, 2], [37, 3], [37, 4], [37, 5], [37, 6], [37, 7], [37, 8], [37, 9], [37, 10], [37, 11], [37, 12], [37, 13], [37, 14], [37, 15], [37, 16], [37, 17], [37, 18], [37, 19], [37, 20], [37, 21], [37, 22], [37, 23], [37, 24], [37, 25], [37, 26], [37, 27], [37, 28], [37, 29], [37, 30], [37, 31], [37, 32], [37, 33], [37, 34], [37, 35], [37, 36], [37, 37], [37, 38], [37, 39], [37, 40], [37, 41], [37, 42], [37, 43], [37, 44], [37, 45], [37, 46], [37, 47], [37, 48], [37, 49], [37, 50], [38, 0], [38, 1], [38, 2], [38, 3], [38, 4], [38, 5], [38, 6], [38, 7], [38, 8], [38, 9], [38, 10], [38, 11], [38, 12], [38, 13], [38, 14], [38, 15], [38, 16], [38, 17], [38, 18], [38, 19], [38, 20], [38, 21], [38, 22], [38, 23], [38, 24], [38, 25], [38, 26], [38, 27], [38, 28], [38, 29], [38, 30], [38, 31], [38, 32], [38, 33], [38, 34], [38, 35], [38, 36], [38, 37], [38, 38], [38, 39], [38, 40], [38, 41], [38, 42], [38, 43], [38, 44], [38, 45], [38, 46], [38, 47], [38, 48], [38, 49], [38, 50], [39, 0], [39, 1], [39, 2], [39, 3], [39, 4], [39, 5], [39, 6], [39, 7], [39, 8], [39, 9], [39, 10], [39, 11], [39, 12], [39, 13], [39, 14], [39, 15], [39, 16], [39, 17], [39, 18], [39, 19], [39, 20], [39, 21], [39, 22], [39, 23], [39, 24], [39, 25], [39, 26], [39, 27], [39, 28], [39, 29], [39, 30], [39, 31], [39, 32], [39, 33], [39, 34], [39, 35], [39, 36], [39, 37], [39, 38], [39, 39], [39, 40], [39, 41], [39, 42], [39, 43], [39, 44], [39, 45], [39, 46], [39, 47], [39, 48], [39, 49], [39, 50], [40, 0], [40, 1], [40, 2], [40, 3], [40, 4], [40, 5], [40, 6], [40, 7], [40, 8], [40, 9], [40, 10], [40, 11], [40, 12], [40, 13], [40, 14], [40, 15], [40, 16], [40, 17], [40, 18], [40, 19], [40, 20], [40, 21], [40, 22], [40, 23], [40, 24], [40, 25], [40, 26], [40, 27], [40, 28], [40, 29], [40, 30], [40, 31], [40, 32], [40, 33], [40, 34], [40, 35], [40, 36], [40, 37], [40, 38], [40, 39], [40, 40], [40, 41], [40, 42], [40, 43], [40, 44], [40, 45], [40, 46], [40, 47], [40, 48], [40, 49], [40, 50], [41, 0], [41, 1], [41, 2], [41, 3], [41, 4], [41, 5], [41, 6], [41, 7], [41, 8], [41, 9], [41, 10], [41, 11], [41, 12], [41, 13], [41, 14], [41, 15], [41, 16], [41, 17], [41, 18], [41, 19], [41, 20], [41, 21], [41, 22], [41, 23], [41, 24], [41, 25], [41, 26], [41, 27], [41, 28], [41, 29], [41, 30], [41, 31], [41, 32], [41, 33], [41, 34], [41, 35], [41, 36], [41, 37], [41, 38], [41, 39], [41, 40], [41, 41], [41, 42], [41, 43], [41, 44], [41, 45], [41, 46], [41, 47], [41, 48], [41, 49], [41, 50], [42, 0], [42, 1], [42, 2], [42, 3], [42, 4], [42, 5], [42, 6], [42, 7], [42, 8], [42, 9], [42, 10], [42, 11], [42, 12], [42, 13], [42, 14], [42, 15], [42, 16], [42, 17], [42, 18], [42, 19], [42, 20], [42, 21], [42, 22], [42, 23], [42, 24], [42, 25], [42, 26], [42, 27], [42, 28], [42, 29], [42, 30], [42, 31], [42, 32], [42, 33], [42, 34], [42, 35], [42, 36], [42, 37], [42, 38], [42, 39], [42, 40], [42, 41], [42, 42], [42, 43], [42, 44], [42, 45], [42, 46], [42, 47], [42, 48], [42, 49], [42, 50], [43, 0], [43, 1], [43, 2], [43, 3], [43, 4], [43, 5], [43, 6], [43, 7], [43, 8], [43, 9], [43, 10], [43, 11], [43, 12], [43, 13], [43, 14], [43, 15], [43, 16], [43, 17], [43, 18], [43, 19], [43, 20], [43, 21], [43, 22], [43, 23], [43, 24], [43, 25], [43, 26], [43, 27], [43, 28], [43, 29], [43, 30], [43, 31], [43, 32], [43, 33], [43, 34], [43, 35], [43, 36], [43, 37], [43, 38], [43, 39], [43, 40], [43, 41], [43, 42], [43, 43], [43, 44], [43, 45], [43, 46], [43, 47], [43, 48], [43, 49], [43, 50], [44, 0], [44, 1], [44, 2], [44, 3], [44, 4], [44, 5], [44, 6], [44, 7], [44, 8], [44, 9], [44, 10], [44, 11], [44, 12], [44, 13], [44, 14], [44, 15], [44, 16], [44, 17], [44, 18], [44, 19], [44, 20], [44, 21], [44, 22], [44, 23], [44, 24], [44, 25], [44, 26], [44, 27], [44, 28], [44, 29], [44, 30], [44, 31], [44, 32], [44, 33], [44, 34], [44, 35], [44, 36], [44, 37], [44, 38], [44, 39], [44, 40], [44, 41], [44, 42], [44, 43], [44, 44], [44, 45], [44, 46], [44, 47], [44, 48], [44, 49], [44, 50], [45, 0], [45, 1], [45, 2], [45, 3], [45, 4], [45, 5], [45, 6], [45, 7], [45, 8], [45, 9], [45, 10], [45, 11], [45, 12], [45, 13], [45, 14], [45, 15], [45, 16], [45, 17], [45, 18], [45, 19], [45, 20], [45, 21], [45, 22], [45, 23], [45, 24], [45, 25], [45, 26], [45, 27], [45, 28], [45, 29], [45, 30], [45, 31], [45, 32], [45, 33], [45, 34], [45, 35], [45, 36], [45, 37], [45, 38], [45, 39], [45, 40], [45, 41], [45, 42], [45, 43], [45, 44], [45, 45], [45, 46], [45, 47], [45, 48], [45, 49], [45, 50], [46, 0], [46, 1], [46, 2], [46, 3], [46, 4], [46, 5], [46, 6], [46, 7], [46, 8], [46, 9], [46, 10], [46, 11], [46, 12], [46, 13], [46, 14], [46, 15], [46, 16], [46, 17], [46, 18], [46, 19], [46, 20], [46, 21], [46, 22], [46, 23], [46, 24], [46, 25], [46, 26], [46, 27], [46, 28], [46, 29], [46, 30], [46, 31], [46, 32], [46, 33], [46, 34], [46, 35], [46, 36], [46, 37], [46, 38], [46, 39], [46, 40], [46, 41], [46, 42], [46, 43], [46, 44], [46, 45], [46, 46], [46, 47], [46, 48], [46, 49], [46, 50], [47, 0], [47, 1], [47, 2], [47, 3], [47, 4], [47, 5], [47, 6], [47, 7], [47, 8], [47, 9], [47, 10], [47, 11], [47, 12], [47, 13], [47, 14], [47, 15], [47, 16], [47, 17], [47, 18], [47, 19], [47, 20], [47, 21], [47, 22], [47, 23], [47, 24], [47, 25], [47, 26], [47, 27], [47, 28], [47, 29], [47, 30], [47, 31], [47, 32], [47, 33], [47, 34], [47, 35], [47, 36], [47, 37], [47, 38], [47, 39], [47, 40], [47, 41], [47, 42], [47, 43], [47, 44], [47, 45], [47, 46], [47, 47], [47, 48], [47, 49], [47, 50], [48, 0], [48, 1], [48, 2], [48, 3], [48, 4], [48, 5], [48, 6], [48, 7], [48, 8], [48, 9], [48, 10], [48, 11], [48, 12], [48, 13], [48, 14], [48, 15], [48, 16], [48, 17], [48, 18], [48, 19], [48, 20], [48, 21], [48, 22], [48, 23], [48, 24], [48, 25], [48, 26], [48, 27], [48, 28], [48, 29], [48, 30], [48, 31], [48, 32], [48, 33], [48, 34], [48, 35], [48, 36], [48, 37], [48, 38], [48, 39], [48, 40], [48, 41], [48, 42], [48, 43], [48, 44], [48, 45], [48, 46], [48, 47], [48, 48], [48, 49], [48, 50], [49, 0], [49, 1], [49, 2], [49, 3], [49, 4], [49, 5], [49, 6], [49, 7], [49, 8], [49, 9], [49, 10], [49, 11], [49, 12], [49, 13], [49, 14], [49, 15], [49, 16], [49, 17], [49, 18], [49, 19], [49, 20], [49, 21], [49, 22], [49, 23], [49, 24], [49, 25], [49, 26], [49, 27], [49, 28], [49, 29], [49, 30], [49, 31], [49, 32], [49, 33], [49, 34], [49, 35], [49, 36], [49, 37], [49, 38], [49, 39], [49, 40], [49, 41], [49, 42], [49, 43], [49, 44], [49, 45], [49, 46], [49, 47], [49, 48], [49, 49], [49, 50], [50, 0], [50, 1], [50, 2], [50, 3], [50, 4], [50, 5], [50, 6], [50, 7], [50, 8], [50, 9], [50, 10], [50, 11], [50, 12], [50, 13], [50, 14], [50, 15], [50, 16], [50, 17], [50, 18], [50, 19], [50, 20], [50, 21], [50, 22], [50, 23], [50, 24], [50, 25], [50, 26], [50, 27], [50, 28], [50, 29], [50, 30], [50, 31], [50, 32], [50, 33], [50, 34], [50, 35], [50, 36], [50, 37], [50, 38], [50, 39], [50, 40], [50, 41], [50, 42], [50, 43], [50, 44], [50, 45], [50, 46], [50, 47], [50, 48], [50, 49], [50, 50]]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coeffs = (-50..50).to_a.product((0..50).to_a);" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 2, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 2, 0, 0, 0, 2, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 16, 0, 1, 0, 0, 0, 22, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 2, 0, 2, 0, 0, 0, 1, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 15, 0, 0, 0, 0, 0, 21, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 2, 0, 3, 0, 0, 0, 8, 0, 2, 0, 0, 0, 14, 0, 0, 0, 0, 0, 20, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 2, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 2, 0, 0, 0, 7, 0, 1, 0, 0, 0, 13, 0, 1, 0, 0, 0, 19, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 43, 0, 0, 0, 0, 0, 1, 1, 0, 2, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 4, 0, 6, 0, 0, 0, 1, 0, 12, 0, 0, 0, 1, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 42, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 3, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 3, 0, 5, 0, 2, 0, 0, 0, 11, 0, 2, 0, 0, 0, 17, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 41, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 2, 0, 4, 0, 1, 0, 0, 0, 10, 0, 1, 0, 0, 0, 16, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 40, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 3, 0, 1, 0, 3, 0, 0, 0, 1, 0, 9, 0, 0, 0, 1, 0, 15, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 39, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 5, 0, 2, 0, 0, 0, 2, 0, 2, 0, 0, 0, 8, 0, 1, 0, 0, 0, 14, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 1, 0, 0, 0, 38, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 2, 0, 3, 0, 1, 0, 0, 0, 4, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 13, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 2, 0, 1, 0, 5, 0, 0, 0, 1, 0, 2, 0, 0, 0, 1, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 12, 0, 0, 0, 1, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 4, 0, 2, 0, 0, 0, 5, 0, 1, 0, 0, 0, 4, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 1, 0, 0, 0, 11, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 2, 0, 2, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 3, 0, 1, 0, 6, 0, 0, 0, 1, 0, 11, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 3, 0, 1, 0, 0, 0, 2, 0, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 5, 0, 0, 0, 0, 0, 10, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 2, 0, 1, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 15, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 1, 0, 0, 0, 9, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 6, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 14, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 2, 0, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 3, 0, 2, 0, 0, 0, 17, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 2, 0, 4, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 4, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 16, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 3, 0, 1, 0, 1, 0, 0, 0, 1, 0, 12, 0, 0, 0, 1, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 2, 0, 0, 0, 4, 0, 2, 0, 0, 0, 5, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 11, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 4, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 3, 0, 1, 0, 2, 0, 0, 0, 1, 0, 3, 0, 0, 0, 1, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 3, 0, 2, 0, 0, 0, 2, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 2, 0, 3, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 6, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 2, 0, 1, 0, 3, 0, 0, 0, 1, 0, 2, 0, 0, 0, 1, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 2, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 5, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 4, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 2, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 4, 0, 0, 0, 1, 0, 4, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 3, 0, 1, 0, 0, 0, 3, 0, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 2, 0, 1, 0, 1, 0, 0, 0, 6, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0]" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coeffs.map {|a, b| count_primes(primes, a, b)}" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[-5, 47]" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coeffs.max_by {|a, b| count_primes(primes, a, b)}" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "43" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "count_primes(primes, -5, 47)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0: 47 true\n", + "1: 43 true\n", + "2: 41 true\n", + "3: 41 true\n", + "4: 43 true\n", + "5: 47 true\n", + "6: 53 true\n", + "7: 61 true\n", + "8: 71 true\n", + "9: 83 true\n", + "10: 97 true\n", + "11: 113 true\n", + "12: 131 true\n", + "13: 151 true\n", + "14: 173 true\n", + "15: 197 true\n", + "16: 223 true\n", + "17: 251 true\n", + "18: 281 true\n", + "19: 313 true\n", + "20: 347 true\n", + "21: 383 true\n", + "22: 421 true\n", + "23: 461 true\n", + "24: 503 true\n", + "25: 547 true\n", + "26: 593 true\n", + "27: 641 true\n", + "28: 691 true\n", + "29: 743 true\n", + "30: 797 true\n", + "31: 853 true\n", + "32: 911 true\n", + "33: 971 true\n", + "34: 1033 true\n", + "35: 1097 true\n", + "36: 1163 true\n", + "37: 1231 true\n", + "38: 1301 true\n", + "39: 1373 true\n", + "40: 1447 true\n", + "41: 1523 true\n", + "42: 1601 true\n", + "43: 1681 false\n", + "44: 1763 false\n" + ] + }, + { + "data": { + "text/plain": [ + "45" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "45.times do |i|\n", + " puts(\"#{i}: #{i**2 - 5 * i + 47} #{primes.include? i**2 - 5 * i + 47}\")\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-61, 971 : -59231\n" + ] + } + ], + "source": [ + "coeffs = (-999..999).to_a.product((0..1000).to_a)\n", + "am, bm = coeffs.max_by {|a, b| count_primes(primes, a, b)}\n", + "puts \"#{am}, #{bm} : #{am * bm}\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Ruby 2.4.0", + "language": "ruby", + "name": "ruby" + }, + "language_info": { + "file_extension": ".rb", + "mimetype": "application/x-ruby", + "name": "ruby", + "version": "2.4.0" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/euler67-triangle.txt b/euler67-triangle.txt new file mode 100644 index 0000000..00f98e3 --- /dev/null +++ b/euler67-triangle.txt @@ -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 diff --git a/euler67.rb b/euler67.rb new file mode 100644 index 0000000..50a55fb --- /dev/null +++ b/euler67.rb @@ -0,0 +1,26 @@ +require 'logger' + +$triangle = File.readlines('euler67-triangle.txt').map {|line| line.chomp.split.map {|s| s.to_i}} + +def find_best(triangle) + log = Logger.new(STDERR) + log.level = Logger::WARN + last_line_totals = [0] + this_line_totals = [] + triangle.each do |line| + log.info {"Checking line #{line}"} + this_line_totals = [] + line.each_index do |i| + this_line_totals << [i == 0 ? 0 : last_line_totals[i-1] + line[i], + i == last_line_totals.length ? 0 : last_line_totals[i] + line[i]].max + end + log.info {"Best totals for line #{line} are #{this_line_totals}"} + last_line_totals = this_line_totals + end + log.close + this_line_totals.max +end + +if __FILE__==$0 + puts find_best $triangle +end diff --git a/euler7.rb b/euler7.rb new file mode 100644 index 0000000..f8ed868 --- /dev/null +++ b/euler7.rb @@ -0,0 +1,15 @@ +primes = Array.new + +2.upto 2000000 do |i| + primes << i +end + +n = 0 +while primes[n] ** 2 <= primes[-1] + + primes.reject! {|i| i % primes[n] == 0 and i > primes[n]} + n = n+1 +end + +puts "found#{primes.length} primes" +puts "100th prime is #{primes[99]}" diff --git a/fibonacci.rb b/fibonacci.rb new file mode 100644 index 0000000..d2c55c3 --- /dev/null +++ b/fibonacci.rb @@ -0,0 +1,22 @@ +class Integer + # Return the self'th Fibonacci number + def fibonacci_slow + return self if self <= 1 + return 1 if self == 2 + f2 = 0 # the n-2th term + f1 = 1 # the n-1th term + f0 = 1 + 3.upto(self) do |i| + f0, f1, f2 = f0 + f1, f0, f1 + end + f0 + end + + @@fibonacci_cache = {0 => 0, 1 => 1, 2 => 1} + def fibonacci + unless @@fibonacci_cache.has_key?(self) + @@fibonacci_cache[self] = ((self - 2).fibonacci + (self - 1).fibonacci) + end + @@fibonacci_cache[self] + end +end diff --git a/primes.rb b/primes.rb new file mode 100644 index 0000000..0febe80 --- /dev/null +++ b/primes.rb @@ -0,0 +1,100 @@ +# A faster Prime number library + +# To use: +# require 'primes.rb' +# primes = Primes.instance +# primes.take(20) # returns the first 20 primes +# primes[10000] # returns the 10,001st prime + +require 'singleton' + +class Primes + include Enumerable + + attr_accessor :mod_candidates + + include Singleton + + def initialize(sieve_limit = 10000) + # @primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] + @primes = sieve sieve_limit + @cache_up_to = 30 + @mod_candidates = ((1..@cache_up_to).collect {|x| x}).select {|x| [2, 3, 5].all? {|p| x % p != 0}} + end + + def primes + @primes.dup + end + + def next_prime + candidate = next_candidate(@primes[-1]) + while @primes.any? {|i| candidate % i == 0 } + candidate = next_candidate(candidate) + end + candidate + end + + def each &block + i = 0 + while true do + add_next_prime! if i >= @primes.length + block.call @primes[i] + i += 1 + end + end + + def next_candidate(candidate) + c_increments = @mod_candidates.select {|c| c > candidate % @cache_up_to} + if c_increments.empty? + next_candidate = (candidate.div(@cache_up_to) + 1) * @cache_up_to + @mod_candidates[0] + else + next_candidate = candidate.div(@cache_up_to) * @cache_up_to + c_increments.first + end + next_candidate + end + + def add_next_prime! + @primes.push next_prime + end + + # No longer needed: use Enumerable#take_while instead +# def primes_until +# add_next_prime! while not yield(@primes) +# @primes +# end + + # the nth prime + def [](n) + if @primes.length <= n + (n - @primes.length + 1).times { add_next_prime! } + # primes_until {|ps| ps.length > n} + end + @primes[n] + end + + # Perform sieve of Eratosthenes + # Algorithm courtesy of Marc Seeger at http://blog.marc-seeger.de/2010/12/05/prime-numbers-in-ruby/ + def sieve(limit = 10000) + candidates = [nil, nil] + (2..limit).to_a + stop_at = Math.sqrt(limit).floor + candidates.each do |p| + # jump over nils + next unless p + # stop if we're too high already + break if p > stop_at + # remove all multiples of this number + (p*p).step(limit, p){ |m| candidates[m] = nil} + end + #remove unwanted nils + candidates.compact + end + + def include?(n) + while n >= @primes.max + add_next_prime! + end + @primes.include?(n) + end + +end + -- 2.34.1