Милен обнови решението на 22.01.2014 15:11 (преди почти 11 години)
опа .. :D счупих ви сайта малко. Сега ще го оправя!
опа .. :D счупих ви сайта малко. Сега ще го оправя!
В решението на задача 1 не ми харесва името "lpf". В четвърта задача имаш други неспазени skeptic ограничения, като брой методи в клас и дължина на ред. Тестовете ти минават и ще допусна, че си имал проблем с най-новата версия на Skeptic и Aspell и затова ще ти приема решенията.
В някои от решенията си далеч от желаните оптимални решения. Един пример е методът harmonic
в първа задача - там ползваш each
по неидиоматичен начин и това не е добре. Там се ползва map
+ reduce
. Недобре изчистени решения се наблюдават и в другите задачи (като изключим трета, която май не си я пипал/променял ти.
Имам бележка по употребата на Struct (напр. в четвърта задача при теб). Виждам смисъл в това само ако има нужда да се замести клас, т.е. се спестява дефиницията на отделен клас. Употреба като тази: class Executor < Struct.new(:instructions, :labels, :ax, :bx, :cx, :dx)
не намирам за добра. Предпочитам да дефинирам атрибутите с attr_accessor
- не само, че е по-кратко, но и е по-праволинейно, просто и ясно. Struct носи допълнителни неща, които в не само, че повечето случаи не са необходими (например, енумерация на атрибутите), ами са и направо излишни.
Това не е съвсем вярно - "Замразените обекти играят ролята на константи в Ruby." Константите в Ruby са си константи, а замразените обекти са нещо съвсем отделно. Спокойно може да имаш замразен обект, присовен на променлива. Добра практика е да се замразяват обекти, които присвояваш на константи, като целта е да се избегне неволно мутиране на обекта зад константата. Например, низове и хешове позволяват мутиране на обекта с методи като upcase!
, reject!
, []=
и прочее. Замразявайки обекта, ще се предпазим от тази програмистка грешка.
fillList
трябва да се запише fill_list
.
За проблемите с производителността на анонимните функции (lambda & proc) може да се спори.
По т. 20, това се казва "printf/sprintf". В Ruby също се нарича така, понеже String#%
вика Kernel.sprintf
.
Като цяло ми харесват изводите ти и се надявам, че си доволен от наученото. Съветвам те да си избереш решенията на трима колеги на пета задача, които съм оценил с максимален брой точки и да ги разгледаш, за допълнително вдъхновение :)