Кирил обнови решението на 14.10.2012 16:19 (преди около 13 години)
-
self.се изпуска максимално много; в случая на теб не ти е необходим никъде и можеш да го изпуснеш навсякъде - Проверката за
kind_of?е ненужна въвfizzbuzz, понеже условието не го изисква; а и е малко излишно да го правиш на всяка итерация, би могъл да проверишbegin/endпреди началото наmap-а - А, и
mapсе ползва по-често като име, отколкотоcollect - Хешът, който връщаш в
group_valuesима страничен ефект — дифолтна стойност; може би не искаш да става така :)
- Не съм сигурен с какво мога да заменя
self. Там ще трябва да почета повече, тъй като и на мен не ми хареса. - Проверката
kind_of?я използвам, тъй като ако следn = :fizz if n % 3 == 0,nстане символ на следващите две няма оператор%за него и гърми. Много кофти идея ли е да го използвам така? - Относно
map- мерси, не знаех. - Дифолтната стойност я използвам, за да мога свободно да си ползвам операторът
+, защото иначе не мога да събераnilсArray. Работата е там, че все още не осъзнавам какъв ми е страничният ефект...
Да, кофти идея е да го ползваш така, понеже създаваш темпорална кохезия между двата реда код - ако ги разменя, има друг ефект. Друго което е кофти, е да не го правиш с elsif или с case. И двете правят кода по-труден за разбиране. Въобще, fizzbuzz-а ти е под критика.
Мда, съгласен съм. Направих го така за да ме одобри skeptic за броя редове в метод(5).
Първоначалната имплементация беше:
if n % 5 == 0 and n % 3 == 0
:fizzbuzz
elsif n % 3 == 0
:fizz
elsif n % 5 == 0
:buzz
else
n
Ей сега ме изби на простотия с case, след като ми позволи да си ползвам моя метод:
case n.prime_divisors.join
when /35/ then :fizzbuzz
when /3/ then :fizz
when /5/ then :buzz
else n
end
... но и това е 6 реда. Едва след това прочетох повече за case в ruby и ей сега качвам адекватно решение.
