Росен обнови решението на 27.01.2016 22:46 (преди около 9 години)
+REPOSITORY = 'https://github.com/pockata-kt/ruby-retrospective-2015-1'
+
+#Научих, че/Подобрих в програмата си :
+# 1. Зад.1: Вместо да използвам if-elsif опратори за проверка на стойността
+# на currency мога да сложа различните възможности като ключове в хеш
+# 2. Зад.2: Паралелно присвояване от масив на няколко променливи => x, y = arr
+# 3. Зад.2: Функцията drop(1) е по-добра от изваждане за премахване на начален
+# елемент от масив
+# 4. Зад.3: Вместо променлива и цикъл за итериране е по-добре да ползвам upto
+# 5. Зад.3: Проверката, дали числото е 1 трябва да е преди цикъла, когато
+# правим проверка за просто число
+# 6. Зад.3: По-удобно е да monkey patch-нем prime? в Integer - така ще може
+# да я извикваме на дадено число, а не да и подаваме числото като аргумент
+# 7. Зад.3: По-удобно е, чрез lazy, each да взема нужния брой елементи от
+# безкраен генератор на редица, отколкото той да генерира самите числа
+# 8. Зад.3: Reduce може, вместо блок, да приеме като символ операция, която
+# вече я има вградена в езика и да я приложи на за всеки елемент (например :*)
+# 9. Зад.3: Вместо да правя select на масив два пъти, за да отделя елементите,
+# които отговарят и тези, които не отговарят на даден критерий, мога да ползвам
+# partition
+# 10. Зад.3: За обработване на повече от 1 елемент на масив наведнъж не е
+# нужен цикъл и стъпка, а може да се обработи, чрез map на each_slice(n)
+# 11. Зад.3: Функция last, вместо [-1], за достъп до последния елемент на масив
+# 12. Зад.3: Вместо многобройно смятане на RationalSequence(n).reduce(:+)
+# за различни n, може да се сметне веднъж, за достатъчно голямо n и да вземат
+# нужните ни елементи с take_while
+# 13. Зад.3: Функциите, генериращи редиците е добре да са private
+# 14. Зад.4: Може да се направят комбинациите на всички елементи на 2 масива
+# чрез функцията product
+# 15. Зад.4: Принципът на работа на sort_by (мапване на всеки елемент към
+# стойности, които могат да бъдат сортирани)
+# 16. Зад.4: Може да се използва pop и shift, вместо delete_at(0| -1)
+# 17. Зад.4: Минаване се на следваща итерация на цикъл, чрез next; може да се
+# върне и стойност с next
+# 18. Зад.4: Извикване на родителската версия на функция става със super
+# 19. Зад.4: Могат да се вземат всички възможности за последователни n елемента
+# на масив, чрез each_cons(n)
+# 20. Зад.4: Удобно е сравняване на обекти(карти), чрез сравняване на индекси
+# на съставящите ги елементи в наредени(сортирани) масиви
+# 21. Беше трудно
Имаш 0 точки, защото си копирал четвъртата задача. Трябваше да напишеш решение на база решията на другите, не да вземеш готово и да промениш нещо малко в него.
Имаш 2 точки бонус, защото си направил поне нещо :)
малко бележки
- commit-ите, които си правил объркват, примерно пише, че променяш task2 а променяш и 3-та задача, или пък пише, че поправяш 3-та, а си сменял само 4-та и тн. тн.
- във втора задача правиш странни нeща в
is_obstacle?
-
5.
,21.
... -
6.
- Обикновено се избягва monkey пачването. Трябва да имаш много добра причина за да го правиш. -
8.
- Символа, който се подава на reduce е името на метод, който ще се извика. пр.%w(foo bar baz).reduce(:concat)
, т.е.:+
е метод -
13.
- Грубо казано: Пишеш един клас/модул с някаква цел, т.е. предоставяш набор от публични методи, който са нужни да си свършиш работата. Всички помощни методи се правятprivate
или пък ако са полезни могат да се извадят в друг клас/модул. -
17.
-next
не връща стойност в цикъл.. Т.е. ако вwhile
,for
,until
направишnext 123
, то123
ще се игнорира. Ако имаш някакъв блок / proc, то тогаваnext
може да върне стойност. Идеята е, че
def baz
v1 = yield 'foo'
v2 = yield 'bar'
v3 = yield 'baz'
[v1, v2, v3].join("\n")
end
def foo
baz do |m|
next "I'll end up in v2 in baz yey" if m == 'bar'
#return 'lalala' # Ще върне от метода foo
m
end
end
puts foo
Т.е. прегледай пак лекцията за прокове и ламбди.