Решение на Трета задача от Любомир Папазов

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

Към профила на Любомир Папазов

Резултати

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

Код

class Integer
def self.prime?(number)
if number < 2
return false
end
current = 2
is_prime = true
while current <= number ** 0.5
if number % current == 0
is_prime = false
break
end
current += 1
end
is_prime
end
end
class Helper
def self.next_rational(numerator, denominator)
if (numerator + denominator) % 2 == 0 and denominator == 1
numerator += 1
elsif (numerator + denominator) % 2 == 0 and denominator != 1
numerator, denominator = numerator + 1 , denominator - 1
elsif (numerator + denominator) % 2 != 0 and numerator == 1
denominator += 1
elsif (numerator + denominator) % 2 != 0 and numerator != 1
numerator, denominator = numerator - 1 , denominator + 1
end
[numerator, denominator]
end
end
class FibonacciSequence
include Enumerable
def initialize(count, first: 0, second: 1)
@count = count
@previous = first
@current = second
end
def each
previous, current = @previous, @current
counter = 0
while counter < @count
yield current
current, previous = current + previous, current
counter+=1
end
end
end
class RationalSequence
include Enumerable
def initialize(count)
@count = count
@array = Array.new
end
def each
numerator, denominator, counter = 1, 1, 0
while counter < @count
if !@array.include?(Rational(numerator, denominator))
@array.push(Rational(numerator, denominator))
yield Rational(numerator, denominator)
counter+=1
end
new_rational = Helper.next_rational(numerator, denominator)
numerator = new_rational[0]
denominator = new_rational[1]
end
end
end
class PrimeSequence
include Enumerable
def initialize(count)
@count = count
end
def each
counter = 0
current = 2
while counter < @count
if Fixnum.prime?(current)
yield current
counter+=1
end
current+=1
end
end
end
module DrunkenMathematician
module_function
def aimless(n)
if n == 0
return 0
end
pairs = PrimeSequence.new(n).each_slice(2).to_a
if pairs.last[1] == nil
pairs.last[1] = 1
end
pairs.map { |x| Rational(x[0], x[1]) }.reduce { |a, b| a + b }
end
def meaningless(n)
rationals = RationalSequence.new(n).to_a
primes = rationals.select { |x| Fixnum.prime? x.numerator or Fixnum.prime? x.denominator}
others = rationals.select { |x| !primes.include?(x)}
if primes.count == 0
product_primes = 1
else
product_primes = primes.reduce { |a, b| a * b}
end
if others.count == 0
product_others = 1
else
product_others = others.reduce { |a, b| a * b}
end
product_primes / product_others
end
def worthless(n)
sequence = RationalSequence.new(n).to_a
sum = sequence.reduce { |a, b| a + b}
while sum > FibonacciSequence.new(n).to_a[n-1]
sequence.pop
sum = sequence.reduce { |a, b| a + b}
end
sequence
end
end

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

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

Failures:

  1) 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: [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-16q4b6r/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)>'

  2) 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)]
       
       (compared using ==)
     # /tmp/d20151111-27349-16q4b6r/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)>'

  3) 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)]
       
       (compared using ==)
     # /tmp/d20151111-27349-16q4b6r/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.0125 seconds
20 examples, 3 failures

Failed examples:

rspec /tmp/d20151111-27349-16q4b6r/spec.rb:36 # Fifth task FibonacciSequence can be used to calculate the Lucas numbers
rspec /tmp/d20151111-27349-16q4b6r/spec.rb:106 # Fifth task DrunkenMathematician #worthless can calculate for 8
rspec /tmp/d20151111-27349-16q4b6r/spec.rb:111 # Fifth task DrunkenMathematician #worthless can calculate for 15

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

Любомир обнови решението на 26.10.2015 01:17 (преди над 9 години)

+class Integer
+ def self.prime?(number)
+ if number < 2
+ return false
+ end
+ current = 2
+ is_prime = true
+ while current <= number ** 0.5
+ if number % current == 0
+ is_prime = false
+ break
+ end
+ current += 1
+ end
+ is_prime
+ end
+end
+
+class FibonacciSequence
+ include Enumerable
+
+ def initialize(count, first: 0, second: 1)
+ @count = count
+ @previous = first
+ @current = second
+ end
+
+ def each
+ previous, current = @previous, @current
+ counter = 0
+
+ while counter < @count
+ yield current
+ current, previous = current + previous, current
+ counter+=1
+ end
+ end
+end
+
+class RationalSequence
+end
+
+class PrimeSequence
+ include Enumerable
+
+ def initialize(count)
+ @count = count
+ end
+
+ def each
+ counter = 0
+ current = 2
+
+ while counter < @count
+ if Fixnum.prime?(current)
+ yield current
+ counter+=1
+ end
+ current+=1
+ end
+ end
+end
+
+module DrunkenMathematician
+ module_function
+
+ def aimless(n)
+ pairs = PrimeSequence.new(n).each_slice(2).to_a
+ if pairs.last[1] == nil
+ pairs.last[1] = 1
+ end
+ pairs.map { |x| Rational(x[0], x[1]) }.reduce { |a, b| a + b }
+ end
+end

