Sha256: c09db56441c92495c4fca36e6d44bf860582f19fb4904924d5ef871e54e90a44

Contents?: true

Size: 906 Bytes

Versions: 5

Compression:

Stored size: 906 Bytes

Contents

# coding: utf-8
class Integer

  # A dihedral prime is a prime number that appears as itself or another prime
  # when rendered on a seven-segment display of a calculator and... 
  #
  # * Rotated 180°.  
  # * Mirrored.  
  # * Rotated 180° and mirrored.
  #
  # For example, 120121 is a dihedral prime. It is 121021 when rotated,
  # 151051 (another prime) when mirrored, and 150151 when rotated and
  # mirrored.
  #
  # Returns true if self is a dihedral prime; false otherwise.
  #
  #     101.dihedral_prime?  #=> true
  #     181.dihedral_prime?  #=> true
  #     7.dihedral_prime?    #=> false
  #
  def dihedral_prime?
    return false unless prime? and to_s.match(/^[01825]+$/)
    mirror = ->(n){ n.to_s.gsub(/([25])/){|orig| orig == '2' ? '5' : '2'}.to_i }
    [upside_down, mirror[self], mirror[upside_down]].all?(&:prime?)
  end

  private
  def upside_down
    to_s.reverse.to_i
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
numb-0.111.0 lib/numb/dihedral_prime.rb
numb-0.109.0 lib/numb/dihedral_prime.rb
numb-0.99.0 lib/numb/dihedral_prime.rb
numb-0.96.0 lib/numb/dihedral_prime.rb
numb-0.89.0 lib/numb/dihedral_prime.rb