Решение на Трета задача от Виктор Божилов

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

Към профила на Виктор Божилов

Резултати

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

Код

class RationalSequence
include Enumerable
def initialize(length_of_sequence)
@length_of_sequence = length_of_sequence
end
def next_numerator(numerator, denominator)
if (numerator == 1 and denominator % 2 == 0)
return numerator
elsif ((numerator + denominator) % 2 == 0)
return numerator + 1
else
return numerator -1
end
end
def next_denominator(numerator, denominator)
if (denominator == 1 and numerator % 2 == 1)
return denominator
elsif ((numerator + denominator) % 2 == 1)
return denominator + 1
else
return denominator - 1
end
end
def not_reducible?(numerator, denominator)
fold = 2
while fold <= [numerator, denominator].min
if(numerator % fold == 0 and denominator % fold == 0)
return nil
end
fold += 1
end
return true
end
def each
rational_numbers_found = 0
numerator = 1
denominator = 1
while rational_numbers_found < @length_of_sequence do
if(not_reducible?(numerator, denominator))
yield Rational(numerator, denominator)
rational_numbers_found += 1
end
numerator, denominator = next_numerator(numerator, denominator),
next_denominator(numerator, denominator)
end
end
end
class PrimeSequence
include Enumerable
def initialize(length_of_sequence)
@length_of_sequence = length_of_sequence
end
def each
prime_numbers_found = 0
current = 2
while prime_numbers_found < @length_of_sequence do
if(current.prime?)
yield current
prime_numbers_found +=1
end
current += 1
end
end
end
class FibonacciSequence
include Enumerable
def initialize (length_of_sequence, first: 0, second: 1)
@length_of_sequence = length_of_sequence
@first = first
@second = second
end
def each
current = @second
previous = @first
if(@length_of_sequence > 0)
yield previous
end
@length_of_sequence.times do
yield current
current,previous = current+previous, current
end
end
end
#class Fixnum
def prime?()
if(self <= 1)
return false
end
(2..self-1).each do |x|
if(self % x) == 0
return false
end
end
return true
end
#end
def to_rational_array(length_of_sequence)
prime_array = PrimeSequence.new(length_of_sequence).to_a
index = 0
rational_array = []
while index < prime_array.length
if prime_array[index + 1] == nil
rational_array << Rational(prime_array[index], 1)
else
rational_array << Rational(prime_array[index], prime_array[index + 1])
end
index += 2
end
rational_array.reduce(:+)
end
module Mathematician
module_function
def meaningless(number_of_rational)
RationalSequence.new(number_of_rational).
select{|x| (x.numerator).prime? or (x.denominator).prime?}.
reduce(1){|product, x| product * x} /
RationalSequence.new(number_of_rational).
select{|x| not ((x.numerator).prime? or(x.denominator).prime?)}.
reduce(1){|product, x| product * x}
end
def worthless(max_number)
slicing = 0
loop do
if(RationalSequence.new(slicing).reduce(0){|sum, x|sum + x} >
FibonacciSequence.new(max_number).max)
return RationalSequence.new(slicing-1)
end
slicing += 1
end
end
def aimless(length_of_sequence)
prime_array = PrimeSequence.new(length_of_sequence).to_a
index = 0
rational_array = []
while index < prime_array.length
if prime_array[index + 1] == nil
rational_array << Rational(prime_array[index], 1)
else
rational_array << Rational(prime_array[index], prime_array[index + 1])
end
index += 2
end
rational_array.reduce(:+)
end
end

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

....FFFF.FFFFFFFFFFF

