Решение на Трета задача от Денислав Първанов

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

Към профила на Денислав Първанов

Резултати

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

Код

class RationalSequence
include Enumerable
def initialize(limit)
@limit = limit
end
def new_position(old_numerator, old_denominator)
numerator, denominator = old_numerator, old_denominator
if (numerator%2 == 0 and denominator%2 == 0) or
(numerator%2 != 0 and denominator%2 != 0)
numerator +=1
denominator -=1 if denominator > 1
elsif numerator%2 == 0 or denominator%2 ==0
numerator -=1 if numerator > 1
denominator +=1
end
return numerator, denominator
end
def each
array = Array.new
numerator, denominator = 1, 1
while array.length < @limit
rational = Rational(numerator, denominator)
unless array.include?(rational)
array << rational
yield rational
end
numerator, denominator = new_position(numerator, denominator)
end
end
end
class Integer
def prime?
return false if self <= 1
Math.sqrt(self).to_i.downto(2).each {|i| return false if self % i == 0}
true
end
end
class PrimeSequence
include Enumerable
def initialize(limit)
@limit = limit
end
def each
prime_numbers = 0
current = 2
while prime_numbers < @limit
if current.prime?
yield current
prime_numbers += 1
end
current += 1
end
end
end
class PrimeSequence
include Enumerable
def initialize(limit, first: 1, second: 1)
@limit = limit
@first = first
@second = second
end
def fibonacci( n )
return @first if (0..1).include?(n)
return @second if n == 2
( fibonacci( n - 1 ) + fibonacci( n - 2 ) )
end
def each
current = 1
while current <= @limit
yield fibonacci(current)
current +=1
end
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]
     NameError:
       uninitialized constant FibonacciSequence
     # /tmp/d20151111-27349-1fkm8hl/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 [
     NameError:
       uninitialized constant FibonacciSequence
     # /tmp/d20151111-27349-1fkm8hl/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 [
     NameError:
       uninitialized constant FibonacciSequence
     # /tmp/d20151111-27349-1fkm8hl/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 [
     NameError:
       uninitialized constant FibonacciSequence
     # /tmp/d20151111-27349-1fkm8hl/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]
       
       expected: [2, 3]
            got: [1, 1]
       
       (compared using ==)
     # /tmp/d20151111-27349-1fkm8hl/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 [
     Timeout::Error:
       execution expired
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:77:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:79:in `fibonacci'
     # /tmp/d20151111-27349-1fkm8hl/solution.rb:85:in `each'
     # /tmp/d20151111-27349-1fkm8hl/spec.rb:61:in `to_a'
     # /tmp/d20151111-27349-1fkm8hl/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-1fkm8hl/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-1fkm8hl/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-1fkm8hl/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-1fkm8hl/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-1fkm8hl/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-1fkm8hl/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-1fkm8hl/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-1fkm8hl/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-1fkm8hl/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.11 seconds
20 examples, 15 failures

Failed examples:

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

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

Денислав обнови решението на 26.10.2015 15:37 (преди над 9 години)

+class RationalSequence
+ include Enumerable
+
+ def initialize(limit)
+ @limit = limit
+ end
+
+ def new_position(old_numerator, old_denominator)
+ numerator, denominator = old_numerator, old_denominator
+
+ if (numerator%2 == 0 and denominator%2 == 0) or
+ (numerator%2 != 0 and denominator%2 != 0)
+ numerator +=1
+ denominator -=1 if denominator > 1
+ elsif numerator%2 == 0 or denominator%2 ==0
+ numerator -=1 if numerator > 1
+ denominator +=1
+ end
+
+ return numerator, denominator
+ end
+
+ def each
+ array = Array.new
+ numerator, denominator = 1, 1
+
+ while array.length < @limit
+ rational = Rational(numerator, denominator)
+ unless array.include?(rational)
+ array << rational
+ yield rational
+ end
+
+ numerator, denominator = new_position(numerator, denominator)
+ end
+ end
+end

Денислав обнови решението на 26.10.2015 16:15 (преди над 9 години)

class RationalSequence
include Enumerable
def initialize(limit)
@limit = limit
end
def new_position(old_numerator, old_denominator)
numerator, denominator = old_numerator, old_denominator
if (numerator%2 == 0 and denominator%2 == 0) or
(numerator%2 != 0 and denominator%2 != 0)
numerator +=1
denominator -=1 if denominator > 1
elsif numerator%2 == 0 or denominator%2 ==0
numerator -=1 if numerator > 1
denominator +=1
end
return numerator, denominator
end
def each
array = Array.new
numerator, denominator = 1, 1
while array.length < @limit
rational = Rational(numerator, denominator)
unless array.include?(rational)
array << rational
yield rational
end
numerator, denominator = new_position(numerator, denominator)
end
end
+end
+
+class Integer
+ def prime?
+ return false if self <= 1
+ Math.sqrt(self).to_i.downto(2).each {|i| return false if self % i == 0}
+ true
+ end
+end
+
+class PrimeSequence
+ include Enumerable
+
+ def initialize(limit)
+ @limit = limit
+ end
+
+ def each
+ prime_numbers = 0
+ current = 2
+ while prime_numbers < @limit
+ if current.prime?
+ yield current
+ prime_numbers += 1
+ end
+ current += 1
+ end
+ end
end

Дениславе, не следваш конвенциите, описани в ръководството. Ще ти отнемем точки ако остане така.

Относно грешката, за която си писал във форума – че Скептик не те пуска защото си ползвал Fixnum – има вариант на решението, в което няма нужда да ползваш Fixnum :)

Денислав обнови решението на 26.10.2015 16:47 (преди над 9 години)

class RationalSequence
include Enumerable
def initialize(limit)
@limit = limit
end
def new_position(old_numerator, old_denominator)
numerator, denominator = old_numerator, old_denominator
if (numerator%2 == 0 and denominator%2 == 0) or
(numerator%2 != 0 and denominator%2 != 0)
numerator +=1
denominator -=1 if denominator > 1
elsif numerator%2 == 0 or denominator%2 ==0
numerator -=1 if numerator > 1
denominator +=1
end
return numerator, denominator
end
def each
array = Array.new
numerator, denominator = 1, 1
while array.length < @limit
rational = Rational(numerator, denominator)
unless array.include?(rational)
array << rational
yield rational
end
numerator, denominator = new_position(numerator, denominator)
end
end
end
class Integer
def prime?
return false if self <= 1
Math.sqrt(self).to_i.downto(2).each {|i| return false if self % i == 0}
true
end
end
class PrimeSequence
include Enumerable
def initialize(limit)
@limit = limit
end
def each
prime_numbers = 0
current = 2
while prime_numbers < @limit
if current.prime?
yield current
prime_numbers += 1
end
current += 1
end
end
+end
+
+class PrimeSequence
+ include Enumerable
+
+ def initialize(limit, first: 1, second: 1)
+ @limit = limit
+ @first = first
+ @second = second
+ end
+
+ def fibonacci( n )
+ return @first if (0..1).include?(n)
+ return @second if n == 2
+ ( fibonacci( n - 1 ) + fibonacci( n - 2 ) )
+ end
+
+ def each
+ current = 1
+ while current <= @limit
+ yield fibonacci(current)
+ current +=1
+ end
+ end
end