You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

39 lines
2.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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 наборами по 712 чисел. Найти сумму $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)