Решение на Трета задача от Николай Станев

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

Към профила на Николай Станев

Резултати

  • 4 точки от тестове
  • 1 отнета точка
  • 3 точки общо
  • 14 успешни тест(а)
  • 6 неуспешни тест(а)

Код

class RationalSequence
def initialize(count)
@iterator = 1
@rational_numbers = Array.new
@numerator = 2
@denominator = 1
@state = true
if count > 0 then @rational_numbers.push(Rational(1, 1)) end
while @iterator < count
if @state
decrease
else
increase
end
end
end
def decrease
unless @rational_numbers.include?(Rational(@numerator , @denominator))
@rational_numbers.push(Rational(@numerator , @denominator))
@iterator += 1
end
if @numerator == 1
@denominator += 1
@state = false
return
end
@numerator -= 1
@denominator += 1
end
def increase
unless @rational_numbers.include?(Rational(@numerator , @denominator))
@rational_numbers.push(Rational(@numerator , @denominator))
@iterator += 1
end
if @denominator == 1
@numerator += 1
@state = true
return
end
@denominator -= 1
@numerator += 1
end
def sum
sum = Rational(0, 1)
@rational_numbers.each { |number| sum += number}
sum
end
def to_a
@rational_numbers.dup
end
end
class FibonacciSequence
def initialize(count, *arguments)
if arguments.size > 0
@first = arguments[0][:first]
@second = arguments[0][:second]
else
@first = 1
@second = 1
end
@fibonacci_numbers = [@first, @second]
if count < 2 then @fibonacci_numbers.pop(2 - count) end
for iterator in 2..count-1
@fibonacci_numbers.push(@first + @second)
temp = @first
@first = @second
@second = temp + @second
end
end
def to_a
@fibonacci_numbers.dup
end
end
class PrimeSequence
require 'prime'
def initialize(count)
@prime_numbers = Array.new
iterator = 0
current_number = 1
while iterator < count
if Prime.prime?(current_number)
@prime_numbers.push(current_number)
iterator+=1
end
current_number+=1
end
end
def to_a
@prime_numbers.dup
end
end
module DrunkenMathematician
module_function
def meaningless(n)
require 'prime'
group_prime = Rational(1, 1)
group_even = Rational(1, 1)
RationalSequence.new(n).to_a.each do |number|
if Prime.prime?(number.numerator) and Prime.prime?(number.denominator)
group_prime *= number
else
group_even *= number
end
end
group_prime / group_even
end
def aimless(n)
sum = Rational(0, 1)
prime_numbers = PrimeSequence.new(n).to_a
if n % 2 == 1 then prime_numbers.push(1) end
iterator = 0
while iterator < prime_numbers.size-1
sum += Rational(prime_numbers[iterator], prime_numbers[iterator + 1])
iterator += 2
end
sum
end
def worthless(n)
if n == 0 then return [Rational(1, 1)] end
iterator = 1
fib_number = Rational(FibonacciSequence.new(n).to_a.last, 1)
rational_sum = RationalSequence.new(iterator).sum
while rational_sum < fib_number
rational_sum = RationalSequence.new(iterator).sum
iterator += 1
end
RationalSequence.new(iterator).to_a
end
end

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

...F...F....FF....FF

