Камен обнови решението на 21.10.2014 23:55 (преди около 11 години)
Идеално! Много ми харесва решението.
Имам два много дребни коментара:
- Не слагай празен ред преди първия метод дефиниран в клас.
 - Когато дефинираш оператор кръщавай параметъра 
other. Примерноdef &(other). Дребно нещо, което помага за подобряване на консистентността. 
Няколко неща, които аз бих направил, но не смятам за абсолютно правилни/фатални:
- Бих наименовал метода 
Filter#satisfies?/Filter#matches?или нещо подобно вместоFilter#call. Това мисля, че ще ми направи кода една идея по-четим. Така в метода&ще имам нещо от сорта наFilter.new { |x| self.satisfies? x and other.satisfies? x } - Бих подравнил 
thenклаузите вcaseза да се изравнятsuperизвикванията. В случая са доста подобни и мисля, че ще изглежда прилично. 
Anyways, според мен решението ти заслужава бонус точки.
Edit
Пропуснах да спомена, че NumberSet#[] трябва да връща NumberSet обект :)
И още една дреболия: скобите след super са излишни. Това е достатъчно: super { |x| ... }
Първоначалното решение което се опитах да направя наследяваше Array и Proc, но по някаква причина не успях да override-на initialize метода. До колкото разбрах не е добра практика да се наследяват core обекти защото може да се държат по-странно от нормални ruby обекти, което мисля усетих с Proc. Та от там остана и call метода. Ще пусна поправено решение малко по-късно днес. И за NumberSet#[] също.
@mitio Ако не сложиш скоби след super се препредават параметрите от горния метод. Това било един от малкото случаи в ruby в които скобите имат значение.
