Решение на Трета задача от Мила Русева

Обратно към всички решения

Към профила на Мила Русева

Резултати

  • 6 точки от тестове
  • 0 бонус точки
  • 6 точки общо
  • 20 успешни тест(а)
  • 0 неуспешни тест(а)

Код

class RationalSequence
include Enumerable
def initialize(limit)
@limit = limit
@direction = :left
@nominator = 1
@denominator = 1
@rational_numbers = []
end
def each
1.upto(@limit) do
while @rational_numbers.include?(divide) do
move
end
@rational_numbers << divide
yield divide
end
end
def move
if @denominator == 1 and @direction == :left
@nominator += 1
@direction = :right
elsif @nominator == 1 and @direction == :right
@denominator += 1
@direction = :left
elsif @direction == :right
@denominator += 1
@nominator -= 1
elsif @direction == :left
@denominator -=1
@nominator += 1
end
end
def divide
Rational(@nominator, @denominator)
end
end
class PrimeSequence
include Enumerable
def initialize(limit)
@limit = limit
end
def self.is_prime(number)
return false if number == 1
divider = 2
while number > divider do
if number % divider == 0
return false
end
divider += 1
end
return true
end
def each
found_prime_numbers = 0
current = 2
while found_prime_numbers < @limit do
if PrimeSequence.is_prime(current)
found_prime_numbers += 1
yield current
end
current += 1
end
end
end
class FibonacciSequence
include Enumerable
def initialize(limit, options = {})
@limit = limit
@first = options[:first] || 1
@second = options[:second] || 1
end
def each
current, previous = @second, @first
counter = 1
while counter <= @limit
yield previous
temp = previous
previous = current
current = current + temp
counter += 1
end
end
end
module DrunkenMathematician
module_function
def meaningless(n)
rationals = RationalSequence.new(n)
group_one = []
group_two = []
rationals.each do |rat|
if PrimeSequence.is_prime(rat.numerator) or PrimeSequence.is_prime(rat.denominator)
group_one << rat
else
group_two << rat
end
end
group_one.reduce(1, :*)/group_two.reduce(1, :*)
end
def aimless(n)
primes = PrimeSequence.new(n)
sum = 0
primes.each_slice(2) do |pair|
sum += Rational(pair[0], (pair[1] || 1))
end
sum
end
def worthless(n)
seq = RationalSequence.new(2**16)
sum = 0
result = []
fibonacci_max = FibonacciSequence.new(n).max
seq.each do |rat|
sum += rat
if sum > fibonacci_max
return result
end
result << rat
end
end
end

Лог от изпълнението

....................

Finished in 0.02022 seconds
20 examples, 0 failures

История (1 версия и 0 коментара)

Мила обнови решението на 24.10.2015 19:47 (преди над 8 години)

+class RationalSequence
+ include Enumerable
+
+
+ def initialize(limit)
+ @limit = limit
+ @direction = :left
+ @nominator = 1
+ @denominator = 1
+ @rational_numbers = []
+ end
+
+ def each
+ 1.upto(@limit) do
+ while @rational_numbers.include?(divide) do
+ move
+ end
+ @rational_numbers << divide
+ yield divide
+ end
+ end
+
+ def move
+ if @denominator == 1 and @direction == :left
+ @nominator += 1
+ @direction = :right
+ elsif @nominator == 1 and @direction == :right
+ @denominator += 1
+ @direction = :left
+ elsif @direction == :right
+ @denominator += 1
+ @nominator -= 1
+ elsif @direction == :left
+ @denominator -=1
+ @nominator += 1
+ end
+ end
+
+ def divide
+ Rational(@nominator, @denominator)
+ end
+end
+
+class PrimeSequence
+ include Enumerable
+
+ def initialize(limit)
+ @limit = limit
+ end
+
+ def self.is_prime(number)
+ return false if number == 1
+ divider = 2
+ while number > divider do
+ if number % divider == 0
+ return false
+ end
+ divider += 1
+ end
+ return true
+ end
+
+ def each
+ found_prime_numbers = 0
+ current = 2
+ while found_prime_numbers < @limit do
+ if PrimeSequence.is_prime(current)
+ found_prime_numbers += 1
+ yield current
+ end
+ current += 1
+ end
+ end
+end
+
+class FibonacciSequence
+ include Enumerable
+
+ def initialize(limit, options = {})
+ @limit = limit
+ @first = options[:first] || 1
+ @second = options[:second] || 1
+ end
+
+ def each
+ current, previous = @second, @first
+ counter = 1
+ while counter <= @limit
+ yield previous
+ temp = previous
+ previous = current
+ current = current + temp
+ counter += 1
+ end
+ end
+end
+
+module DrunkenMathematician
+ module_function
+
+ def meaningless(n)
+ rationals = RationalSequence.new(n)
+ group_one = []
+ group_two = []
+ rationals.each do |rat|
+ if PrimeSequence.is_prime(rat.numerator) or PrimeSequence.is_prime(rat.denominator)
+ group_one << rat
+ else
+ group_two << rat
+ end
+ end
+ group_one.reduce(1, :*)/group_two.reduce(1, :*)
+ end
+
+ def aimless(n)
+ primes = PrimeSequence.new(n)
+ sum = 0
+ primes.each_slice(2) do |pair|
+ sum += Rational(pair[0], (pair[1] || 1))
+ end
+ sum
+ end
+
+ def worthless(n)
+ seq = RationalSequence.new(2**16)
+ sum = 0
+ result = []
+ fibonacci_max = FibonacciSequence.new(n).max
+ seq.each do |rat|
+ sum += rat
+ if sum > fibonacci_max
+ return result
+ end
+ result << rat
+ end
+ end
+end