Любомир обнови решението на 26.10.2015 01:33 (преди над 9 години)

class Integer
def self.prime?(number)
if number < 2
return false
end
current = 2
is_prime = true
while current <= number ** 0.5
if number % current == 0
is_prime = false
break
end
current += 1
end
is_prime
end
end
class FibonacciSequence
include Enumerable
def initialize(count, first: 0, second: 1)
@count = count
@previous = first
@current = second
end
def each
previous, current = @previous, @current
counter = 0
while counter < @count
yield current
current, previous = current + previous, current
counter+=1
end
end
end
class RationalSequence
end
class PrimeSequence
include Enumerable
def initialize(count)
@count = count
end
def each
counter = 0
current = 2
while counter < @count
if Fixnum.prime?(current)
yield current
counter+=1
end
current+=1
end
end
end
module DrunkenMathematician
module_function
def aimless(n)
+ if n == 0
+ return 0
+ end
pairs = PrimeSequence.new(n).each_slice(2).to_a
if pairs.last[1] == nil
pairs.last[1] = 1
end
pairs.map { |x| Rational(x[0], x[1]) }.reduce { |a, b| a + b }
end
-end
+end

Любомир обнови решението на 26.10.2015 02:28 (преди над 9 години)

class Integer
def self.prime?(number)
if number < 2
return false
end
current = 2
is_prime = true
while current <= number ** 0.5
if number % current == 0
is_prime = false
break
end
current += 1
end
is_prime
end
end
class FibonacciSequence
include Enumerable
def initialize(count, first: 0, second: 1)
@count = count
@previous = first
@current = second
end
def each
previous, current = @previous, @current
counter = 0
while counter < @count
yield current
current, previous = current + previous, current
counter+=1
end
end
end
+class Helper
+ def self.next_rational(numerator, denominator)
+ if (numerator + denominator) % 2 == 0 and denominator == 1
+ numerator += 1
+ elsif (numerator + denominator) % 2 == 0 and denominator != 1
+ numerator, denominator = numerator + 1 , denominator - 1
+ elsif (numerator + denominator) % 2 != 0 and numerator == 1
+ denominator += 1
+ elsif (numerator + denominator) % 2 != 0 and numerator != 1
+ numerator, denominator = numerator - 1 , denominator + 1
+ end
+ [numerator, denominator]
+ end
+end
+
class RationalSequence
+ include Enumerable
+
+ def initialize(count)
+ @count = count
+ @array = Array.new
+ end
+
+ def each
+ numerator, denominator, counter = 1, 1, 0
+ while counter < @count
+ if !@array.include?(Rational(numerator, denominator))
+ @array.push(Rational(numerator, denominator))
+ end
+ yield Rational(numerator, denominator)
+ new_rational = Helper.next_rational(numerator, denominator)
+ numerator = new_rational[0]
+ denominator = new_rational[1]
+ counter+=1
+ end
+ end
end
class PrimeSequence
include Enumerable
def initialize(count)
@count = count
end
def each
counter = 0
current = 2
while counter < @count
if Fixnum.prime?(current)
yield current
counter+=1
end
current+=1
end
end
end
module DrunkenMathematician
module_function
def aimless(n)
if n == 0
return 0
end
pairs = PrimeSequence.new(n).each_slice(2).to_a
if pairs.last[1] == nil
pairs.last[1] = 1
end
pairs.map { |x| Rational(x[0], x[1]) }.reduce { |a, b| a + b }
end
end

Любомир обнови решението на 26.10.2015 03:00 (преди над 9 години)

