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

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

Към профила на Ивайло Чернев

Резултати

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

Код

class Integer
def prime?
n = self
n == 1? false : 2.upto(n - 1).all? { |a| n.remainder(a).nonzero? }
end
end
class RationalSequence
include Enumerable
def initialize(size)
@size = size
end
def each
sum, used, a, b, add = 2, Array.new, 1, 1, 1
while used.length < @size
if !(used.include? Rational(a,b)) then
yield Rational(a, b)
used.push Rational(a, b)
end
a = a + add
b = sum - a
if a == sum then
b, add, sum = 1, -1, sum + 1
elsif a == 0 then
a, add, sum = 1, 1, sum + 1
end
end
end
end
class PrimeSequence
include Enumerable
def initialize(size)
@size = size
end
def each
added, number = 0, 2
while added < @size
if number.prime?
yield number
added = added + 1
end
number = number + 1
end
end
end
class FibonacciSequence
include Enumerable
def initialize(size, first: 1, second: 1)
@size = size
@first = first
@second = second
end
def each
first, second = @first, @second
(1..@size).each do
yield first
first, second = second, first + second
end
end
end
module DrunkenMathematician
module_function
def meaningless(count)
numbers = RationalSequence.new(count).to_a
first_group = numbers.select { |r| r.numerator.prime? or r.denominator.prime?}
second_group = numbers - first_group
first_group << 1
second_group << 1
first_group.inject(:*) / second_group.inject(:*)
end
def aimless(count)
return 0 if count == 0
numbers = PrimeSequence.new(count).to_a
numbers << 1 if count.odd?
numbers.each_slice(2).to_a.map { |a| Rational a[0], a[1] }.inject(:+)
end
def worthless(n)
fibonacci_number = FibonacciSequence.new(n+1).to_a.last
rational_numbers = []
count = 1
while true
new_rational_sequence = RationalSequence.new(count).to_a
sum = new_rational_sequence.inject(:+)
if sum <= fibonacci_number then
rational_numbers = new_rational_sequence
else
return rational_numbers
end
count = count + 1
end
end
end

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

..................FF

