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

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

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

Резултати

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

Код

class Integer
def prime?
return false if self == 1
(2..Math.sqrt(self)).each do |divisor|
return false if self % divisor == 0
end
true
end
end
class RationalSequence
include Enumerable
def initialize(limit)
@limit = limit
end
def each
numerator, denominator, current = 1, 1, 0
while current < @limit
if numerator.gcd(denominator) == 1
yield Rational(numerator, denominator)
current += 1
end
flag_1 = 0
flag_2 = 0
if numerator & 1 == denominator & 1
numerator += 1
flag_1 = 1
else
denominator += 1
flag_2 = 1
end
denominator -= 1 if denominator > 1 && flag_1 > 0
numerator -= 1 if numerator > 1 && flag_2 > 0
end
end
end
class PrimeSequence
include Enumerable
def initialize(limit)
@limit = limit
end
def each
current = 0
number = 2
while current < @limit
if number.prime?
yield number
current += 1
end
number += 1
end
end
end
class FibonacciSequence
include Enumerable
def initialize(limit, first: 1, second: 1)
@limit = limit
@first = first
@second = second
end
def each
current = 0
while current < @limit
yield @first
@first, @second = @second, @first + @second
current += 1
end
end
end
module DrunkenMathematician
module_function
def meaningless(n)
sequence = RationalSequence.new(n).to_a
group_one = sequence.select { |x| x.numerator.prime? || x.denominator.prime? }
group_two = sequence.select { |x| !x.numerator.prime? && !x.denominator.prime? }
group_one.reduce(1, :*)
group_two.reduce(1, :*)
(group_one.reduce(1, :*) / group_two.reduce(1, :*))
end
def aimless(n)
return 0 if n == 0
sequence = PrimeSequence.new(n)
paired_sequence = sequence.each_slice(2).to_a
paired_sequence.last << 1 if paired_sequence.last.size == 1
# p paired_sequence
rationalized_paired_sequence = paired_sequence.map { |x| Rational(x[0], x[1]) }
rationalized_paired_sequence.reduce(:+)
end
def worthless(n)
return [] if n == 0
fibonacci_sequence = FibonacciSequence.new(n).to_a
index = 1
rational_sequence = RationalSequence.new(index).to_a
rational_sequence_sum = rational_sequence.reduce(:+)
saved_sequence = rational_sequence
while rational_sequence_sum <= fibonacci_sequence.last
saved_sequence = rational_sequence
# puts "#{rational_sequence} -> #{rational_sequence_sum} - #{fibonacci_sequence.last}"
rational_sequence = RationalSequence.new(index).to_a
rational_sequence_sum = rational_sequence.reduce(:+)
index += 1
end
# puts "#{rational_sequence} -> #{rational_sequence_sum} - #{fibonacci_sequence.last}"
saved_sequence
end
end

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

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

Finished in 0.09634 seconds
20 examples, 0 failures

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

Рали обнови решението на 26.10.2015 12:15 (преди над 8 години)