Failures:

  1) Fifth task RationalSequence is properly enumerable
     Failure/Error: ones = RationalSequence.new(28).select { |r| r.numerator == 1 }
     NoMethodError:
       private method `select' called for #<RationalSequence:0x007fc0991dbee0>
     # /tmp/d20151111-27349-1jipwy5/spec.rb:19: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 is properly enumerable
     Failure/Error: expect(FibonacciSequence.new(20).select { |x| x.even? }).to eq [
     NoMethodError:
       private method `select' called for #<FibonacciSequence:0x007fc0991d07c0>
     # /tmp/d20151111-27349-1jipwy5/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)>'

  3) Fifth task DrunkenMathematician #meaningless can calculate for 3
     Failure/Error: expect(DrunkenMathematician.meaningless(4)).to eq Rational(1, 3)
       
       expected: (1/3)
            got: (3/1)
       
       (compared using ==)
     # /tmp/d20151111-27349-1jipwy5/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)>'

  4) Fifth task DrunkenMathematician #meaningless can calculate for 42
     Failure/Error: expect(DrunkenMathematician.meaningless(42)).to eq Rational(1, 11)
       
       expected: (1/11)
            got: (11/1)
       
       (compared using ==)
     # /tmp/d20151111-27349-1jipwy5/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)>'

  5) 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)]
       
       (compared using ==)
     # /tmp/d20151111-27349-1jipwy5/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)>'

  6) Fifth task DrunkenMathematician #worthless can calculate for 15
     Failure/Error: expect(DrunkenMathematician.worthless(15)).to eq %w(
       
       expected: [(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), (7/1), (8/1), (7/2), (5/4), (4/5), (2/7), (1/8), (1/9), (3/7), (7/3), (9/1), (10/1), (9/2), (8/3), (7/4), (6/5), (5/6), (4/7), (3/8), (2/9), (1/10), (1/11), (5/7), (7/5), (11/1), (12/1), (11/2), (10/3), (9/4), (8/5), (7/6), (6/7), (5/8), (4/9), (3/10), (2/11), (1/12), (1/13), (3/11), (5/9), (9/5), (11/3), (13/1), (14/1), (13/2), (11/4), (8/7), (7/8), (4/11), (2/13), (1/14), (1/15), (3/13), (5/11), (7/9), (9/7), (11/5), (13/3), (15/1), (16/1), (15/2), (14/3), (13/4), (12/5), (11/6), (10/7), (9/8), (8/9), (7/10), (6/11), (5/12), (4/13), (3/14), (2/15), (1/16), (1/17), (5/13), (7/11), (11/7), (13/5), (17/1), (18/1), (17/2), (16/3), (15/4), (14/5), (13/6), (12/7), (11/8), (10/9), (9/10), (8/11), (7/12), (6/13), (5/14), (4/15), (3/16), (2/17), (1/18), (1/19), (3/17), (7/13), (9/11), (11/9), (13/7), (17/3), (19/1), (20/1), (19/2), (17/4), (16/5), (13/8), (11/10), (10/11), (8/13), (5/16), (4/17), (2/19), (1/20), (1/21), (3/19), (5/17), (7/15), (9/13), (13/9), (15/7), (17/5), (19/3), (21/1), (22/1), (21/2), (20/3), (19/4), (18/5), (17/6), (16/7), (15/8), (14/9), (13/10), (12/11), (11/12), (10/13), (9/14), (8/15), (7/16), (6/17), (5/18), (4/19), (3/20), (2/21), (1/22), (1/23), (5/19), (7/17), (11/13), (13/11), (17/7), (19/5), (23/1), (24/1), (23/2), (22/3), (21/4), (19/6), (18/7), (17/8), (16/9), (14/11), (13/12), (12/13), (11/14), (9/16), (8/17), (7/18), (6/19), (4/21), (3/22), (2/23), (1/24), (1/25), (3/23), (5/21), (7/19), (9/17), (11/15), (15/11), (17/9), (19/7), (21/5), (23/3)]
            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), (7/1), (8/1), (7/2), (5/4), (4/5), (2/7), (1/8), (1/9), (3/7), (7/3), (9/1), (10/1), (9/2), (8/3), (7/4), (6/5), (5/6), (4/7), (3/8), (2/9), (1/10), (1/11), (5/7), (7/5), (11/1), (12/1), (11/2), (10/3), (9/4), (8/5), (7/6), (6/7), (5/8), (4/9), (3/10), (2/11), (1/12), (1/13), (3/11), (5/9), (9/5), (11/3), (13/1), (14/1), (13/2), (11/4), (8/7), (7/8), (4/11), (2/13), (1/14), (1/15), (3/13), (5/11), (7/9), (9/7), (11/5), (13/3), (15/1), (16/1), (15/2), (14/3), (13/4), (12/5), (11/6), (10/7), (9/8), (8/9), (7/10), (6/11), (5/12), (4/13), (3/14), (2/15), (1/16), (1/17), (5/13), (7/11), (11/7), (13/5), (17/1), (18/1), (17/2), (16/3), (15/4), (14/5), (13/6), (12/7), (11/8), (10/9), (9/10), (8/11), (7/12), (6/13), (5/14), (4/15), (3/16), (2/17), (1/18), (1/19), (3/17), (7/13), (9/11), (11/9), (13/7), (17/3), (19/1), (20/1), (19/2), (17/4), (16/5), (13/8), (11/10), (10/11), (8/13), (5/16), (4/17), (2/19), (1/20), (1/21), (3/19), (5/17), (7/15), (9/13), (13/9), (15/7), (17/5), (19/3), (21/1), (22/1), (21/2), (20/3), (19/4), (18/5), (17/6), (16/7), (15/8), (14/9), (13/10), (12/11), (11/12), (10/13), (9/14), (8/15), (7/16), (6/17), (5/18), (4/19), (3/20), (2/21), (1/22), (1/23), (5/19), (7/17), (11/13), (13/11), (17/7), (19/5), (23/1), (24/1), (23/2), (22/3), (21/4), (19/6), (18/7), (17/8), (16/9), (14/11), (13/12), (12/13), (11/14), (9/16), (8/17), (7/18), (6/19), (4/21), (3/22), (2/23), (1/24), (1/25), (3/23), (5/21), (7/19), (9/17), (11/15), (15/11), (17/9), (19/7), (21/5), (23/3), (25/1), (26/1)]
       
       (compared using ==)
     # /tmp/d20151111-27349-1jipwy5/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.35218 seconds