class Integer
def self.prime?(number)
if number < 2
return false
end
current = 2
is_prime = true
while current <= number ** 0.5
if number % current == 0
is_prime = false
break
end
current += 1
end
is_prime
end
end
+class Helper
+ def self.next_rational(numerator, denominator)
+ if (numerator + denominator) % 2 == 0 and denominator == 1
+ numerator += 1
+ elsif (numerator + denominator) % 2 == 0 and denominator != 1
+ numerator, denominator = numerator + 1 , denominator - 1
+ elsif (numerator + denominator) % 2 != 0 and numerator == 1
+ denominator += 1
+ elsif (numerator + denominator) % 2 != 0 and numerator != 1
+ numerator, denominator = numerator - 1 , denominator + 1
+ end
+ [numerator, denominator]
+ end
+end
+
class FibonacciSequence
include Enumerable
def initialize(count, first: 0, second: 1)
@count = count
@previous = first
@current = second
end
def each
previous, current = @previous, @current
counter = 0
while counter < @count
yield current
current, previous = current + previous, current
counter+=1
end
end
end
-class Helper
- def self.next_rational(numerator, denominator)
- if (numerator + denominator) % 2 == 0 and denominator == 1
- numerator += 1
- elsif (numerator + denominator) % 2 == 0 and denominator != 1
- numerator, denominator = numerator + 1 , denominator - 1
- elsif (numerator + denominator) % 2 != 0 and numerator == 1
- denominator += 1
- elsif (numerator + denominator) % 2 != 0 and numerator != 1
- numerator, denominator = numerator - 1 , denominator + 1
- end
- [numerator, denominator]
- end
-end
-
class RationalSequence
include Enumerable
def initialize(count)
@count = count
@array = Array.new
end
def each
numerator, denominator, counter = 1, 1, 0
while counter < @count
if !@array.include?(Rational(numerator, denominator))
@array.push(Rational(numerator, denominator))
+ yield Rational(numerator, denominator)
+ counter+=1
end
- yield Rational(numerator, denominator)
new_rational = Helper.next_rational(numerator, denominator)
numerator = new_rational[0]
denominator = new_rational[1]
- counter+=1
end
end
end
class PrimeSequence
include Enumerable
def initialize(count)
@count = count
end
def each
counter = 0
current = 2
while counter < @count
if Fixnum.prime?(current)
yield current
counter+=1
end
current+=1
end
end
end
module DrunkenMathematician
module_function
def aimless(n)
if n == 0
return 0
end
pairs = PrimeSequence.new(n).each_slice(2).to_a
if pairs.last[1] == nil
pairs.last[1] = 1
end
pairs.map { |x| Rational(x[0], x[1]) }.reduce { |a, b| a + b }
+ end
+
+ def meaningless(n)
+ rationals = RationalSequence.new(n).to_a
+ primes = rationals.select { |x| Fixnum.prime? x.numerator or Fixnum.prime? x.denominator}
+ others = rationals.select { |x| !primes.include?(x)}
+ if primes.count == 0
+ product_primes = 1
+ else
+ product_primes = primes.reduce { |a, b| a * b}
+ end
+ if others.count == 0
+ product_others = 1
+ else
+ product_others = others.reduce { |a, b| a * b}
+ end
+ product_primes / product_others
end
end

Любомир обнови решението на 26.10.2015 03:10 (преди над 9 години)

class Integer
def self.prime?(number)
if number < 2
return false
end
current = 2
is_prime = true
while current <= number ** 0.5
if number % current == 0
is_prime = false
break
end
current += 1
end
is_prime
end
end
class Helper
def self.next_rational(numerator, denominator)
if (numerator + denominator) % 2 == 0 and denominator == 1
numerator += 1
elsif (numerator + denominator) % 2 == 0 and denominator != 1
numerator, denominator = numerator + 1 , denominator - 1
elsif (numerator + denominator) % 2 != 0 and numerator == 1
denominator += 1
elsif (numerator + denominator) % 2 != 0 and numerator != 1
numerator, denominator = numerator - 1 , denominator + 1
end
[numerator, denominator]
end
end
class FibonacciSequence
include Enumerable
def initialize(count, first: 0, second: 1)
@count = count
@previous = first
@current = second
end
def each
previous, current = @previous, @current
counter = 0
while counter < @count
yield current
current, previous = current + previous, current
counter+=1
end
end
end
class RationalSequence
include Enumerable
def initialize(count)
@count = count
@array = Array.new
end
def each
numerator, denominator, counter = 1, 1, 0
while counter < @count
if !@array.include?(Rational(numerator, denominator))
@array.push(Rational(numerator, denominator))
yield Rational(numerator, denominator)
counter+=1
end
new_rational = Helper.next_rational(numerator, denominator)
numerator = new_rational[0]
denominator = new_rational[1]
end
end
end
class PrimeSequence
include Enumerable
def initialize(count)
@count = count
end
def each
counter = 0
current = 2
while counter < @count
if Fixnum.prime?(current)
yield current
counter+=1
end
current+=1
end
end
end
module DrunkenMathematician
module_function
def aimless(n)
if n == 0
return 0
end
pairs = PrimeSequence.new(n).each_slice(2).to_a
if pairs.last[1] == nil
pairs.last[1] = 1
end
pairs.map { |x| Rational(x[0], x[1]) }.reduce { |a, b| a + b }
end
def meaningless(n)
rationals = RationalSequence.new(n).to_a
primes = rationals.select { |x| Fixnum.prime? x.numerator or Fixnum.prime? x.denominator}
others = rationals.select { |x| !primes.include?(x)}
if primes.count == 0
product_primes = 1
else
product_primes = primes.reduce { |a, b| a * b}
end
if others.count == 0
product_others = 1
else
product_others = others.reduce { |a, b| a * b}
end
product_primes / product_others
end
+
+ def worthless(n)
+ sequence = RationalSequence.new(n).to_a
+ sum = sequence.reduce { |a, b| a + b}
+ while sum > FibonacciSequence.new(n).to_a[n-1]
+ sequence.pop
+ sum = sequence.reduce { |a, b| a + b}
+ end
+ sequence
+ end
end