From df526c6e3fbea8c951c79c5fef0c23a4cda7dfc5 Mon Sep 17 00:00:00 2001 From: Parnic Date: Sat, 7 Dec 2024 10:19:02 -0600 Subject: [PATCH] Day 7 This solution is bad and slow and there are probably ways to make it not as bad and not as slow, but I'll take < 1 second runtime for now. --- src/07.cs | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/07.cs diff --git a/src/07.cs b/src/07.cs new file mode 100644 index 0000000..0fc3200 --- /dev/null +++ b/src/07.cs @@ -0,0 +1,55 @@ +namespace aoc2024; + +internal class Day07 : Day +{ + private readonly List<(long result, List inputs)> eqs = []; + internal override void Parse() + { + var lines = Util.Parsing.ReadAllLines($"{GetDay()}"); + foreach (var line in lines) + { + var split = line.Split(':'); + var nums = split[1].Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(long.Parse).ToList(); + eqs.Add((long.Parse(split[0]), nums)); + } + } + + private static bool CanSolveAddMult((long result, List inputs) eq) + { + if (eq.inputs.Count > 2) + { + var added = eq.inputs[0] + eq.inputs[1]; + var multd = eq.inputs[0] * eq.inputs[1]; + return CanSolveAddMult(eq with { inputs = [added, .. eq.inputs.Skip(2)] }) || CanSolveAddMult(eq with { inputs = [multd, .. eq.inputs.Skip(2)] }); + } + + return eq.inputs[0] + eq.inputs[1] == eq.result || eq.inputs[0] * eq.inputs[1] == eq.result; + } + + internal override string Part1() + { + long total = eqs.Where(CanSolveAddMult).Sum(eq => eq.result); + return $"Add | Mult calibration result: <+white>{total}"; + } + + private static bool CanSolveAddMultConcat((long result, List inputs) eq) + { + if (eq.inputs.Count > 2) + { + var added = eq.inputs[0] + eq.inputs[1]; + var multd = eq.inputs[0] * eq.inputs[1]; + var cated = long.Parse($"{eq.inputs[0]}{eq.inputs[1]}"); + return CanSolveAddMultConcat(eq with { inputs = [added, .. eq.inputs.Skip(2)] }) + || CanSolveAddMultConcat(eq with { inputs = [multd, .. eq.inputs.Skip(2)] }) + || CanSolveAddMultConcat(eq with { inputs = [cated, .. eq.inputs.Skip(2)] }); + } + + return eq.inputs[0] + eq.inputs[1] == eq.result || eq.inputs[0] * eq.inputs[1] == eq.result || long.Parse($"{eq.inputs[0]}{eq.inputs[1]}") == eq.result; + } + + internal override string Part2() + { + long total = eqs.Where(CanSolveAddMultConcat).Sum(eq => eq.result); + return $"Add | Mult | Concat calibration result: <+white>{total}"; + } +}