Христина обнови решението на 26.01.2016 18:57 (преди около 9 години)
+REPOSITORY = 'https://github.com/hrist-todorova/ruby-retrospective-2015-1'
+
+#Двадесет неща, които научих.
+
+#1. Хешът е много полезен, когато имаме нужда да съпоставим елементи
+# от 2 множества. В случая със задачата за валути: съпоставяме
+# съответно всяка валута на числена стойност и така удобно извършваме
+# конвертиране вместо да ползваме един голям case.
+
+#2. Трябва да се внимава за безкраен цикъл. Във втора задача при
+# добавянето на храна създавах позиция чрез случайни числа и
+# проверявах дали тя се съдържа в змията или текущата храна. При
+# съвпадение правех нова позиция и проверявах за нея. При наближаващ
+# край на играта този начин се оказва бавен и неефективен. По-добре е да
+# се намерят всички възможни позиции, да се извадят вече заетите и да се
+# избере някоя от тях. Така, когато няма възможност за повече храна,
+# функцията ще върне nil и играта приключва.
+
+#3. Научих за конструкцията [*i..n], която не бях виждала досега. Тя
+# създава масив от поредните числа от i до n.
+
+#4. Научих за метода sample, който връща произволен елемент от
+# масива, върху който е приложен.
+
+#5. Предпочитаме and и or вместо && и ||. Булевите оператори and и or
+# имат еднакъв приоритет, а && има по-висок приоритет от || и
+# при невнимателно използване могат да се получат грешки.
+
+#6. При включване на модул Enumerable трябва задължително да дефинираме
+# метод each.
+
+#7. Когато имаме
+# if something
+# do-other-thing
+# end
+# e по-прегледно да се напише като one-liner
+# do-other-thing if something
+
+#8. Reduce e много по-добра алтернатива от обиколка с each и запазване в
+# променлива.
+
+#9. Подравняването на кода вече ми дава някакво спокойствие :D
+
+#10. Винаги трябва да се внимава за базата на операциите. Ако n = 0, a
+# function(n) трябва да върне масив, правим проверка и тя трябва да
+# връща [], а не да я оставяме с неопределена стойност връщайки nil.
+# Ако ще събираме числа базата е 0, ако ще умножаваме - 1.
+
+#11. Научих за метода partition на Enumerable, който разделя даден масив
+# на два спрямо даден предикат.
+
+#12. Успях да осмисля странното за мен yield-ване.
+
+#13. attr-accessor-ите пестят доста редове.
+
+#14. При повтарящо се тяло на методи е добре да се параметризира и
+# използва многократно един общ метод.
+
+#15. Премахнах всички for-ове от четвърта задача, защото са лош стил.
+
+#16. С chain-ването на методи получаваме ясно, лесно четимо и логически
+# свързано решение.
+
+#17. Добавих паралелно присвояване където е възможно, защото ми харесва.
+
+#18. _ се използва за placeholder - параметър, който няма да използваме.
+
+#19. Научих кога да ползвам self.
+
+#20. При повтаряне на методи в наследник на клас можем да
+# използваме super, който вика метода със същото име и параметри.
Имаш две наказателни точки, поради неспазване на стил (имена на променливи като rol
/col
/counter
/product
/etc, ненужни празни редове, лоша индентация на места) и пропуснати възможности за подобряване на решенията (например, изнасянето на хеша от задача 1 в константа и по-добро реализиране на rational sequence в задача 3).