Здравко обнови решението на 27.10.2011 11:42 (преди около 13 години)
Ето коментари. Добавил съм едни подсказки в условието, но ще ги повторя тук. Погледни ги все пак.
- Макар кодът ти да е кратък, добре е проверката дали песен отговаря на условието на е в
Song
. ИначеSong
е много глупав клас. -
tag.end_with?("!") ^ song.tags.include?(tag.chomp "!")
е хитро решение. И аз съм написал това. Можеш да опростиш дясната част още. - Този стил с хилядите ламбди е гаден, защото е труден за четене. Можеш просто да минеш с един
case
. - Странно е да обхождаш всички критерии и инкрементално да променяш
@result
. По-добре го сведи до@collection.select { |song| song.matches? criteria }
. - Тези ред с
criterion_to_condition
е безумно дълъг. За това вземаме точки. - Правиш твърде много
split
-ове. Ако ще ползваш регулярни изрази, можеш да минеш с един. - Отново, виж подсказките.
Можеш да оправиш тези неща и ще ти дадем точки.
Супер! Страхотно решение!
Не се притеснявай да отговаряш на коментарите ми, впрочем.
Благодаря :). Не успях да измисля как би могло да стане само с един split
. Би могло с един регулярен израз, но май ще е прекалено сложен. Между другото забелязах, че условието не казва ясно, че преди разделителите със сигурност няма whitespace, както съм приел в моето решение. Правилно ли съм приел или да поправя сплитовете на split(".").map(&:strip)
?
Хайде сега да смениш и #each
-а в Collection#initialize
с map
и ще си почти идеален.
Впрочем, погледни Array#compact
и виж къде можеш да го приложиш.
Само #map!
ми бърка в здравето. Всичко друго е супер.
Насърчително получаваш три бонус точки.
Благодаря!
И мен map!
не ми харесва и доста се чудих как да го направя. Първоначално го бях поправил на:
songs = ...
@collection = songs.map...
В случая, обаче, songs и collection са почти синоними като имена и изглежда малко объркващо. Най-добре щеше да е да измисля по-добро име за songs, но измислях само прекалено дълги. Затова реших да конструирам @collection
на стъпки, подобно на tags
. Чудех се между map!
и
@collection = ...
@collection = @collection.map...
Кой от всичките варианти щеше да е най-добър?
Последното щеше да е по-добре.