Радослав обнови решението на 15.10.2012 02:42 (преди около 12 години)
+class Integer
+ def prime_divisors
+ div = []
+ num = self
+ num = num < 0 ? num * (-1) : num
+ 2.upto(num) do |cur|
+ isprime = true
+ 2.upto(cur - 1) do |check|
+ if (cur % check) == 0
+ isprime = false
+ break
+ end
+ end
+ if (num % cur) == 0 and isprime
+ div << cur
+ end
+ isprime = true
+ end
+ div
+ end
+end
+
+
+class Range
+ def fizzbuzz
+ rng = self
+ newrng = []
+ rng.each do |cur|
+ if (cur % 15) == 0
+ newrng[cur - 1] = :fizzbuzz
+ elsif (cur % 5) == 0
+ newrng[cur - 1] = :buzz
+ elsif (cur % 3) == 0
+ newrng[cur - 1] = :fizz
+ else
+ newrng[cur - 1] = cur
+ end
+ end
+ newrng
+ end
+end
+
+class Hash
+ def group_values
+ oldhash = self
+ newhash = Hash.new
+ curkeys = []
+ curval = 0
+ is_included = false
+
+ oldhash.each do |key, val|
+ curval = val
+
+ newhash.each do |nkey, nval|
+ if nval == val
+ is_included = true
+ end
+ end
+
+ oldhash.each do |tempkey, tempval|
+ if is_included == false and (curval == tempval)
+ curkeys << tempkey
+ end
+ end
+
+ newhash = newhash.merge({curval => curkeys})
+ curkeys = []
+ is_included = false
+ end
+ newhash
+ end
+end
+
+class Array
+ def densities
+ symbols = self
+ counts = []
+ cnt = 0
+ temp = 0
+ symbols.each do |sym|
+ cnt = cnt + 1
+ end
+ cnt = cnt - 1
+ 0.upto cnt do |x|
+ 0.upto cnt do |y|
+ if symbols[x] == symbols[y]
+ temp = temp + 1
+ end
+ end
+ counts << temp
+ temp = 0
+ end
+ counts
+ end
+end
Виждам, че си се утрепал от писане на код, който е страшно нетипичен за Ruby :) Ако беше на последната лекция, може би си видял примерния код, който ние показахме. Ако не си, виж презентацията от тогава. Също погледни решенията на твои колеги, на които сме дали бонус точки, за да видиш как изглеждат нещата в Ruby стил. Изисква време човек да привикне към този стил, така че не се притеснявай, че от първия път не си уцелил :) Ето малко коментари по текущото ти решение:
- Вероятно знаеш, ако си бил на последната лекция, че имената на почти всичките ти променливи са зле избрани и че трябва да се постараеш повече в това направление следващия път
-
fizzbuzz
иdensities
се получават много добре сmap
; допълнително,densities
се прави на един ред, с този код:map { |item| count item }
:) -
Array.new
,Hash.new
и т.н. никога не се ползват в този си вид (без аргументи); винаги се предпочита литералния синтаксис в тези случаи, т.е.[]
,{}
и прочее -
is_included == false
, по-известно като!is_included
... :) - Скобите в условията на ред 14, ред 61 не са нужни и се изпускат
- Това
newhash = newhash.merge({curval => curkeys})
е тъп начин да се запишеnewhash[curval] = curkeys
(игнорирам зле именованите променливи) - За ред 5 си има метод
abs
:)
Следващия път очакваме да си надобрял :)