Иван обнови решението на 25.10.2015 20:08 (преди над 9 години)
+class Integer
+
+ def prime?
+ return false if self <= 1
+
+ root_self = Math.sqrt(self).floor
+ (2..root_self).each do |i|
+ return false if self % i == 0
+ end
+ true
+ end
+end
+
+class RationalSequence
+
+ include Enumerable
+
+ def initialize(size = 0)
+ @size = size
+ end
+
+ def each
+ numerator = denominator = limit_denominator = i = j = 1
+ size_counter = 0
+ limit_nominator = 2
+
+ while size_counter < @size
+ if (numerator.gcd denominator) == 1
+ yield Rational(numerator, denominator)
+ size_counter += 1
+ end
+
+ if numerator == limit_nominator
+ i = -i
+ limit_nominator += 2
+ end
+
+ if denominator == limit_denominator
+ j = -j
+ limit_denominator += 2
+ end
+
+ (numerator == 1 and i < 0) ? i = -i : numerator += i
+
+ (denominator == 1 and j < 0) ? j = -j : denominator += j
+ end
+ end
+end
+
+class PrimeSequence
+
+ include Enumerable
+
+ def initialize(size = 0)
+ @size = size
+ end
+
+ def each
+ current = 2
+ size_counter = 0
+
+ while size_counter < @size
+ if current.prime?
+ yield current
+ size_counter += 1
+ end
+
+ current += 1
+ end
+ end
+end
+
+class FibonacciSequence
+ include Enumerable
+
+ def initialize(size = 0, first: 1, second: 1)
+ @size = size
+ @first = first
+ @second = second
+ end
+
+ def each
+ (1..@size).each do
+ yield @first
+ @first, @second = @second, @first + @second
+ end
+ end
+end
+
+module DrunkenMathematician
+
+ module_function
+
+ def meaningless(n)
+ rationals = RationalSequence.new(n)
+ group_one, group_two = rationals.partition { |x| x.numerator.prime? or x.denominator.prime?}
+
+ group_one = [1] if group_one.length == 0
+ group_two = [1] if group_two.length == 0
+
+ group_one.reduce(:*) / group_two.reduce(:*)
+ end
+
+ def aimless(n)
+ primes = PrimeSequence.new(n).to_a
+
+ return 1.to_r if primes.length == 0
+ primes += [1] if n % 2 == 1
+
+ primes.each_slice(2).flat_map { |x| Rational(x[0], x[1])}.reduce(:+)
+ end
+
+ def worthless(n)
+ return [] if n == 0
+ nth_fib = FibonacciSequence.new(n).to_a[-1]
+
+ cut_length = (1..Float::INFINITY).detect { |i| RationalSequence.new(i).reduce(:+) > nth_fib} - 1
+
+ RationalSequence.new(cut_length).to_a
+ end
+end
Не оставяй нов ред в началото на дефиницията на клас/модул.
На места имаш проблеми със спазването на конвенциите, направи справка с ръководството за стил - основно whitespace. Не са достатъчно сериозни, за да ти отнема точка, но внимавай повече в бъдещи задачи.