Skip to content

Instantly share code, notes, and snippets.

@strukturedkaos
Created August 20, 2014 19:35
Show Gist options
  • Select an option

  • Save strukturedkaos/388efe19a6e746f63f1c to your computer and use it in GitHub Desktop.

Select an option

Save strukturedkaos/388efe19a6e746f63f1c to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
require 'prime'
class AdditiveFunctionValidator
attr_reader :limit, :prime_numbers
def initialize(limit:)
@limit = limit
end
def secret(input_integer)
input_integer
end
def prime_numbers
@prime_numbers ||= Prime.take_while {|p| p < limit }
end
def additive?(x, y)
secret(x + y) == secret(x) + secret(y)
end
def additive_for_prime_numbers?
visited = []
prime_numbers.each do |x|
prime_numbers.each do |y|
break if visited.include?(y)
return false unless additive?(x, y)
end
visited << x
end
return true
end
end
if ARGV.empty?
puts "Integer argument is required"
else
input_integer = ARGV[0].to_i
additive_function_validator = AdditiveFunctionValidator.new(limit: input_integer)
if additive_function_validator.additive_for_prime_numbers?
puts 'secret() is additive for all prime numbers under %s.' % input_integer
else
puts 'secret() is not additive for all prime numbers under %s.' % input_integer
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment