Решение на Девета задача от Христина Тодорова

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

Към профила на Христина Тодорова

Резултати

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

Код

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, който вика метода със същото име и параметри.

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

From https://github.com/fmi/ruby-retrospective-2015-1
 * branch            master     -> FETCH_HEAD
HEAD is now at 767dd8d Update the task name in the readme for clarity
Cloning into 'submission'...
HEAD is now at 352b32b little detail
From /tmp/ruby-retrospective-2015-1/checker
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> upstream/master

Changes URL:
https://github.com/hrist-todorova/ruby-retrospective-2015-1/compare/767dd8dfe46...352b32bf361

‘solutions/04.rb’ -> ‘/tmp/ruby-retrospective-2015-1/checker/solutions/04.rb’
‘solutions/02.rb’ -> ‘/tmp/ruby-retrospective-2015-1/checker/solutions/02.rb’
‘solutions/03.rb’ -> ‘/tmp/ruby-retrospective-2015-1/checker/solutions/03.rb’
‘solutions/01.rb’ -> ‘/tmp/ruby-retrospective-2015-1/checker/solutions/01.rb’
OK
........

Finished in 0.00484 seconds
8 examples, 0 failures
OK
....................

Finished in 0.01103 seconds
20 examples, 0 failures
OK
....................

Finished in 0.0858 seconds
20 examples, 0 failures
OK
.........................................................

Finished in 0.03062 seconds
57 examples, 0 failures
From https://github.com/fmi/ruby-homework
 * branch            master     -> FETCH_HEAD
HEAD is now at 9dd040c Modify a test in task 8 to not include empty cells
.

Finished in 0.00162 seconds
1 example, 0 failures

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

Христина обнови решението на 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).