20 examples, 6 failures

Failed examples:

rspec /tmp/d20151111-27349-1jipwy5/spec.rb:18 # Fifth task RationalSequence is properly enumerable
rspec /tmp/d20151111-27349-1jipwy5/spec.rb:44 # Fifth task FibonacciSequence is properly enumerable
rspec /tmp/d20151111-27349-1jipwy5/spec.rb:77 # Fifth task DrunkenMathematician #meaningless can calculate for 3
rspec /tmp/d20151111-27349-1jipwy5/spec.rb:81 # Fifth task DrunkenMathematician #meaningless can calculate for 42
rspec /tmp/d20151111-27349-1jipwy5/spec.rb:106 # Fifth task DrunkenMathematician #worthless can calculate for 8
rspec /tmp/d20151111-27349-1jipwy5/spec.rb:111 # Fifth task DrunkenMathematician #worthless can calculate for 15

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

Николай обнови решението на 26.10.2015 13:18 (преди над 9 години)

+class RationalSequence
+ def initialize(count)
+ @iterator = 1
+ @rational_numbers = Array.new
+ @numerator = 2
+ @denominator = 1
+ @state = true
+
+ if count > 0 then @rational_numbers.push(Rational(1, 1)) end
+ while @iterator < count
+ if @state
+ decrease
+ else
+ increase
+ end
+ end
+ end
+
+ def decrease
+ unless @rational_numbers.include?(Rational(@numerator , @denominator))
+ @rational_numbers.push(Rational(@numerator , @denominator))
+ @iterator += 1
+ end
+ if @numerator == 1
+ @denominator += 1
+ @state = false
+ return
+ end
+ @numerator -= 1
+ @denominator += 1
+ end
+
+ def increase
+ unless @rational_numbers.include?(Rational(@numerator , @denominator))
+ @rational_numbers.push(Rational(@numerator , @denominator))
+ @iterator += 1
+ end
+ if @denominator == 1
+ @numerator += 1
+ @state = true
+ return
+ end
+ @denominator -= 1
+ @numerator += 1
+ end
+
+ def sum
+ sum = Rational(0, 1)
+ @rational_numbers.each { |number| sum += number}
+ sum
+ end
+
+ def to_a
+ @rational_numbers.dup
+ end
+end
+
+class FibonacciSequence
+ def initialize(count)
+ @fibonacci_numbers = Array.new
+ for iterator in 0..count-1
+ @fibonacci_numbers.push(fibonacci(iterator))
+ end
+ end
+
+ def fibonacci(n)
+ n <= 1 ? n : fibonacci( n - 1 ) + fibonacci( n - 2 )
+ end
+
+ def to_a
+ @fibonacci_numbers.dup
+ end
+end
+
+class PrimeSequence
+ require 'prime'
+ def initialize(count)
+ @prime_numbers = Array.new
+ iterator = 0
+ current_number = 1
+ while iterator < count
+ if Prime.prime?(current_number)
+ @prime_numbers.push(current_number)
+ iterator+=1
+ end
+ current_number+=1
+ end
+ end
+
+ def to_a
+ @prime_numbers.dup
+ end
+end
+
+module DrunkenMathematician
+ module_function
+
+ def meaningless(n)
+ require 'prime'
+ group_prime = Rational(1, 1)
+ group_even = Rational(1, 1)
+ RationalSequence.new(n).to_a.each do |number|
+ if Prime.prime?(number.numerator) and Prime.prime?(number.denominator)
+ group_prime *= number
+ else
+ group_even *= number
+ end
+ end
+ group_prime / group_even
+ end
+
+ def aimless(n)
+ sum = Rational(0, 1)
+ prime_numbers = PrimeSequence.new(n).to_a
+ if n % 2 == 1 then prime_numbers.push(1) end
+ iterator = 0
+ while iterator < prime_numbers.size-1
+ sum += Rational(prime_numbers[iterator], prime_numbers[iterator + 1])
+ iterator += 2
+ end
+ sum
+ end
+
+ def worthless(n)
+ iterator = 1
+ fib_number = Rational(FibonacciSequence.new(n).to_a.last, 1)
+ rational_sum = RationalSequence.new(iterator).sum
+ while rational_sum < fib_number
+ rational_sum = RationalSequence.new(iterator).sum
+ iterator += 1
+ end
+ RationalSequence.new(iterator).to_a
+ end
+end

