Здрасти.
Това е мястото за въпроси по първа задача. В хранилището може да намерите примерния тест и инструкции как да го изпълнявате.
Въпроси приемаме всякакви.
Здрасти.
Това е мястото за въпроси по първа задача. В хранилището може да намерите примерния тест и инструкции как да го изпълнявате.
Въпроси приемаме всякакви.
Когато нещо може да се направи с операторно извикване на метод или директно такова, кое е предпочитания начин ?
Пример:
irb(main):003:0> 5 % 3 => 2 irb(main):004:0> 5.remainder(3) => 2
В повечето случаи, операторът е кратък и достатъчно смислово ясен. Въпрос на преценка според ситуацията. В конкретния случай, аз бих избрал оператора, който е "универсален" и в почти всички езици прави едно и също. Извикването на метод в случая би ме накарало да се замисля дали се случва нещо повече, което не е целта.
Като се каже "Смятайте, че в 0 и 1 метода е недефиниран"
какво трябва да връща 0.prime_divisors => [], nil или да хвърля exception?
Или просто няма да има 0.prime_divisors и 1.prime_divisors в автоматичните тестове, така че каквото и да връща, теста ще мине?
@Илиян, по-скоро второто.
Да се опитваме ли да решаваме проблемите оптимално или да не се напрягаме толкова? Имам предвид задачата с делителите, може да се опитат всички числа, може да се прескачат четни и т.н?
За въпросът на @Илиян не разбрах за това "Смятайте, че в 0 и 1 метода е недефиниран" какво трябва да става ?
@Адриан Каквото искате.
@Милан Предпочитаме кратък и ясен код пред бърз такъв. Ако ни трябваше бързо разлагане на прости числа, нямаше да го пишем на Ruby.
@Милан, не търсим най-оптималното решение. Това не е ПРАНКА :) Ако те дразни, че е супер неоптимално и ти идва отвътре да го оптимизираш и в случай, че това не вреди на баланса между оптимално изпълнение и четимост, действай и оптимизирай :)
@Адриан, имам предвид, че няма да има такива тестове, след като е недефинирано поведението му и след като не сме казали как да реагирате при недефинирано поведение.
Има малко добавки из условието. Може да гледате разлики в GitHub
В духа на условието, защо поведението е недефинирано за 1(-1)
?
"списък от простите числа, на които числото се дели", чисто математически []
е напълно точен отговор.
@Александър - чисто математически проблеми не виждам, но за 0 резултатът е безкраен, което от гледна точка на програмиране би представлявало малък проблем ;)
@Камелия - http://apidock.com/ruby/Generator
@Станислав - в условието на задачата е записано "връща списък". Аз с Ruby до преди този курс не съм се занимавала, но ако това, което показваш, може да се интерпретира като "списък", ще се изненадам много.
Ако греша, много моля някой да ме поправи. Не изключвам тази възможност.
Позволено ли е да използвам библиотеката mathn? :) ... Отговорих си сам, прочетох условието до края
@Камелия и @Станислав — този клас Generator
го има само в Ruby 1.8, в 1.9 е премахнат. Иначе, Камелия е права, че условието изисква списък. За списък можем да приемем нещо, което има метод each
, позволяващ обхождане, който yield
-ва по един аргумент на итерация. Това е нещото, което трябва да върнете, ако държите да не е списък :) За методи next
и подобни не се споменава.
Митьо ви лъже, трябва задължително да върнете масив. На приемаме нищо друго, независимо какви методи има.
Колкото до поведението в 0 и 1, то просто не ни е интересно. Върнете какво искате там, стига да не е някаква глупост (например символът :baba
).
Иначе, не знаех за Generator
, но Митьо е прав — това го няма в Ruby 1.9, понеже е едно от супер малкото неща, които ползва продължения (continuation). Шокиран съм. При всички случай, това да върнете безкрайна структура със всички прости числа в 0 е крива идея. Безкрайните структури са пипкава работа. Можете да изненадате хипотетичния потребител с една такава.
Здравейте. Написах следния тест :
describe "Hash#group_values" do
it "maps each value to an array of keys" do
{a: 1,b: 2, c: 3}.group_values.should eq {1 => [:a], 2 => [:b], 3 => [:c]}
end
end
и получавам грешка "syntax error" за самия тест. Не виждам къде е грешката.
Мисля, че ако махнеш { } след eq, ще стане.
@Гергана. Благодаря ти много, оправи се проблема ми.
Причината е, че eq мисли че е блок и за да знае, че е хеш, който му подаваш като аргумент трябва да бъде и в (), ако искаш да има {}.
Можем ли да преизползваме някой от методите, които сме си написали за целта на друг от исканите?
Например нашият Integer#prime_divisors
може да влезе в употреба за Range#fizzbuzz
, тъй като 3 и 5 са прости числа.
@Кирил: Шокиран съм. Това не ми бе хрумнало. Може, разбира се, но аз не бих го написал така.
Може ли след като сме получили коментари по задачата да променим кода, към който има забележки?
От един от коментарите разбрах, че трябва да разбия единият метод на два - тоест значи може да добавяме и свой методи различни от тези дадени в задачата?
@Пламен това е целта на коментарите по кода преди крайния срок
@Пламен Това, което аз разбирам е, че трябва задължително да имаш методи дефинирани като по условието, защото задачата се тества автоматично. От там нататък ти какво ще деифинираш мисля, че е изцяло твоя работа. Ако искаш можеш и класове да си правиш - важното е да може да се рънват тези методи. (За последното евентуално могат да взимат точки :D)
Очакваме от вас да пооправите неща, за които сме дали коментари. Дали е задължително - зависи от коментарите.
А иначе, може да пишете какъвто код си искате (без require
), стига да вярвате, че това е правилното решение.
В самия код ли са коментарите?
@Мартин - ами аз получих писло на пощата с линк. Принципно се намират на страницата с решението. Предполагам, че те ще станат публични след края на срока за предаване. Но аз даже и на моята си задача не намерих линк (може би съм пропуснал нещо), така че ползвам този дето съм го получил на пощата.
Линк получавате по пощата.
Това е функционалност, която трябва да се добави във сайта. Ако някой иска да отвори issue - да заповяда :) . Кода на сайта е тук
Здравейте,
трябва ли да правим стилистическа проверка за тази задача ? И ако да какви са условията ?
Едит: Сайтът я прие, значи всичко е привидно наред :D
Трябва да сте влезли в системата, за да може да отговаряте на теми.