Решение на Първа задача от Златна Николова

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

Към профила на Златна Николова

Резултати

  • 6 точки от тестове
  • 0 бонус точки
  • 6 точки общо
  • 8 успешни тест(а)
  • 0 неуспешни тест(а)

Код

def generate_primes_to(num)
i = 2
j = 2
sieve = [0, 1]
while i <= num
if sieve[i] == nil
sieve[i] = i
j = i * i
while j <= num
sieve[j] = 0
j += i
end
end
i+=1
end
return sieve - [0,1]
end
class Integer
def prime_divisors
number = self < 0 ? -1 * self : self
primes = generate_primes_to number
divisors = []
primes.each do |prime|
if self % prime == 0
divisors << prime
end
end
divisors
end
end
class Range
def fizzbuzz
fizzbuzz_arr = []
self.each do |element|
if (element % 5 == 0 and element % 3 == 0)
fizzbuzz_arr << :fizzbuzz
elsif element % 5 == 0
fizzbuzz_arr << :buzz
elsif element % 3 == 0
fizzbuzz_arr << :fizz
else
fizzbuzz_arr << element
end
end
fizzbuzz_arr
end
end
class Hash
def group_values
result_hash = {} #Hash.new []
self.each do |key, value|
if result_hash[value] == nil
result_hash[value] = [key]
else
result_hash[value] << key
end
end #{|key, value| result_hash[value] << key}
result_hash
end
end
class Array
def densities
h = Hash.new []
self.each_with_index do |val, index|
if h[val] == []
h[val] = [index]
else
h[val] << index
end
end
result_arr = []
h.each do |_,val|
val.each { |index| result_arr[index] = val.length}
end
result_arr
end
end

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

........

Finished in 0.0098 seconds
8 examples, 0 failures

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

Златна обнови решението на 15.10.2012 09:36 (преди около 12 години)

+def generate_primes_to(num)
+ i = 2
+ j = 2
+ sieve = [0, 1]
+ while i <= num
+ if sieve[i] == nil
+ sieve[i] = i
+ j = i * i
+ while j <= num
+ sieve[j] = 0
+ j += i
+ end
+ end
+ i+=1
+ end
+ return sieve - [0,1]
+end
+
+class Integer
+ def prime_divisors
+ number = if self < 0 then -1 * self else self end
+ primes = generate_primes_to number
+ divisors = []
+ primes.each do |prime|
+ if self % prime == 0
+ divisors << prime
+ end
+ end
+ puts divisors
+ end
+end
+
+class Range
+ def fizzbuzz
+ fizzbuzz_arr = []
+ self.each do |element|
+ if (element % 5 == 0 and element % 3 == 0)
+ fizzbuzz_arr << :fizzbuzz
+ elsif element % 5 == 0
+ fizzbuzz_arr << :buzz
+ elsif element % 3 == 0
+ fizzbuzz_arr << :fizz
+ else
+ fizzbuzz_arr << element
+ end
+ end
+ return fizzbuzz_arr
+ end
+end
+
+class Hash
+ def group_values
+ result_hash = {}
+ self.each do |key, value|
+ if result_hash[value] == nil
+ result_hash[value] = [key]
+ else result_hash[value] << key
+ end
+ end
+ return result_hash
+ end
+end

Златна обнови решението на 15.10.2012 14:43 (преди около 12 години)

def generate_primes_to(num)
i = 2
j = 2
sieve = [0, 1]
while i <= num
if sieve[i] == nil
sieve[i] = i
j = i * i
while j <= num
sieve[j] = 0
j += i
end
end
i+=1
end
return sieve - [0,1]
end
class Integer
def prime_divisors
- number = if self < 0 then -1 * self else self end
+ number = self < 0 ? -1 * self : self
primes = generate_primes_to number
divisors = []
primes.each do |prime|
if self % prime == 0
divisors << prime
end
end
- puts divisors
+ divisors
end
end
class Range
def fizzbuzz
fizzbuzz_arr = []
self.each do |element|
if (element % 5 == 0 and element % 3 == 0)
fizzbuzz_arr << :fizzbuzz
elsif element % 5 == 0
fizzbuzz_arr << :buzz
elsif element % 3 == 0
fizzbuzz_arr << :fizz
else
fizzbuzz_arr << element
end
end
- return fizzbuzz_arr
+ fizzbuzz_arr
end
end
class Hash
def group_values
- result_hash = {}
+ result_hash = {} #Hash.new []
self.each do |key, value|
- if result_hash[value] == nil
+ if result_hash[value] == nil
result_hash[value] = [key]
- else result_hash[value] << key
+ else
+ result_hash[value] << key
end
+ end #{|key, value| result_hash[value] << key}
+ result_hash
+ end
+end
+
+class Array
+ def densities
+ h = Hash.new []
+ self.each_with_index do |val, index|
+ if h[val] == []
+ h[val] = [index]
+ else
+ h[val] << index
+ end
end
- return result_hash
+ result_arr = []
+ h.each do |_,val|
+ val.each { |index| result_arr[index] = val.length}
+ end
+ result_arr
end
-end
+end

