Решение на Първа задача от Христо Хърсев
Резултати
- 6 точки от тестове
- 0 бонус точки
- 6 точки общо
- 13 успешни тест(а)
- 1 неуспешни тест(а)
Код
Лог от изпълнението
F............. Failures: 1) Integer#prime? checks if a number is prime Failure/Error: -13.prime?.should eq false expected: false got: true (compared using ==) # /tmp/d20131023-4395-1vvkc1f/spec.rb:3:in `block (2 levels) in <top (required)>' # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>' # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>' Finished in 0.02346 seconds 14 examples, 1 failure Failed examples: rspec /tmp/d20131023-4395-1vvkc1f/spec.rb:2 # Integer#prime? checks if a number is prime
История (3 версии и 3 коментара)
Христо обнови решението на 13.10.2013 16:10 (преди около 11 години)
А ето и малко бележки:
-
least_prime_divisor
не е много добро име;smallest_prime_divisor
е по-добро - В същия този метод, тернарният оператор е лош избор; изразът е твърде сложен за него и става нечетим; по-добре ползвай
return 1 if abs == 1
- Предпочитаме вариантите с думи на проверката за делимост, т.е.
remainder(number)
и методитеzero?
иnonzero?
- Ред 20 - виж метода
String#chars
- На ред 27, няма нужда от това присвояване в началото и тази променлива
hash
; ако искаш да ползвашtap
, окей, но поне го направи на два реда, че така вложеният map не се чете добре; - Пак там, вътрешният
hash
не е добро име;frequencies
е по-добро - Ред 31 - не се слагат така скобите около
inject
; по-скоро така:inject(:+).to_f
- Методите
inject
иreduce
са синоними и предпочитамеreduce
, по-близък е до идеята на това, което искаме да постигнем - Ред 35 - интервал около
-
- Ред 39 - мутираш текущия обект, това е зло! Пренапиши го
Христо обнови решението на 13.10.2013 21:05 (преди около 11 години)
Мерси за забележките :) combine_with, беше наистина ужасен.
Видях и сега в style guide-а за size
over length
и reduce
over inject
и т.н.
Попринцип гледах да се съобразя с всичко написано, но както се вижда имам желание да са one-liner методчета - just for the sake of greatness.
И възникнаха 2 въпроса:
1) 35-ти ред ползването на i наместо index, ок ли е? Защото оставам с впечетлението, че е практика в Ruby community-то, за разлика от Python таковата (откъдето може да се каже че идвам).
2) Ако отговора на (1) е, че не е добре, комбинирано с неодобрения за име на метод "min_prime_divisor", да спра да се правя на интересен и да пренапиша кода малко по-нормално освен :)
П.П. Sorry за pull request-а, въобще не прегледах closed-натите какво представляват.
i
за индекс променлива е окей. Достатъчно универсално разпознаваемо е. Другото може да го оставиш така за разнообразие, ако смяташ, че ще работи :)
Принципно, обаче, човек не трябва да се "прави на интересен", умен, гениален и прочее, когато пише код, особено когато кодът е споделен в екип или е по реален проект и не е просто някакво упражнение. Колкото по-прост и четим е кодът, толкова по-добре.
За pull request-а няма проблем, разбира се.