Пламен обнови решението на 24.10.2015 17:27 (преди над 9 години)
+class RationalSequence
+ include Enumerable
+
+ def initialize(sequence_length)
+ @sequence_length = sequence_length
+ end
+
+ def get_current_diagonal(element)
+ current_diagonal = 1
+ member_count = 1
+ while(element >= member_count)
+ member_count += current_diagonal
+ current_diagonal += 1
+ end
+ current_diagonal - 1
+ end
+
+ def compare_elements(first_element, second_element)
+ if first_element == second_element
+ second_element
+ else
+ return nil
+ end
+ end
+
+ def remove_doubles(elements)
+ counter = 0
+ second_counter = 1
+ doubles = []
+ for counter in 0..elements.length-1 do
+ for second_counter in counter+1..elements.length-1 do
+ doubles << compare_elements(elements[counter], elements[second_counter])
+ second_counter += 1
+ end
+ counter += 1
+ end
+ return elements - doubles.uniq
+ end
+
+ def get_diagonal_elements(diagonal)
+ numerator = 1
+ denominator = diagonal
+ elements = []
+ while denominator >= 1
+ elements << Rational(numerator,denominator)
+ numerator += 1
+ denominator = denominator - 1
+ end
+ return elements
+ end
+
+ def each
+ current = 1
+ elements = []
+ while current <= @sequence_length+1
+ if get_current_diagonal(current).even?
+ elements += get_diagonal_elements(get_current_diagonal(current)).reverse
+ else
+ elements += get_diagonal_elements(get_current_diagonal(current))
+ end
+ current = current + get_current_diagonal(current)
+ end
+ elements = remove_doubles(elements.uniq).first(@sequence_length)
+ elements.each {|elem| yield elem}
+ end
+end
+
+ def is_prime?(number)
+ counter = 2
+ dividers_found = 1
+ for counter in 2..number do
+ if number%counter == 0
+ dividers_found +=1
+ end
+ counter+=1
+ end
+ if dividers_found == 2
+ return true
+ else
+ return false
+ end
+ end
+
+class PrimeSequence
+ include Enumerable
+
+ def initialize(sequence_length)
+ @sequence_length = sequence_length
+ end
+
+ def each
+ numbers_found = 0
+ current_number = 2
+ while numbers_found < @sequence_length
+ if is_prime?(current_number)
+ numbers_found += 1
+ current_number
+ yield current_number
+ end
+ current_number += 1
+ end
+ end
+end
+
+class FibonacciSequence
+ include Enumerable
+
+ def initialize(sequence_length, first: nil, second: nil)
+ @sequence_length = sequence_length
+ if first and second
+ @first = first
+ @second = second
+ else
+ @first = 1
+ @second = 1
+ end
+ end
+
+ def each
+ current_position = 0
+ sequence = [@first, @second]
+ while current_position < @sequence_length
+ sequence[current_position+2] = sequence[current_position] + sequence[current_position+1]
+ current_position += 1
+ end
+ sequence.take(@sequence_length).each{|element| yield element}
+ end
+end
+
+module DrunkenMathematician
+ module_function
+
+ def meaningless(n)
+ alpha_group = RationalSequence.new(n)
+
+ first_group = alpha_group.find_all { |number|
+ is_prime?(number.denominator) or is_prime?(number.numerator)
+ }
+
+ second_group = alpha_group.find_all { |number|
+ not(is_prime?(number.denominator) or is_prime?(number.numerator))
+ }
+
+ first_group.empty? ? first_group[0] = Rational(1) : first_group
+ second_group.empty? ? second_group[0] = Rational(1) : second_group
+ first_group.reduce(:*) / second_group.reduce(:*)
+ end
+
+ def aimless(n)
+ sequence = PrimeSequence.new(n)
+ sum = Rational(0,1)
+ sequence.each_slice(2).to_a.each{ |element|
+ if element[1] == nil
+ sum = sum + Rational(element[0],1).to_r
+ else
+ sum = sum + Rational(element[0],element[1])
+ end
+ }
+ sum.to_r
+ end
+
+ def worthless(n)
+ if n == 0
+ return []
+ end
+ last_fibonacci = FibonacciSequence.new(n).to_a[-1]
+ found = false
+ current_sequence = 1
+ while not found
+ if RationalSequence.new(current_sequence).reduce(:+) > last_fibonacci
+ return RationalSequence.new(current_sequence-1).to_a
+ found = true
+ else
+ current_sequence += 1
+ end
+ end
+ end
+end
Имаш проблеми със спазването на конвенциите, направи справка с ръководството за стил.