Втора задача

  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. Би ми било интересно да видя решенията на другите след крайния срок, за всяко второ нещо ми се получава някаква спънка и съответно не работи както трябва(ако изобщо работи) или не мога да го измисля...

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