Исправил subsets, предыдущая занимала бОльшую часть времени алгоритма (без явной генерации подмножеств здесь кажется не обойтись)
Добавил тест на производительность
IsSome => match (оставлял IsSome, потому что казалось, что можно сделать без лесенки ифов, но видимо в данном случае не получится, только если на функции разбивать)