+class Integer
+ def prime?
+ return false if self == 1
+ (2..Math.sqrt(self)).each do |divisor|
+ return false if self % divisor == 0
+ end
+ true
+ end
+end
+
+class RationalSequence
+ include Enumerable
+
+ def initialize(limit)
+ @limit = limit
+ end
+
+ def each
+ numerator, denominator, current = 1, 1, 0
+ while current < @limit
+ if numerator.gcd(denominator) == 1
+ yield Rational(numerator, denominator)
+ current += 1
+ end
+
+ flag_1 = 0
+ flag_2 = 0
+ if numerator & 1 == denominator & 1
+ numerator += 1
+ flag_1 = 1
+ else
+ denominator += 1
+ flag_2 = 1
+ end
+ denominator -= 1 if denominator > 1 && flag_1 > 0
+ numerator -= 1 if numerator > 1 && flag_2 > 0
+ end
+ end
+end
+
+class PrimeSequence
+ include Enumerable
+
+ def initialize(limit)
+ @limit = limit
+ end
+
+ def each
+ current = 0
+ number = 2
+ while current < @limit
+ if number.prime?
+ yield number
+ current += 1
+ end
+ number += 1
+ end
+ end
+end
+
+class FibonacciSequence
+ include Enumerable
+
+ def initialize(limit, first: 1, second: 1)
+ @limit = limit
+ @first = first
+ @second = second
+ end
+
+ def each
+ current = 0
+ while current < @limit
+ yield @first
+ @first, @second = @second, @first + @second
+ current += 1
+ end
+ end
+end
+
+module DrunkenMathematician
+ module_function
+
+ def meaningless(n)
+ sequence = RationalSequence.new(n).to_a
+ group_one = sequence.select { |x| x.numerator.prime? || x.denominator.prime? }
+ group_two = sequence.select { |x| !x.numerator.prime? && !x.denominator.prime? }
+ group_one.reduce(1, :*)
+ group_two.reduce(1, :*)
+ (group_one.reduce(1, :*) / group_two.reduce(1, :*))
+ end
+
+ def aimless(n)
+ return 0 if n == 0
+ sequence = PrimeSequence.new(n)
+ paired_sequence = sequence.each_slice(2).to_a
+ paired_sequence.last << 1 if paired_sequence.last.size == 1
+ paired_sequence
+ rationalized_paired_sequence = paired_sequence.map { |x| Rational(x[0], x[1]) }
+ rationalized_paired_sequence.reduce(:+)
+ end
+
+ def worthless(n)
+ return [] if n == 0
+ fibonacci_sequence = FibonacciSequence.new(n).to_a
+ index = 1
+ rational_sequence = RationalSequence.new(index).to_a
+ rational_sequence_sum = rational_sequence.reduce(:+)
+ saved_sequence = rational_sequence
+ while rational_sequence_sum <= fibonacci_sequence.last
+ saved_sequence = rational_sequence
+ # puts "#{rational_sequence} -> #{rational_sequence_sum} - #{fibonacci_sequence.last}"
+ rational_sequence = RationalSequence.new(index).to_a
+ rational_sequence_sum = rational_sequence.reduce(:+)
+ index += 1
+ end
+# puts "#{rational_sequence} -> #{rational_sequence_sum} - #{fibonacci_sequence.last}"
+ saved_sequence
+ end
+end

Рали обнови решението на 26.10.2015 12:24 (преди над 8 години)

class Integer
def prime?
return false if self == 1
(2..Math.sqrt(self)).each do |divisor|
return false if self % divisor == 0
end
true
end
end
class RationalSequence
include Enumerable
def initialize(limit)
@limit = limit
end
def each
numerator, denominator, current = 1, 1, 0
while current < @limit
if numerator.gcd(denominator) == 1
yield Rational(numerator, denominator)
current += 1
end
flag_1 = 0
flag_2 = 0
if numerator & 1 == denominator & 1
numerator += 1
flag_1 = 1
else
denominator += 1
flag_2 = 1
end
denominator -= 1 if denominator > 1 && flag_1 > 0
numerator -= 1 if numerator > 1 && flag_2 > 0
end
end
end
class PrimeSequence
include Enumerable
def initialize(limit)
@limit = limit
end
def each
current = 0
number = 2
while current < @limit
if number.prime?
yield number
current += 1
end
number += 1
end
end
end
class FibonacciSequence
include Enumerable
def initialize(limit, first: 1, second: 1)
@limit = limit
@first = first
@second = second
end
def each
current = 0
while current < @limit
yield @first
@first, @second = @second, @first + @second
current += 1
end
end
end
module DrunkenMathematician
module_function
def meaningless(n)
sequence = RationalSequence.new(n).to_a
group_one = sequence.select { |x| x.numerator.prime? || x.denominator.prime? }
group_two = sequence.select { |x| !x.numerator.prime? && !x.denominator.prime? }
group_one.reduce(1, :*)
group_two.reduce(1, :*)
(group_one.reduce(1, :*) / group_two.reduce(1, :*))
end
def aimless(n)
return 0 if n == 0
sequence = PrimeSequence.new(n)
paired_sequence = sequence.each_slice(2).to_a
paired_sequence.last << 1 if paired_sequence.last.size == 1
- paired_sequence
+ # p paired_sequence
rationalized_paired_sequence = paired_sequence.map { |x| Rational(x[0], x[1]) }
rationalized_paired_sequence.reduce(:+)
end
def worthless(n)
return [] if n == 0
fibonacci_sequence = FibonacciSequence.new(n).to_a
index = 1
rational_sequence = RationalSequence.new(index).to_a
rational_sequence_sum = rational_sequence.reduce(:+)
saved_sequence = rational_sequence
while rational_sequence_sum <= fibonacci_sequence.last
saved_sequence = rational_sequence
# puts "#{rational_sequence} -> #{rational_sequence_sum} - #{fibonacci_sequence.last}"
rational_sequence = RationalSequence.new(index).to_a
rational_sequence_sum = rational_sequence.reduce(:+)
index += 1
end
# puts "#{rational_sequence} -> #{rational_sequence_sum} - #{fibonacci_sequence.last}"
saved_sequence
end
end