Николай обнови решението на 26.10.2015 14:37 (преди над 9 години)

class RationalSequence
def initialize(count)
@iterator = 1
@rational_numbers = Array.new
@numerator = 2
@denominator = 1
@state = true
if count > 0 then @rational_numbers.push(Rational(1, 1)) end
while @iterator < count
if @state
decrease
else
increase
end
end
end
def decrease
unless @rational_numbers.include?(Rational(@numerator , @denominator))
@rational_numbers.push(Rational(@numerator , @denominator))
@iterator += 1
end
if @numerator == 1
@denominator += 1
@state = false
return
end
@numerator -= 1
@denominator += 1
end
def increase
unless @rational_numbers.include?(Rational(@numerator , @denominator))
@rational_numbers.push(Rational(@numerator , @denominator))
@iterator += 1
end
if @denominator == 1
@numerator += 1
@state = true
return
end
@denominator -= 1
@numerator += 1
end
def sum
sum = Rational(0, 1)
@rational_numbers.each { |number| sum += number}
sum
end
def to_a
@rational_numbers.dup
end
end
class FibonacciSequence
- def initialize(count)
- @fibonacci_numbers = Array.new
- for iterator in 0..count-1
- @fibonacci_numbers.push(fibonacci(iterator))
+ def initialize(count, *arguments)
+ if arguments.size > 0
+ @first = arguments[0][:first]
+ @second = arguments[0][:second]
+ else
+ @first = 1
+ @second = 1
end
+ @fibonacci_numbers = [@first, @second]
+ if count < 2 then @fibonacci_numbers.pop(2 - count) end
+ for iterator in 2..count-1
+ @fibonacci_numbers.push(@first + @second)
+ temp = @first
+ @first = @second
+ @second = temp + @second
+ end
end
- def fibonacci(n)
- n <= 1 ? n : fibonacci( n - 1 ) + fibonacci( n - 2 )
- end
-
- def to_a
+ def to_a
@fibonacci_numbers.dup
end
end
class PrimeSequence
require 'prime'
def initialize(count)
@prime_numbers = Array.new
iterator = 0
current_number = 1
while iterator < count
if Prime.prime?(current_number)
@prime_numbers.push(current_number)
iterator+=1
end
current_number+=1
end
end
def to_a
@prime_numbers.dup
end
end
module DrunkenMathematician
module_function
def meaningless(n)
require 'prime'
group_prime = Rational(1, 1)
group_even = Rational(1, 1)
RationalSequence.new(n).to_a.each do |number|
if Prime.prime?(number.numerator) and Prime.prime?(number.denominator)
group_prime *= number
else
group_even *= number
end
end
group_prime / group_even
end
def aimless(n)
sum = Rational(0, 1)
prime_numbers = PrimeSequence.new(n).to_a
if n % 2 == 1 then prime_numbers.push(1) end
iterator = 0
while iterator < prime_numbers.size-1
sum += Rational(prime_numbers[iterator], prime_numbers[iterator + 1])
iterator += 2
end
sum
end
def worthless(n)
iterator = 1
fib_number = Rational(FibonacciSequence.new(n).to_a.last, 1)
rational_sum = RationalSequence.new(iterator).sum
while rational_sum < fib_number
rational_sum = RationalSequence.new(iterator).sum
iterator += 1
end
RationalSequence.new(iterator).to_a
end
end

Николай обнови решението на 26.10.2015 15:54 (преди над 9 години)

class RationalSequence
def initialize(count)
@iterator = 1
@rational_numbers = Array.new
@numerator = 2
@denominator = 1
@state = true
if count > 0 then @rational_numbers.push(Rational(1, 1)) end
while @iterator < count
if @state
decrease
else
increase
end
end
end
def decrease
unless @rational_numbers.include?(Rational(@numerator , @denominator))
@rational_numbers.push(Rational(@numerator , @denominator))
@iterator += 1
end
if @numerator == 1
@denominator += 1
@state = false
return
end
@numerator -= 1
@denominator += 1
end
def increase
unless @rational_numbers.include?(Rational(@numerator , @denominator))
@rational_numbers.push(Rational(@numerator , @denominator))
@iterator += 1
end
if @denominator == 1
@numerator += 1
@state = true
return
end
@denominator -= 1
@numerator += 1
end
def sum
sum = Rational(0, 1)
@rational_numbers.each { |number| sum += number}
sum
end
def to_a
@rational_numbers.dup
end
end
class FibonacciSequence
def initialize(count, *arguments)
if arguments.size > 0
@first = arguments[0][:first]
@second = arguments[0][:second]
else
@first = 1
@second = 1
end
@fibonacci_numbers = [@first, @second]
if count < 2 then @fibonacci_numbers.pop(2 - count) end
for iterator in 2..count-1
@fibonacci_numbers.push(@first + @second)
temp = @first
@first = @second
@second = temp + @second
end
end
def to_a
@fibonacci_numbers.dup
end
end
class PrimeSequence
require 'prime'
def initialize(count)
@prime_numbers = Array.new
iterator = 0
current_number = 1
while iterator < count
if Prime.prime?(current_number)
@prime_numbers.push(current_number)
iterator+=1
end
current_number+=1
end
end
def to_a
@prime_numbers.dup
end
end
module DrunkenMathematician
module_function
def meaningless(n)
require 'prime'
group_prime = Rational(1, 1)
group_even = Rational(1, 1)
RationalSequence.new(n).to_a.each do |number|
if Prime.prime?(number.numerator) and Prime.prime?(number.denominator)
group_prime *= number
else
group_even *= number
end
end
group_prime / group_even
end
def aimless(n)
sum = Rational(0, 1)
prime_numbers = PrimeSequence.new(n).to_a
if n % 2 == 1 then prime_numbers.push(1) end
iterator = 0
while iterator < prime_numbers.size-1
sum += Rational(prime_numbers[iterator], prime_numbers[iterator + 1])
iterator += 2
end
sum
end
def worthless(n)
+ if n == 0 then return [Rational(1, 1)] end
iterator = 1
fib_number = Rational(FibonacciSequence.new(n).to_a.last, 1)
rational_sum = RationalSequence.new(iterator).sum
while rational_sum < fib_number
rational_sum = RationalSequence.new(iterator).sum
iterator += 1
end
RationalSequence.new(iterator).to_a
end
end