From 40f52587cd15bd0870c645fc0dbf4f5052c16f9c Mon Sep 17 00:00:00 2001 From: Artem-Darius Weber Date: Thu, 17 Apr 2025 11:59:04 +0300 Subject: [PATCH] (IT 1) feat: implement special sum set conditions check --- Individual Task 1/Program.fs | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/Individual Task 1/Program.fs b/Individual Task 1/Program.fs index daea313..1f676b1 100644 --- a/Individual Task 1/Program.fs +++ b/Individual Task 1/Program.fs @@ -20,14 +20,44 @@ module EulerProblem105 = let allSubsets = generateSubsetsAux [[]] set List.filter (fun subset -> not (List.isEmpty subset)) allSubsets + + let checkPrefixSuffixRule (sortedSet: int list) = + let n = List.length sortedSet + + let rec check k = + if k > n / 2 then true + else + let prefixSum = sortedSet |> List.take (k+1) |> List.sum + let suffixSum = sortedSet |> List.rev |> List.take k |> List.sum + + if prefixSum <= suffixSum then false + else check (k+1) + + check 1 + + let checkUniqueSums set = + let subsets = generateAllSubsets set + let sums = subsets |> List.map List.sum + let uniqueSums = sums |> Set.ofList + + List.length sums = Set.count uniqueSums + + let isSpecialSumSet set = + let sortedSet = List.sort set + checkPrefixSuffixRule sortedSet && checkUniqueSums sortedSet let run filePath = let sets = parseInput filePath printfn "Загружено %d множеств" (List.length sets) - let testSet = List.head sets - let subsets = generateAllSubsets testSet - printfn "Для первого множества сгенерировано %d непустых подмножеств" (List.length subsets) + let testExample1 = sets |> List.head + let testExample2 = sets |> List.item 1 + + printfn "Проверка первого примера: %A" testExample1 + printfn "Результат: %b (ожидается: false)" (isSpecialSumSet testExample1) + + printfn "Проверка второго примера: %A" testExample2 + printfn "Результат: %b (ожидается: true)" (isSpecialSumSet testExample2) 0