Златна обнови решението на 15.10.2012 15:15 (преди около 12 години)

def generate_primes_to(num)
i = 2
j = 2
sieve = [0, 1]
while i <= num
- if sieve[i] == nil
- sieve[i] = i
- j = i * i
- while j <= num
- sieve[j] = 0
- j += i
- end
- end
- i+=1
+ if sieve[i] == nil
+ sieve[i] = i
+ j = i * i
+ while j <= num
+ sieve[j] = 0
+ j += i
+ end
+ end
+ i+=1
end
return sieve - [0,1]
end
class Integer
def prime_divisors
- number = self < 0 ? -1 * self : self
+ number = self < 0 ? -1 * self : self
primes = generate_primes_to number
- divisors = []
- primes.each do |prime|
- if self % prime == 0
- divisors << prime
- end
- end
- divisors
+ divisors = []
+ primes.each do |prime|
+ if self % prime == 0
+ divisors << prime
+ end
+ end
+ divisors
end
end
class Range
def fizzbuzz
fizzbuzz_arr = []
self.each do |element|
- if (element % 5 == 0 and element % 3 == 0)
- fizzbuzz_arr << :fizzbuzz
- elsif element % 5 == 0
- fizzbuzz_arr << :buzz
- elsif element % 3 == 0
- fizzbuzz_arr << :fizz
- else
- fizzbuzz_arr << element
- end
- end
+ if (element % 5 == 0 and element % 3 == 0)
+ fizzbuzz_arr << :fizzbuzz
+ elsif element % 5 == 0
+ fizzbuzz_arr << :buzz
+ elsif element % 3 == 0
+ fizzbuzz_arr << :fizz
+ else
+ fizzbuzz_arr << element
+ end
+ end
fizzbuzz_arr
end
end
class Hash
def group_values
result_hash = {} #Hash.new []
- self.each do |key, value|
- if result_hash[value] == nil
- result_hash[value] = [key]
- else
- result_hash[value] << key
- end
- end #{|key, value| result_hash[value] << key}
- result_hash
+ self.each do |key, value|
+ if result_hash[value] == nil
+ result_hash[value] = [key]
+ else
+ result_hash[value] << key
+ end
+ end #{|key, value| result_hash[value] << key}
+ result_hash
end
end
class Array
def densities
h = Hash.new []
self.each_with_index do |val, index|
- if h[val] == []
- h[val] = [index]
- else
- h[val] << index
- end
- end
- result_arr = []
- h.each do |_,val|
- val.each { |index| result_arr[index] = val.length}
- end
- result_arr
+ if h[val] == []
+ h[val] = [index]
+ else
+ h[val] << index
+ end
+ end
+ result_arr = []
+ h.each do |_,val|
+ val.each { |index| result_arr[index] = val.length}
+ end
+ result_arr
end
end
  • self. е излишно на всички места, на които го ползваш; в такива случаи се изпуска по конвенция
  • Hash.new [] не се ползва в този си вид, защото има много странно поведение; пробвай го в irb и се консултирай с документацията, за да разбереш защо (може да питаш и в някоя почивка)
  • fizzbuzz и densities се получават много добре с map; допълнително, densities се прави на един ред, с този код: map { |item| count item } :)
  • За ред 21 всъщност си има метод map
  • return пред последния израз в метод е излишен и се изпуска; това важи за ред 16
  • Избягвай да дефинираш "глобални" методи като generate_primes_to; или private/public метод в Integer, или си правиш отделен клас, който има такъв метод и ползваш въпросния клас
  • Скобите около условието на ред 37 са излишни

Ти май беше на предната лекция и видя примерното решение, но въпреки това, виж и решенията на колегите, на които сме дали бонус точки. Спазвала си конвенциите за идентация, whitespace и прочее и решението ти е добре подредено, което е добро начало. Следващия път ще очакваме да надобрееш, keep it up :)

Само предпоследното за индентацията и whitespace -а малко не ми се връзва. Все пак тва беше примера за лоша индентация и тн. на лекцията ;). Иначе след като видях какви неща предлага езика... все още се чуствам глупаво ;)

Идентацията ти ми изглежда окей в браузъра, но е възможно и да не е консистентна отдолу (ако си смесвала табове със спейсове). Нищо, сигурен съм, че това ще го запомниш добре ;)

А за нещата, които езикът предлага, няма как да ги знаеш преди да ги видиш, така че няма какво да се чувстваш глупаво. Просто следващия път ги имай предвид :)