Advertisement
Guest User

Untitled

a guest
Dec 13th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.85 KB | None | 0 0
  1. class MathUtils
  2.  
  3.   def initialize
  4.     @result = nil
  5.     @necessary_primes = nil
  6.   end
  7.  
  8.   def generate_sums(number, min_parcels = 2, max_parcels = Float::INFINITY, result_file = 'results.txt', &block)
  9.     @result = File.open(result_file, 'w+')
  10.     @block = block
  11.     _partial = [number, 1]
  12.     _generate_sums(_partial, 0, number, number, min_parcels, max_parcels)
  13.   end
  14.  
  15.   def generate_prime_sums(number, min_parcels = 2, max_parcels = Float::INFINITY, result_file = 'results.txt')
  16.     @necessary_primes = []
  17.  
  18.     primes_from_file = File.foreach('primes.txt').map(&:to_i)
  19.  
  20.     primes_from_file.each do |p|
  21.       @necessary_primes << p if p <= number
  22.     end
  23.  
  24.     primes_from_file = nil
  25.  
  26.     @necessary_primes.freeze
  27.  
  28.     generate_sums(number, min_parcels, max_parcels, result_file) do |result|
  29.       (result - @necessary_primes).empty?
  30.     end
  31.  
  32.   end
  33.  
  34.   private
  35.  
  36.   def _generate_sums(_partial, index, number, target, min_parcels, max_parcels)
  37.     return if target < 0
  38.  
  39.  
  40.     return if index > max_parcels
  41.  
  42.     # imprime um resultado válido
  43.     if target == 0 && index >= min_parcels
  44.       if @block
  45.         if @block.call(_partial[0,index])
  46.           @result.puts _partial[0,index].inspect
  47.         end
  48.       else
  49.         @result.puts _partial[0,index].inspect
  50.       end
  51.     end
  52.  
  53.  
  54.     index == 0 ? prev = 1 : prev = _partial[index -1]
  55.  
  56.     k = prev
  57.  
  58.     while( k <= number)
  59.       _partial[index] = k
  60.       _generate_sums(_partial, index+1, number, target - k, min_parcels, max_parcels)
  61.       k+=1
  62.     end
  63.  
  64.   end
  65. end
  66.  
  67. # 18, 131, 138, 366
  68.  
  69.  
  70. n=131
  71. min_p = 4
  72. max_p = 4
  73.  
  74.  
  75.  
  76. m = MathUtils.new
  77.  
  78. PRIMES_29 = File.foreach('primes.txt').first(29).map(&:to_i)
  79.  
  80.  
  81.  
  82. # m.generate_prime_sums(n, min_p, max_p, '131_sums_primes_7x7')
  83. m.generate_sums(n, min_p, max_p, '131_sums_primes_4x4') do |result|
  84.   (result - PRIMES_29).empty?
  85. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement