Решение на Трета задача от Георги Стефанов

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

Към профила на Георги Стефанов

Резултати

  • 3 точки от тестове
  • 0 бонус точки
  • 3 точки общо
  • 11 успешни тест(а)
  • 9 неуспешни тест(а)

Код

class RationalSequence
def initialize(x)
@field = x
end
def to_a
up, down, direction, counter = 0, 0, false, 0
arr = Array.new
while(counter < @field)
arr.push(Rational(down+1, up+1)) if (up != down) or (up == 0 and down == 0)
counter = counter + 1
if (up == 0 and down += 1) or (down == 0 and up += 1)
arr.push(Rational(down+1, up+1))
counter = counter + 1
direction = !direction
end
direction ? (up, down = up+1, down-1) : (up, down = up-1, down+1)
end
arr
end
end
class PrimeSequence
include Enumerable
def initialize(x)
@field = x
end
def prime? n
for d in 2..(n / 2)
return false if (n % d) == 0
end
true
end
def to_a
arr = Array.new
first_counter, second_counter = 2, @field
while (second_counter > 0)
if prime? first_counter
arr.push(first_counter)
first_counter, second_counter = first_counter+1, second_counter-1
else
first_counter += 1
end
end
arr
end
end
class FibonacciSequence
include Enumerable
def initialize(*args)
@field, @keys = *args
end
def to_a
arr = Array.new
if @keys
arr[0], arr[1] = @keys[:first], @keys[:second]
else
arr[0], arr[1] = 1, 1
end
for i in 2..@field-1
arr[i] = arr[i-1] + arr[i-2]
end
arr
end
end
module DrunkenMathematician
module_function
def prime? n
if (n == 1)
return false
end
for d in 2..(n / 2)
return false if (n % d) == 0
end
true
end
def meaningless(n)
sequence = RationalSequence.new(n)
first_junk, second_junk = 1, 1
for i in 0..n-1
number = sequence.to_a.fetch(i)
if(prime? number.numerator) or (prime? number.denominator)
first_junk = first_junk * number
end
unless (prime? number.numerator) and (prime? number.denominator)
second_junk = second_junk * number
end
end
first_junk/second_junk
end
def aimless(n)
sequence = PrimeSequence.new(n)
count = 0
junk = 0
while (count < n)
junk += Rational(sequence.to_a.fetch(count), sequence.to_a.fetch(count+1))
count += 2
end
junk
end
def worthless(n)
worthless_junk = FibonacciSequence.new(n)
fibonacci = worthless_junk.to_a.fetch(n-1)
first_junk = RationalSequence.new(n)
second_junk = Array.new
third_junk = 0
for i in 0...n-1
number = first_junk.to_a.fetch(i)
if (third_junk + number < fibonacci)
second_junk.push(number)
third_junk += number
end
end
second_junk
end
def answer
42
end
end

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

..FF...F....FFF..FFF

Failures:

  1) Fifth task RationalSequence can calculate the first 28 rational numbers
     Failure/Error: expect(RationalSequence.new(28).to_a).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)]
            got: [(1/1), (2/1), (1/2), (1/3), (3/1), (4/1), (3/2), (2/3), (1/4), (1/5), (1/2), (2/1), (5/1), (6/1), (5/2), (4/3), (3/4), (2/5), (1/6), (1/7), (1/3), (3/5), (5/3), (3/1), (7/1), (8/1)]
       
       (compared using ==)
     # /tmp/d20151111-27349-1h89gnj/spec.rb:12: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 RationalSequence is properly enumerable
     Failure/Error: ones = RationalSequence.new(28).select { |r| r.numerator == 1 }
     NoMethodError:
       private method `select' called for #<RationalSequence:0x007f51a3668400 @field=28>
     # /tmp/d20151111-27349-1h89gnj/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)>'

  3) Fifth task FibonacciSequence is properly enumerable
     Failure/Error: expect(FibonacciSequence.new(20).select { |x| x.even? }).to eq [
     NoMethodError:
       undefined method `each' for #<FibonacciSequence:0x007f51a364b3c8 @field=20, @keys=nil>
     # /tmp/d20151111-27349-1h89gnj/spec.rb:45:in `select'
     # /tmp/d20151111-27349-1h89gnj/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)>'

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

  5) Fifth task DrunkenMathematician #meaningless can calculate for 42
     Failure/Error: expect(DrunkenMathematician.meaningless(42)).to eq Rational(1, 11)
     IndexError:
       index 38 outside of array bounds: -38...38
     # /tmp/d20151111-27349-1h89gnj/solution.rb:92:in `fetch'
     # /tmp/d20151111-27349-1h89gnj/solution.rb:92:in `block in meaningless'
     # /tmp/d20151111-27349-1h89gnj/solution.rb:91:in `each'
     # /tmp/d20151111-27349-1h89gnj/solution.rb:91:in `meaningless'
     # /tmp/d20151111-27349-1h89gnj/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)>'

  6) Fifth task DrunkenMathematician #aimless can calculate for 3
     Failure/Error: expect(DrunkenMathematician.aimless(3)).to eq(Rational(2, 3) + Rational(5, 1))
     IndexError:
       index 3 outside of array bounds: -3...3
     # /tmp/d20151111-27349-1h89gnj/solution.rb:109:in `fetch'
     # /tmp/d20151111-27349-1h89gnj/solution.rb:109:in `aimless'
     # /tmp/d20151111-27349-1h89gnj/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)>'

  7) Fifth task DrunkenMathematician #worthless can calculate for 2
     Failure/Error: expect(DrunkenMathematician.worthless(2)).to eq %w(1/1).map(&:to_r)
       
       expected: [(1/1)]
            got: []
       
       (compared using ==)
     # /tmp/d20151111-27349-1h89gnj/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)>'

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

  9) 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), (1/2), (2/1), (5/1), (6/1)]
       
       (compared using ==)
     # /tmp/d20151111-27349-1h89gnj/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.03837 seconds