Failures:

  1) Fifth task FibonacciSequence can return the first two Fibonacci numbers
     Failure/Error: expect(FibonacciSequence.new(2).to_a).to eq [1, 1]
       
       expected: [1, 1]
            got: [0, 1, 1]
       
       (compared using ==)
     # /tmp/d20151111-27349-r3iblt/spec.rb:26:in `block (3 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 FibonacciSequence can return the first 20 Fibonacci numbers
     Failure/Error: expect(FibonacciSequence.new(20).to_a).to eq [
       
       expected: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
            got: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
       
       (compared using ==)
     # /tmp/d20151111-27349-r3iblt/spec.rb:30:in `block (3 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)>'

  3) Fifth task FibonacciSequence can be used to calculate the Lucas numbers
     Failure/Error: expect(FibonacciSequence.new(31, first: 2, second: 1).to_a).to eq [
       
       expected: [2, 1, 3, 4, 7, 11, 18, 29, 47, 76, 123, 199, 322, 521, 843, 1364, 2207, 3571, 5778, 9349, 15127, 24476, 39603, 64079, 103682, 167761, 271443, 439204, 710647, 1149851, 1860498]
            got: [2, 1, 3, 4, 7, 11, 18, 29, 47, 76, 123, 199, 322, 521, 843, 1364, 2207, 3571, 5778, 9349, 15127, 24476, 39603, 64079, 103682, 167761, 271443, 439204, 710647, 1149851, 1860498, 3010349]
       
       (compared using ==)
     # /tmp/d20151111-27349-r3iblt/spec.rb:37:in `block (3 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)>'

  4) Fifth task FibonacciSequence is properly enumerable
     Failure/Error: expect(FibonacciSequence.new(20).select { |x| x.even? }).to eq [
       
       expected: [2, 8, 34, 144, 610, 2584]
            got: [0, 2, 8, 34, 144, 610, 2584]
       
       (compared using ==)
     # /tmp/d20151111-27349-r3iblt/spec.rb:45:in `block (3 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)>'

  5) Fifth task PrimeSequence can tell which the first two primes are
     Failure/Error: expect(PrimeSequence.new(2).to_a).to eq [2, 3]
     NoMethodError:
       private method `prime?' called for 2:Fixnum
     # /tmp/d20151111-27349-r3iblt/solution.rb:64:in `each'
     # /tmp/d20151111-27349-r3iblt/spec.rb:57:in `to_a'
     # /tmp/d20151111-27349-r3iblt/spec.rb:57:in `block (3 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)>'

  6) Fifth task PrimeSequence can tell the first 58 primes
     Failure/Error: expect(PrimeSequence.new(58).to_a).to eq [
     NoMethodError:
       private method `prime?' called for 2:Fixnum
     # /tmp/d20151111-27349-r3iblt/solution.rb:64:in `each'
     # /tmp/d20151111-27349-r3iblt/spec.rb:61:in `to_a'
     # /tmp/d20151111-27349-r3iblt/spec.rb:61:in `block (3 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)>'

  7) Fifth task DrunkenMathematician #meaningless can calculate for 0 and 1
     Failure/Error: expect(DrunkenMathematician.meaningless(0)).to eq 1
     NameError:
       uninitialized constant DrunkenMathematician
     # /tmp/d20151111-27349-r3iblt/spec.rb:73: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)>'

  8) Fifth task DrunkenMathematician #meaningless can calculate for 3
     Failure/Error: expect(DrunkenMathematician.meaningless(4)).to eq Rational(1, 3)
     NameError:
       uninitialized constant DrunkenMathematician
     # /tmp/d20151111-27349-r3iblt/spec.rb:78: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)>'

  9) Fifth task DrunkenMathematician #meaningless can calculate for 42
     Failure/Error: expect(DrunkenMathematician.meaningless(42)).to eq Rational(1, 11)
     NameError:
       uninitialized constant DrunkenMathematician
     # /tmp/d20151111-27349-r3iblt/spec.rb:82: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)>'

  10) Fifth task DrunkenMathematician #aimless can calculate for 3
     Failure/Error: expect(DrunkenMathematician.aimless(3)).to eq(Rational(2, 3) + Rational(5, 1))
     NameError:
       uninitialized constant DrunkenMathematician
     # /tmp/d20151111-27349-r3iblt/spec.rb:88: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)>'

  11) Fifth task DrunkenMathematician #aimless can calculate for 4
     Failure/Error: expect(DrunkenMathematician.aimless(4)).to eq(Rational(2, 3) + Rational(5, 7))
     NameError:
       uninitialized constant DrunkenMathematician
     # /tmp/d20151111-27349-r3iblt/spec.rb:92: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)>'

  12) Fifth task DrunkenMathematician #aimless can calculate for 42
     Failure/Error: expect(DrunkenMathematician.aimless(42)).to eq expected
     NameError:
       uninitialized constant DrunkenMathematician
     # /tmp/d20151111-27349-r3iblt/spec.rb:97: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)>'

  13) Fifth task DrunkenMathematician #worthless can calculate for 2
     Failure/Error: expect(DrunkenMathematician.worthless(2)).to eq %w(1/1).map(&:to_r)
     NameError:
       uninitialized constant DrunkenMathematician
     # /tmp/d20151111-27349-r3iblt/spec.rb:103: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)>'

  14) Fifth task DrunkenMathematician #worthless can calculate for 8
     Failure/Error: expect(DrunkenMathematician.worthless(8)).to eq expected
     NameError:
       uninitialized constant DrunkenMathematician
     # /tmp/d20151111-27349-r3iblt/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)>'

  15) Fifth task DrunkenMathematician #worthless can calculate for 15
     Failure/Error: expect(DrunkenMathematician.worthless(15)).to eq %w(
     NameError:
       uninitialized constant DrunkenMathematician
     # /tmp/d20151111-27349-r3iblt/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 0.02165 seconds
20 examples, 15 failures

Failed examples:

rspec /tmp/d20151111-27349-r3iblt/spec.rb:25 # Fifth task FibonacciSequence can return the first two Fibonacci numbers
rspec /tmp/d20151111-27349-r3iblt/spec.rb:29 # Fifth task FibonacciSequence can return the first 20 Fibonacci numbers
rspec /tmp/d20151111-27349-r3iblt/spec.rb:36 # Fifth task FibonacciSequence can be used to calculate the Lucas numbers
rspec /tmp/d20151111-27349-r3iblt/spec.rb:44 # Fifth task FibonacciSequence is properly enumerable
rspec /tmp/d20151111-27349-r3iblt/spec.rb:56 # Fifth task PrimeSequence can tell which the first two primes are
rspec /tmp/d20151111-27349-r3iblt/spec.rb:60 # Fifth task PrimeSequence can tell the first 58 primes
rspec /tmp/d20151111-27349-r3iblt/spec.rb:72 # Fifth task DrunkenMathematician #meaningless can calculate for 0 and 1
rspec /tmp/d20151111-27349-r3iblt/spec.rb:77 # Fifth task DrunkenMathematician #meaningless can calculate for 3
rspec /tmp/d20151111-27349-r3iblt/spec.rb:81 # Fifth task DrunkenMathematician #meaningless can calculate for 42
rspec /tmp/d20151111-27349-r3iblt/spec.rb:87 # Fifth task DrunkenMathematician #aimless can calculate for 3
rspec /tmp/d20151111-27349-r3iblt/spec.rb:91 # Fifth task DrunkenMathematician #aimless can calculate for 4
rspec /tmp/d20151111-27349-r3iblt/spec.rb:95 # Fifth task DrunkenMathematician #aimless can calculate for 42
rspec /tmp/d20151111-27349-r3iblt/spec.rb:102 # Fifth task DrunkenMathematician #worthless can calculate for 2
rspec /tmp/d20151111-27349-r3iblt/spec.rb:106 # Fifth task DrunkenMathematician #worthless can calculate for 8
rspec /tmp/d20151111-27349-r3iblt/spec.rb:111 # Fifth task DrunkenMathematician #worthless can calculate for 15

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

Виктор обнови решението на 26.10.2015 13:58 (преди над 8 години)

+class RationalSequence
+ include Enumerable
+ def initialize(length_of_sequence)
+ @length_of_sequence = length_of_sequence
+ end
+
+ def next_numerator(numerator, denominator)
+ if (numerator == 1 and denominator % 2 == 0)
+ return numerator
+ elsif ((numerator + denominator) % 2 == 0)
+ return numerator + 1
+ else
+ return numerator -1
+ end
+ end
+
+ def next_denominator(numerator, denominator)
+ if (denominator == 1 and numerator % 2 == 1)
+ return denominator
+ elsif ((numerator + denominator) % 2 == 1)
+ return denominator + 1
+ else
+ return denominator - 1
+ end
+ end
+
+ def not_reducible?(numerator, denominator)
+ fold = 2
+ while fold <= [numerator, denominator].min
+ if(numerator % fold == 0 and denominator % fold == 0)
+ return nil
+ end
+ fold += 1
+ end
+ return true
+ end
+
+
+ def each
+ rational_numbers_found = 0
+ numerator = 1
+ denominator = 1
+ while rational_numbers_found < @length_of_sequence do
+ if(not_reducible?(numerator, denominator))
+ yield Rational(numerator, denominator)
+ rational_numbers_found += 1
+ end
+ numerator, denominator = next_numerator(numerator, denominator),
+ next_denominator(numerator, denominator)
+ end
+ end
+end
+
+class PrimeSequence
+ include Enumerable
+ def initialize(length_of_sequence)
+ @length_of_sequence = length_of_sequence
+ end
+
+ def each
+ prime_numbers_found = 0
+ current = 2
+ while prime_numbers_found < @length_of_sequence do
+ if(current.prime?)
+ yield current
+ prime_numbers_found +=1
+ end
+ current += 1
+ end
+ end
+end
+
+class FibonacciSequence
+ include Enumerable
+ def initialize (length_of_sequence, first: 0, second: 1)
+ @length_of_sequence = length_of_sequence
+ @first = first
+ @second = second
+ end
+
+ def each
+ current = @second
+ previous = @first
+ if(@length_of_sequence > 0)
+ yield previous
+ end
+ @length_of_sequence.times do
+ yield current
+ current,previous = current+previous, current
+ end
+ end
+end
+
+#class Fixnum
+ def prime?()
+ if(self <= 1)
+ return false
+ end
+ (2..self-1).each do |x|
+ if(self % x) == 0
+ return false
+ end
+ end
+ return true
+ end
+#end
+
+
+def to_rational_array(length_of_sequence)
+ prime_array = PrimeSequence.new(length_of_sequence).to_a
+ index = 0
+ rational_array = []
+ while index < prime_array.length
+ if prime_array[index + 1] == nil
+ rational_array << Rational(prime_array[index], 1)
+ else
+ rational_array << Rational(prime_array[index], prime_array[index + 1])
+ end
+ index += 2
+ end
+ rational_array.reduce(:+)
+end
+
+
+
+module Mathematician
+ module_function
+
+
+ def meaningless(number_of_rational)
+ RationalSequence.new(number_of_rational).
+ select{|x| (x.numerator).prime? or (x.denominator).prime?}.
+ reduce(1){|product, x| product * x} /
+ RationalSequence.new(number_of_rational).
+ select{|x| not ((x.numerator).prime? or(x.denominator).prime?)}.
+ reduce(1){|product, x| product * x}
+ end
+
+ def worthless(max_number)
+ slicing = 0
+ loop do
+ if(RationalSequence.new(slicing).reduce(0){|sum, x|sum + x} >
+ FibonacciSequence.new(max_number).max)
+ return RationalSequence.new(slicing-1)
+ end
+ slicing += 1
+ end
+ end
+
+ def aimless(length_of_sequence)
+ prime_array = PrimeSequence.new(length_of_sequence).to_a
+ index = 0
+ rational_array = []
+ while index < prime_array.length
+ if prime_array[index + 1] == nil
+ rational_array << Rational(prime_array[index], 1)
+ else
+ rational_array << Rational(prime_array[index], prime_array[index + 1])
+ end
+ index += 2
+ end
+ rational_array.reduce(:+)
+end
+end
+