Втора задача

  1. @Екатерина, правилно си забелязала :)

    Добавих в условието, че няма да тестваме с такава комбинация. Не е нужно да се грижите за този случай. SignFilter трябва да работи коректно за останалите типове числа.

  2. Здравейте, ако имамe

    numbers = NumberSet.new

    numbers << 42

    numbers << 42

    numbers << Rational( 84/2 )

    numbers << 10

    numbers[Filter.new { |number| number.even? }].to_a

    Какво се очаква да има вътре ? След като even? не е дефиниран за тип Rational очаква ли се да го филтрира? Повторенията махат ли се ?

  3. @Снежана

    При така зададения код на мен ми се струва, че първоначално в numbers би трябвало да влязат само 42 и 10 и въобще да нямаш проблема с филтрирането по-нататък. А иначе се надявам, че няма да се тества подобен филтър върху множества, съдържащи числа, за които не е дефиниран?

  4. Правилно @Мая.

    След като 42 влезе в NumberSet добавянето на второто 42 и Rational(84, 2) се игнорират, тъй като число с такава стойност вече присъства в множеството. Добавя се 10 и числата в numbers са 42 и 10.

    Няма да тестваме с филтри, невалидни за определен тип числа. :)

  5. Относно операторите & и | - дали сте примера:

    numbers[SignFilter.new(:non_negative) & Filter.new { |number| number.even? }].to_a #=> [0, 2, 4]

    Само по един или два филтъра ли ще бъдат подавани? Т.е. дали ще мешате 3-4 и т.н.? И дали трябва да се третира случая при подаване на 0 аргументи?

    П.П.: Пише се 'конструктОр'.

  6. @Никола, ясно ми е, че филтъра, който се генерира, е един. Но имплементацията при един оператор или няколко е различна (поне при мен).

    @Димитър, забравих да попитам дали условията на задачите са качени в хранилището. : )

  7. Условията на задачите, примерните тестове и skeptic ограниченията винаги се появяват в хранилището щом пуснем задачата, освен ако не сме сбъркали нещо. (:

    Приеми, че може да има произволен краен брой филтри, с & и | между тях.

  8. Какво е очакваното поведение на следния код, тъй като операторът > (и не само.. even? примерно) не е дефиниран за Complex?

    numbers = NumberSet.new

    numbers << 1 << 2 << 1.1 << 3.0 << 10 << Rational(22, 2) << 11 << Complex(3, 2)

    numbers[Filter.new { |number| number > 3 }]

  9. Обектите NumberSet трябва да предоставят и методи size и empty?, които трябва да работят както очаквате...

    Бих очаквал empty? да е предикат, който връща false, ако има нещо в NumberSet-а или true иначе. Вместо това:

    ... empty? е number set без нито един елемент.

  10. @Деян, по-горе съм писал, че няма да тестваме числа с филтри, които не са валидни за тях. Приеми, че ако тестваме с филтър, който включва >, то всички числа в NumberSet обекта ще отговарят на >.

    @Ясен, NumberSet#empty? трябва да е предикат, който връща false, ако има обекти в NumberSet-а и true иначе. Втория ред от условието не е коректен.

  11. @Евгений, относно Enumerable - пише го в условието:

    NumberSet трябва да имплементира Enumerable, позволявайки ни да итерираме по числата, които са част от множеството и ни дава възможност да използваме всички удобни методи, предоставени от модула.

    Това означава, че вашият клас трябва да има в началото си include Enumerable и да дефинира метод each, който реализира обхождане.

  12. При сечението или обединението на два филтъра, третият филтър от какъв тип трябва да бъде? Примерно ако имаме сечение на TypeFilter и SignFilter новополученият филтър като какъв трябва да се върне?

  13. Би ми било интересно да видя решенията на другите след крайния срок, за всяко второ нещо ми се получава някаква спънка и съответно не работи както трябва(ако изобщо работи) или не мога да го измисля...

Трябва да сте влезли в системата, за да може да отговаряте на теми.