Решение на Първа задача от Елена Миронова

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

Към профила на Елена Миронова

Резултати

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

Код

class Integer
def prime_divisors
if self==0 or self.abs==1 then "nil"
else
prime_div=[]
divisor=2
while divisor < self.abs + 1
if self%divisor==0
is_prime=true
j=2
limit=divisor/2
while j<limit +1
is_prime=false if divisor%j==0
j+=1
end
prime_div << divisor if is_prime
end
divisor+=1
end
return prime_div
end
end
end
class Range
def fizzbuzz
fizzbuzz_arr=self.to_a
fizzbuzz_arr.each_with_index { |val, index|
fizzbuzz_arr[index]=:fizz if val%3==0 and val%5!=0
fizzbuzz_arr[index]=:buzz if val%5==0 and val%3!=0
fizzbuzz_arr[index]=:fizzbuzz if val%3==0 and val%5==0
}
return fizzbuzz_arr
end
end
class Hash
def group_values
group=Hash.new()
self.each_value{ |val|
val_keys=[]
self.each{ |key, value|
if val==value
val_keys << key
end
}
group[val]=val_keys
}
return group
end
end
class Array
def densities
dens=[]
self.each{|val|
count=0
self.each{|value|
if val==value
count+=1
end
}
dens << count
}
return dens
end
end

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

........

Finished in 0.01695 seconds
8 examples, 0 failures

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

Елена обнови решението на 14.10.2012 18:21 (преди над 11 години)

+class Integer
+ def prime_divisors
+ if self==0 or self.abs==1 then "nil"
+ else
+ prime_div=[]
+ divisor=2
+ while divisor < self.abs + 1
+ if self%divisor==0
+ is_prime=true
+ j=2
+ limit=divisor/2
+ while j<limit +1
+ is_prime=false if divisor%j==0
+ j+=1
+ end
+ prime_div << divisor if is_prime
+ end
+ divisor+=1
+ end
+ return prime_div
+ end
+ end
+end
+
+class Range
+ def fizzbuzz
+ fizzbuzz_arr=self.to_a
+ fizzbuzz_arr.each_with_index { |val, index|
+ fizzbuzz_arr[index]=:fizz if val%3==0 and val%5!=0
+ fizzbuzz_arr[index]=:buzz if val%5==0 and val%3!=0
+ fizzbuzz_arr[index]=:fizzbuzz if val%3==0 and val%5==0
+ }
+ return fizzbuzz_arr
+ end
+end
+
+class Hash
+ def group_values
+ group=Hash.new()
+ self.each_value{ |val|
+ val_keys=[]
+ self.each{ |key, value|
+ if val==value
+ val_keys << key
+ end
+ }
+ group[val]=val_keys
+ }
+ return group
+ end
+end
+
+class Array
+ def densities
+ dens=[]
+ self.each{|val|
+ count=0
+ self.each{|value|
+ if val==value
+ count+=1
+ end
+ }
+ dens << count
+ }
+ return dens
+ end
+end

Елена обнови решението на 14.10.2012 18:35 (преди над 11 години)

class Integer
- def prime_divisors
- if self==0 or self.abs==1 then "nil"
- else
- prime_div=[]
- divisor=2
- while divisor < self.abs + 1
- if self%divisor==0
- is_prime=true
- j=2
- limit=divisor/2
- while j<limit +1
- is_prime=false if divisor%j==0
- j+=1
- end
- prime_div << divisor if is_prime
- end
- divisor+=1
+ def prime_divisors
+ if self==0 or self.abs==1 then "nil"
+ else
+ prime_div=[]
+ divisor=2
+ while divisor < self.abs + 1
+ if self%divisor==0
+ is_prime=true
+ j=2
+ limit=divisor/2
+ while j<limit +1
+ is_prime=false if divisor%j==0
+ j+=1
end
- return prime_div
- end
- end
+ prime_div << divisor if is_prime
+ end
+ divisor+=1
+ end
+ return prime_div
+ end
+ end
end
class Range
- def fizzbuzz
- fizzbuzz_arr=self.to_a
- fizzbuzz_arr.each_with_index { |val, index|
- fizzbuzz_arr[index]=:fizz if val%3==0 and val%5!=0
- fizzbuzz_arr[index]=:buzz if val%5==0 and val%3!=0
- fizzbuzz_arr[index]=:fizzbuzz if val%3==0 and val%5==0
- }
- return fizzbuzz_arr
- end
+ def fizzbuzz
+ fizzbuzz_arr=self.to_a
+ fizzbuzz_arr.each_with_index { |val, index|
+ fizzbuzz_arr[index]=:fizz if val%3==0 and val%5!=0
+ fizzbuzz_arr[index]=:buzz if val%5==0 and val%3!=0
+ fizzbuzz_arr[index]=:fizzbuzz if val%3==0 and val%5==0
+ }
+ return fizzbuzz_arr
+ end
end
class Hash
- def group_values
- group=Hash.new()
- self.each_value{ |val|
- val_keys=[]
- self.each{ |key, value|
- if val==value
- val_keys << key
- end
- }
- group[val]=val_keys
- }
- return group
- end
+ def group_values
+ group=Hash.new()
+ self.each_value{ |val|
+ val_keys=[]
+ self.each{ |key, value|
+ if val==value
+ val_keys << key
+ end
+ }
+ group[val]=val_keys
+ }
+ return group
+ end
end
class Array
- def densities
- dens=[]
+ def densities
- self.each{|val|
+ dens=[]
- count=0
+ self.each{|val|
- self.each{|value|
+ count=0
- if val==value
+ self.each{|value|
- count+=1
+ if val==value
- end
+ count+=1
- }
+ end
- dens << count
+ }
- }
+ dens << count
- return dens
+ }
- end
+ return dens
-end
+ end
+end
+
+
  • Много не консистентно идентиране и whitespace-ing. Прочети https://github.com/fmi/ruby-style-guide и се опитвай да го спазваш. Четимостта на кода се взима наистина насериозно!
  • Избягвай конструкции като:

    if contidion then single_line_expression
    else
      block
      of
      code
    end
    

    Не се чете добре.

  • Оставяй по една шпация преди и след операторите. https://github.com/fmi/ruby-style-guide#syntax
  • Избягвай скобите, особено в случаите, когато методите не приемат аргументи. Предпочитай Hash.new пред Hash.new().
  • Избягвай return, освен ако не трябва да излезеш от метод преждевременно.
  • Изпускай self където можеш.
  • Използвай do ... end когато блоковете се разполагат на няколко реда и {} само когато са на един. https://github.com/fmi/ruby-style-guide#syntax
  • Наистина прочети https://github.com/fmi/ruby-style-guide.
  • Опитвай се да си именуваш променливите ясно. В повечето случаи са там да държат нещо, тяхното име е просто страничен ефект от нуждата му.
  • Разгледай повечето методи на стандартните типове. Всичките задачи се решават много по кратко и четимо с тях. Обърни внимание на Array и Hash.