Решение на Девета задача от Георги Киряков

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

Към профила на Георги Киряков

Резултати

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

Код

REPOSITORY = 'http://github.com/gk95/ruby-retrospective-2015-1'
# Двадесет неща, които научих.
#
# 01. По-добра четимост чрез отделени редове за всеки елемент на hash обект.
# 02. Поставяне на запетая след последния елемент от hash обект.
# 03. Използване на оператор за сравнение <=>.
# 04. Разликата между '..' и '...' при range.
# 05. (x...y).to_a е по ясен вариант на [*x..y-1].
# 06. По изчистен вид чрез заместване на dup и push с +
# 07. Изваждане на по-сложна логика в отделен метод, с цел по-лесно четим и
# разбираем код.
# 08. Употреба на '** 0.5' вместо по-дългото 'Math.sqrt'.
# 09. Метода each от Enumerable да препредава подаден блок и по този начин
# да се запазва свойството, блок да се предава като аргумент на метода.
# 10. Еквивалентността на slice!(0) с shift и slice!(-1) с pop.
# 11. По-кратък код чрез а.sort_by! вместо arr = аrr.sort_by
# 12. Методите, които се използват само в тялото на класа да са private.
# 13. all? вместо each и if за да се провери дали всички елементи
# спазват дадено условие
# 14. enum_for създава удобен за работа с map, each, ... енумератор
# 15. take_while може да работи с безкрайни списъци
# 16. По ясен код в конструктора на Deck::Hand, чрез премахване на излишния super
# 17. Методите ranks и suits всеки път създават нов масиви, което не е добра идея
# 18. Метода << понякога седи естетически по-добре от push.
# 19. Struct.new спестява място и писане на ==, attr, конструктор ...
# 20. В контекста на първа задача (snake + food), ще работи "по-бързо" от
# (snake | food), тъй като + не мисли за дублирани стойности,
# а в задачата такива не са възможни.
##

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

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 4f95108 code improvement
From /tmp/ruby-retrospective-2015-1/checker
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> upstream/master

Changes URL:
http://github.com/gk95/ruby-retrospective-2015-1/compare/767dd8dfe46...4f95108a80a

‘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.0048 seconds
8 examples, 0 failures
OK
....................

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

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

Finished in 0.0302 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.00156 seconds
1 example, 0 failures

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

Георги обнови решението на 26.01.2016 21:54 (преди около 9 години)

+REPOSITORY = 'http://github.com/gk95/ruby-retrospective-2015-1'
+
+# Двадесет неща, които научих.
+#
+# 01. По-добра четимост чрез отделени редове за всеки елемент на hash обект.
+# 02. Поставяне на запетая след последния елемент от hash обект.
+# 03. Използване на оператор за сравнение <=>.
+# 04. Разликата между '..' и '...' при range.
+# 05. (x...y).to_a е по ясен вариант на [*x..y-1].
+# 06. По изчистен вид чрез заместване на dup и push с +
+# 07. Изваждане на по-сложна логика в отделен метод, с цел по-лесно четим и
+# разбираем код.
+# 08. Употреба на '** 0.5' вместо по-дългото 'Math.sqrt'.
+# 09. Метода each от Enumerable да препредава подаден блок и по този начин
+# да се запазва свойството, блок да се предава като аргумент на метода.
+# 10. Еквивалентността на slice!(0) с shift и slice!(-1) с pop.
+# 11. По-кратък код чрез а.sort_by! вместо arr = аrr.sort_by
+# 12. Методите, които се използват само в тялото на класа да са private.
+# 13. all? вместо each и if за да се провери дали всички елементи
+# спазват дадено условие
+# 14. enum_for създава удобен за работа с map, each, ... енумератор
+# 15. take_while може да работи с безкрайни списъци
+# 16. По ясен код в конструктора на Deck::Hand, чрез премахване на излишния super
+# 17. Методите ranks и suits всеки път създават нов масиви, което не е добра идея
+# 18. Метода << понякога седи естетически по-добре от push.
+# 19. Struct.new спестява място и писане на ==, attr, конструктор ...
+# 20. В контекста на първа задача (snake + food), ще работи "по-бързо" от
+# (snake | food), тъй като + не мисли за дублирани стойности,
+# а в задачата такива не са възможни.
+##

Не бих използвал Struct за спестяване на attr_* и initialize. Това по-скоро е hash, в който ключовете са известни. Някаква структура от данни :) Даже е Enumerable. Като погледнаш четвърта задача и ние леко сме си оставили ръцете. Пък и трябваше да направим поне Card = Struct.new(:rank, :suit) http://ruby-doc.org/core-2.3.0/Struct.html#new-method.