require 'prime'

class GingaPrime
  attr_reader :list

  def initialize
    ga = '101000000100'.to_i
    nn = '010100101001'.to_i
    gi = '000011010000'.to_i
    ma = '000000000010'.to_i

    @list = (1..9).to_a.product(1.step(9, 2).to_a, (0..9).to_a, (0..9).to_a).
              select { |vars| (vars.size - vars.uniq.size).zero? }.
              map { |a, b, c, d| ga * a + nn * b + gi * c + ma * d }.
              select { |n| n.prime? }
  end
end

if __FILE__ == $0
  gp = GingaPrime.new
  puts gp.list
  puts "There are #{gp.list.size} ginga primes."
  puts "Max is #{gp.list.max}."
  puts "Min is #{gp.list.min}"
end