20 examples, 9 failures

Failed examples:

rspec /tmp/d20151111-27349-1h89gnj/spec.rb:11 # Fifth task RationalSequence can calculate the first 28 rational numbers
rspec /tmp/d20151111-27349-1h89gnj/spec.rb:18 # Fifth task RationalSequence is properly enumerable
rspec /tmp/d20151111-27349-1h89gnj/spec.rb:44 # Fifth task FibonacciSequence is properly enumerable
rspec /tmp/d20151111-27349-1h89gnj/spec.rb:77 # Fifth task DrunkenMathematician #meaningless can calculate for 3
rspec /tmp/d20151111-27349-1h89gnj/spec.rb:81 # Fifth task DrunkenMathematician #meaningless can calculate for 42
rspec /tmp/d20151111-27349-1h89gnj/spec.rb:87 # Fifth task DrunkenMathematician #aimless can calculate for 3
rspec /tmp/d20151111-27349-1h89gnj/spec.rb:102 # Fifth task DrunkenMathematician #worthless can calculate for 2
rspec /tmp/d20151111-27349-1h89gnj/spec.rb:106 # Fifth task DrunkenMathematician #worthless can calculate for 8
rspec /tmp/d20151111-27349-1h89gnj/spec.rb:111 # Fifth task DrunkenMathematician #worthless can calculate for 15

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

Георги обнови решението на 25.10.2015 11:41 (преди над 8 години)

+class RationalSequence
+
+ def initialize(x)
+ @field = x
+ end
+
+ def to_a
+ up, down, direction, counter = 0, 0, false, 0
+ arr = Array.new
+ while(counter < @field)
+ arr.push(Rational(down+1, up+1)) if (up != down) or (up == 0 and down == 0)
+ counter = counter + 1
+ if (up == 0 and down += 1) or (down == 0 and up += 1)
+ arr.push(Rational(down+1, up+1))
+ counter = counter + 1
+ direction = !direction
+ end
+ direction ? (up, down = up+1, down-1) : (up, down = up-1, down+1)
+ end
+ arr
+ end
+end
+
+class PrimeSequence
+ include Enumerable
+
+ def initialize(x)
+ @field = x
+ end
+
+ def prime? n
+ for d in 2..(n / 2)
+ return false if (n % d) == 0
+ end
+ true
+ end
+
+ def to_a
+ arr = Array.new
+ first_counter, second_counter = 2, @field
+ while (second_counter > 0)
+ if prime? first_counter
+ arr.push(first_counter)
+ first_counter, second_counter = first_counter+1, second_counter-1
+ else
+ first_counter += 1
+ end
+ end
+ arr
+ end
+
+end
+
+class FibonacciSequence
+ include Enumerable
+
+ def initialize(*args)
+ @field, @keys = *args
+ end
+
+ def to_a
+ arr = Array.new
+ if @keys
+ arr[0], arr[1] = @keys[:first], @keys[:second]
+ else
+ arr[0], arr[1] = 1, 1
+ end
+ for i in 2..@field-1
+ arr[i] = arr[i-1] + arr[i-2]
+ end
+ arr
+ end
+end
+
+module DrunkenMathematician
+ module_function
+
+ def prime? n
+ if (n == 1)
+ return false
+ end
+ for d in 2..(n / 2)
+ return false if (n % d) == 0
+ end
+ true
+ end
+
+ def meaningless(n)
+ sequence = RationalSequence.new(n)
+ first_junk, second_junk = 1, 1
+ for i in 0..n-1
+ number = sequence.to_a.fetch(i)
+ if(prime? number.numerator) or (prime? number.denominator)
+ first_junk = first_junk * number
+ end
+ unless (prime? number.numerator) and (prime? number.denominator)
+ second_junk = second_junk * number
+ end
+ end
+ first_junk/second_junk
+ end
+
+
+ def aimless(n)
+ sequence = PrimeSequence.new(n)
+ count = 0
+ junk = 0
+ while (count < n)
+ junk += Rational(sequence.to_a.fetch(count), sequence.to_a.fetch(count+1))
+ count += 2
+ end
+ junk
+ end
+
+ def worthless(n)
+ worthless_junk = FibonacciSequence.new(n)
+ fibonacci = worthless_junk.to_a.fetch(n-1)
+ first_junk = RationalSequence.new(n)
+ second_junk = Array.new
+ third_junk = 0
+ for i in 0...n-1
+ number = first_junk.to_a.fetch(i)
+ if (third_junk + number < fibonacci)
+ second_junk.push(number)
+ third_junk += number
+ end
+ end
+ second_junk
+ end
+
+ def answer
+ 42
+ end
+end