kuboon
3/7/2018 - 8:43 AM

napzack.rb

require 'prime'

# backport ruby 2.4
class Array
  def sum(identity = 0, &block)
    if block_given?
      map(&block).sum(identity)
    else
      inject { |sum, element| sum + element } || identity
    end
  end
end

require 'prime'

def prime_array(range)
  Prime.each.lazy.drop_while{|n| n < range.begin}.take_while{|n| n <= range.end}.force
end

def napzack(array, capacity)
  min = capacity / array.last
  6.upto(array.length) do |n|
    puts n
    array.combination(n) do |set|
      return set if set.sum == capacity
    end
  end
end

a = prime_array(2..1000)
puts napzack(a, 4096)


def prime_array(range)
  Prime.each.lazy.drop_while{|n| n < range.begin}.take_while{|n| n <= range.end}.force
end

def napzack(array, capacity)
  min = capacity / array.last
  6.upto(array.length) do |n|
    puts n
    array.combination(n) do |set|
      return set if set.sum == capacity
    end
  end
end

a = prime_array(2..1000)
puts napzack(a, 4096)