Failures:

  1) Fifth task DrunkenMathematician #worthless can calculate for 8
     Failure/Error: expect(DrunkenMathematician.worthless(8)).to eq expected
       
       expected: [(1/1), (2/1), (1/2), (1/3), (3/1), (4/1), (3/2), (2/3), (1/4), (1/5), (5/1)]
            got: [(1/1), (2/1), (1/2), (1/3), (3/1), (4/1), (3/2), (2/3), (1/4), (1/5), (5/1), (6/1), (5/2), (4/3), (3/4), (2/5), (1/6), (1/7), (3/5), (5/3)]
       
       (compared using ==)
     # /tmp/d20151111-27349-cddr0p/spec.rb:108:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  2) Fifth task DrunkenMathematician #worthless can calculate for 15
     Failure/Error: expect(DrunkenMathematician.worthless(15)).to eq %w(
     Timeout::Error:
       execution expired
     # /tmp/d20151111-27349-cddr0p/solution.rb:17:in `include?'
     # /tmp/d20151111-27349-cddr0p/solution.rb:17:in `each'
     # /tmp/d20151111-27349-cddr0p/solution.rb:92:in `to_a'
     # /tmp/d20151111-27349-cddr0p/solution.rb:92:in `worthless'
     # /tmp/d20151111-27349-cddr0p/spec.rb:112:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

Finished in 1.1 seconds
20 examples, 2 failures

Failed examples:

rspec /tmp/d20151111-27349-cddr0p/spec.rb:106 # Fifth task DrunkenMathematician #worthless can calculate for 8
rspec /tmp/d20151111-27349-cddr0p/spec.rb:111 # Fifth task DrunkenMathematician #worthless can calculate for 15

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

Ивайло обнови решението на 26.10.2015 03:29 (преди над 8 години)

+class RationalSequence
+ include Enumerable
+ def initialize(size)
+ @size = size
+ end
+
+ def each
+ sum, used, a, b, add = 2, Array.new, 1, 1, 1
+ while used.length < @size
+ if !(used.include? Rational(a,b)) then
+ yield Rational(a,b)
+ used.push Rational(a,b)
+ end
+ a = a + add
+ b = sum - a
+ if a == sum then
+ b, add, sum = 1, -1, sum + 1
+ elsif a == 0 then
+ a, add, sum = 1, 1, sum + 1
+ end
+ end
+ end
+end
+
+class PrimeSequence
+ include Enumerable
+
+ def initialize(size)
+ @size = size
+ end
+ def each
+ added, number = 0, 2
+ while added < @size
+ if prime? number
+ yield number
+ added = added + 1
+ end
+ number = number + 1
+ end
+ end
+
+ def prime?(n)
+ n == 1? false : 2.upto(n-1).all? { |a| n.remainder(a).nonzero? }
+ end
+
+end
+
+class FibonacciSequence
+ include Enumerable
+
+ def initialize(size, first: 1, second: 1)
+ @size = size
+ @first = first
+ @second = second
+ end
+
+ def each
+ first, second = @first, @second
+ (1..@size).each do
+ yield first
+ first, second = second, first + second
+ end
+ end
+end
+
+module DrunkenMathematician
+ module_function
+
+ def meaningless(count)
+ numbers = RationalSequence.new(count).to_a
+ first_group = numbers.select { |r| prime?(r.numerator) or prime?(r.denominator)}
+ second_group = numbers - first_group
+ first_group << 1
+ second_group << 1
+ first_group.inject(:*) / second_group.inject(:*)
+ end
+
+ def aimless(count)
+ return 0 if count == 0
+ numbers = PrimeSequence.new(count).to_a
+ numbers << 1 if count.odd?
+ numbers.each_slice(2).to_a.map { |a| Rational a[0], a[1] }.inject(:+)
+ end
+
+ def worthless(n)
+ fibonacci_number = FibonacciSequence.new(n+1).to_a.last
+ rational_numbers = []
+ count = 1
+ while true
+ new_rational_sequence = RationalSequence.new(count).to_a
+ sum = new_rational_sequence.inject(:+)
+ if sum <= fibonacci_number then
+ rational_numbers = new_rational_sequence
+ else
+ return rational_numbers
+ end
+ count = count + 1
+ end
+ end
+
+ def prime?(n)
+ n == 1? false : 2.upto(n-1).all? { |a| n.remainder(a).nonzero? }
+ end
+end

Ивайло обнови решението на 26.10.2015 13:45 (преди над 8 години)

+class Integer
+ def prime?
+ n = self
+ n == 1? false : 2.upto(n - 1).all? { |a| n.remainder(a).nonzero? }
+ end
+end
+
class RationalSequence
include Enumerable
def initialize(size)
@size = size
end
def each
sum, used, a, b, add = 2, Array.new, 1, 1, 1
while used.length < @size
if !(used.include? Rational(a,b)) then
- yield Rational(a,b)
- used.push Rational(a,b)
+ yield Rational(a, b)
+ used.push Rational(a, b)
end
a = a + add
b = sum - a
if a == sum then
b, add, sum = 1, -1, sum + 1
elsif a == 0 then
a, add, sum = 1, 1, sum + 1
end
end
end
end
class PrimeSequence
include Enumerable
def initialize(size)
@size = size
end
def each
added, number = 0, 2
while added < @size
- if prime? number
+ if number.prime?
yield number
added = added + 1
end
number = number + 1
end
end
-
- def prime?(n)
- n == 1? false : 2.upto(n-1).all? { |a| n.remainder(a).nonzero? }
- end
-
end
class FibonacciSequence
include Enumerable
def initialize(size, first: 1, second: 1)
@size = size
@first = first
@second = second
end
def each
first, second = @first, @second
(1..@size).each do
yield first
first, second = second, first + second
end
end
end
module DrunkenMathematician
module_function
def meaningless(count)
numbers = RationalSequence.new(count).to_a
- first_group = numbers.select { |r| prime?(r.numerator) or prime?(r.denominator)}
+ first_group = numbers.select { |r| r.numerator.prime? or r.denominator.prime?}
second_group = numbers - first_group
first_group << 1
second_group << 1
first_group.inject(:*) / second_group.inject(:*)
end
def aimless(count)
return 0 if count == 0
numbers = PrimeSequence.new(count).to_a
numbers << 1 if count.odd?
numbers.each_slice(2).to_a.map { |a| Rational a[0], a[1] }.inject(:+)
end
def worthless(n)
fibonacci_number = FibonacciSequence.new(n+1).to_a.last
rational_numbers = []
count = 1
while true
new_rational_sequence = RationalSequence.new(count).to_a
sum = new_rational_sequence.inject(:+)
if sum <= fibonacci_number then
rational_numbers = new_rational_sequence
else
return rational_numbers
end
count = count + 1
end
- end
-
- def prime?(n)
- n == 1? false : 2.upto(n-1).all? { |a| n.remainder(a).nonzero? }
end
end