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

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

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

Резултати

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

Код

class Integer
def prime?
return false if self == 1
n = 2
while self%n!=0
n += 1
end
self == n
end
end
class RationalSequence
include Enumerable
def initialize(amount)
@amount = amount
end
def get_rationals_even(diagonal)
result = []
helper = 1
while (diagonal-helper+1)>0 and @amount > 0
if (diagonal-helper+1).gcd(helper) == 1
result << (diagonal-helper+1)/helper.to_r
@amount -= 1
end
helper += 1
end
result
end
def get_rationals_odd(diagonal)
result = []
helper = 1
while (diagonal-helper+1)>0 and @amount > 0
if helper.gcd(diagonal-helper+1) == 1
result << helper/(diagonal-helper+1).to_r
@amount -= 1
end
helper += 1
end
result
end
def each
result = []
diagonal = 1
while @amount > 0
if diagonal.even?
result = get_rationals_even(diagonal)
else
result = get_rationals_odd(diagonal)
end
result.each { |n| yield n }
diagonal += 1
end
end
end
class PrimeSequence
include Enumerable
def initialize(count)
@count = count
end
def each
counter, number = 0, 1
while counter < @count
if number.prime?
yield number
counter += 1
end
number += 1
end
end
end
class FibonacciSequence
include Enumerable
def initialize(count, first: 1, second: 1)
@count = count
@first = first
@second = second
end
def each
counter = 0
while counter < @count
yield @first
@second, @first = @second + @first, @second
counter += 1
end
end
end
module DrunkenMathematician
module_function
def meaningless(n)
return 1/1.to_r if n == 1 or n == 0
sequence_array = RationalSequence.new(n).to_a
group_one = sequence_array.select do |x|
x.numerator.prime? or x.denominator.prime?
end
group_two = sequence_array - group_one
numerator = group_one.reduce { |a, b| a * b }
denominator = group_two.reduce { |a, b| a * b }
numerator/denominator.to_r
end
module_function
def aimless(n)
return 0 if n == 0
sequence_array = PrimeSequence.new(n).to_a
if n.odd?
n += 1
sequence_array << 1
end
counter = 0
result = []
while counter<n
result << sequence_array[counter]/sequence_array[counter + 1].to_r
counter += 2
end
result.reduce { |a, b| a + b }
end
module_function
def worthless(n)
return [] if n == 0
number = FibonacciSequence.new(n).to_a.last
result = [1]
counter = 2
while result.reduce { |a, b| a + b } <= number
result = RationalSequence.new(counter).to_a
counter += 1
end
result.pop
result
end
end

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

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

Finished in 0.11444 seconds
20 examples, 0 failures

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

Борис обнови решението на 25.10.2015 21:10 (преди над 9 години)

+class Integer
+ def prime?
+ return false if self == 1
+ n = 2
+ while self%n!=0
+ n += 1
+ end
+ self == n
+ end
+end
+
+
+class RationalSequence
+ include Enumerable
+
+ def initialize(amount)
+ @amount = amount
+ end
+
+ def get_rationals_even(diagonal)
+ result = []
+ helper = 1
+ while (diagonal-helper+1)>0 and @amount > 0
+ if (diagonal-helper+1).gcd(helper) == 1
+ result << (diagonal-helper+1)/helper.to_r
+ @amount -= 1
+ end
+ helper += 1
+ end
+ result
+ end
+
+ def get_rationals_odd(diagonal)
+ result = []
+ helper = 1
+ while (diagonal-helper+1)>0 and @amount > 0
+ if helper.gcd(diagonal-helper+1) == 1
+ result << helper/(diagonal-helper+1).to_r
+ @amount -= 1
+ end
+ helper += 1
+ end
+ result
+ end
+
+ def each
+ result = []
+ diagonal = 1
+ while @amount > 0
+ if diagonal.even?
+ result = get_rationals_even(diagonal)
+ else
+ result = get_rationals_odd(diagonal)
+ end
+ result.each { |n| yield n }
+ diagonal += 1
+ end
+ end
+end
+
+class PrimeSequence
+ include Enumerable
+
+ def initialize(count)
+ @count = count
+ end
+
+ def each
+ counter, number = 0, 1
+ while counter < @count
+ if number.prime?
+ yield number
+ counter += 1
+ end
+ number += 1
+ end
+ end
+end
+
+
+class FibonacciSequence
+ include Enumerable
+
+ def initialize(count, first: 1, second: 1)
+ @count = count
+ @first = first
+ @second = second
+ end
+
+ def each
+ counter = 0
+ while counter < @count
+ yield @first
+ @second, @first = @second + @first, @second
+ counter += 1
+ end
+ end
+end
+
+
+module DrunkenMathematician
+ module_function
+
+ def meaningless(n)
+ return 1/1.to_r if n == 1 or n == 0
+ sequence_array = RationalSequence.new(n).to_a
+ group_one = sequence_array.select do |x|
+ x.numerator.prime? or x.denominator.prime?
+ end
+ group_two = sequence_array - group_one
+ numerator = group_one.reduce { |a, b| a * b }
+ denominator = group_two.reduce { |a, b| a * b }
+ numerator/denominator.to_r
+ end
+
+ module_function
+ def aimless(n)
+ return 0 if n == 0
+ sequence_array = PrimeSequence.new(n).to_a
+ if n.odd?
+ n += 1
+ sequence_array << 1
+ end
+ counter = 0
+ result = []
+ while counter<n
+ result << sequence_array[counter]/sequence_array[counter + 1].to_r
+ counter += 2
+ end
+ result.reduce { |a, b| a + b }
+ end
+
+
+ module_function
+ def worthless(n)
+ return [] if n == 0
+ number = FibonacciSequence.new(n).to_a.last
+ result = [1]
+ counter = 2
+ while result.reduce { |a, b| a + b } <= number
+ result = RationalSequence.new(counter).to_a
+ counter += 1
+ end
+ result.pop
+ result
+ end
+end