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

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

Към профила на Росен Тодоров

Резултати

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

Код

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. Беше трудно

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

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 ba6550d Merge branch 'master' of github.com:pockata-kt/ruby-retrospective-2015-1
From /tmp/ruby-retrospective-2015-1/checker
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> upstream/master

Changes URL:
https://github.com/pockata-kt/ruby-retrospective-2015-1/compare/767dd8dfe46...ba6550dedb3

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

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

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

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

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

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

Т.е. прегледай пак лекцията за прокове и ламбди.