Здравствуйте, Sinix, Вы писали:
S>Продолжаю смотреть код в CodeJam.
S>Всё классно, но несколько типов/методов не дотягивают до общей (довольно высокой) планки.
S> Может, их в Experimental пока?
S>1. DisjointSetsBase выглядит как заготовка для чего-то большего.
S>С точки зрения незнакомого с матчастью клиента код выглядит как один большой WTF.
Соглашусь, интерфейс класса не слишком очевидный. Если у кого есть идеи, как сделать лучше, то готов выслушать.
S>Ну вот навскидку
S>* базовый класс не абстрактный
А зачем ему быть абстрактным? Абстрактных методов у него нет. Создать его не выйдет, ибо protected .ctor
S>* как часть контракта торчит T (в идеале переименовать в TNode), который в публичном API недоступен,
Зато доступен в protected. Используется, чтобы лишние касты не городить потом.
S>* никаких проверок индексов
Это есть, да.
S>но это чисто косвенные признаки, главная проблема в том, что никаких реальных сценариев использования при дизайне API не использовалось.
S>Ну, или эти сценарии настолько экзотичные, что из API их не восстановишь.
Использовались. Основной сценарий был такой:
1) Сконструировать из пачки элементов.
2) Объединить некоторые из них.
3) Для каждого из элементов определить, в какое объединение он попал.