# Project Euler 105 — Special Sum Sets ## Условие задачи Пусть $S(A)$ — сумма элементов множества $A$. Множество $A$ называется special sum set, если для любых двух непустых непересекающихся подмножеств $B$ и $C$ выполняются: 1. $S(B) \ne S(C)$ (суммы не равны) 2. Если $|B| > |C|$, то $S(B) > S(C)$ Дан файл `sets.txt` с 100 наборами по 7–12 чисел. Найти сумму $S(A)$ по всем special sum set. ## Требования к решению - Функциональный стиль (F#) - Обязательно использовать хвостовую рекурсию хотя бы раз - Использовать методы работы с коллекциями (`List.map`, `List.filter`, и т.д.) - Запрещены циклы - Решение должно быть разбито на несколько осмысленных коммитов, разнесённых по времени ## Теория и критерии 1. **Префикс-суффикс неравенства**: для отсортированного $A$: $$ \sum_{i=1}^{k+1} a_i > \sum_{i=0}^{k-1} a_{n-i}, \quad k=1,\dots,\left\lfloor\frac n2\right\rfloor $$ Это гарантирует правило (2). 2. **Уникальность всех сумм**: все суммы непустых подмножеств должны быть различны. ## Алгоритм (F#) 1. Прочитать файл, преобразовать строки в списки чисел 2. Для каждого множества: - Проверить префикс-суффикс неравенство (хвостовая рекурсия) - Проверить уникальность всех сумм подмножеств (методы коллекций) 3. Просуммировать суммы подходящих множеств ## Проверка - Зарегистрироваться на projecteuler.net - Проверить ответ (для задачи 105 — 73702)