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.
|
|
8 months ago | |
|---|---|---|
| .. | ||
| obj | ||
| Dockerfile | 8 months ago | |
| Individual Task 1.fsproj | ||
| Program.fs | 8 months ago | |
| README.md | ||
| sets.txt | ||
README.md
Project Euler 105 — Special Sum Sets
Условие задачи
Пусть S(A) — сумма элементов множества A. Множество A называется special sum set, если для любых двух непустых непересекающихся подмножеств B и C выполняются:
S(B) \ne S(C)(суммы не равны)- Если
|B| > |C|, тоS(B) > S(C)
Дан файл sets.txt с 100 наборами по 7–12 чисел. Найти сумму S(A) по всем special sum set.
Требования к решению
- Функциональный стиль (F#)
- Обязательно использовать хвостовую рекурсию хотя бы раз
- Использовать методы работы с коллекциями (
List.map,List.filter, и т.д.) - Запрещены циклы
- Решение должно быть разбито на несколько осмысленных коммитов, разнесённых по времени
Теория и критерии
- Префикс-суффикс неравенства: для отсортированного
A:
Это гарантирует правило (2).\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 - Уникальность всех сумм: все суммы непустых подмножеств должны быть различны.
Алгоритм (F#)
- Прочитать файл, преобразовать строки в списки чисел
- Для каждого множества:
- Проверить префикс-суффикс неравенство (хвостовая рекурсия)
- Проверить уникальность всех сумм подмножеств (методы коллекций)
- Просуммировать суммы подходящих множеств
Проверка
- Зарегистрироваться на projecteuler.net
- Проверить ответ (для задачи 105 — 73702)