mirror of
https://github.com/parnic/advent-of-code-2023.git
synced 2025-06-16 00:40:12 -05:00
Day 25
This is terrible, but it's Christmas and I don't want to solve this intense graph theory problem right now. I fed the parsed graph into graphviz so I could see where the connections were, then had the code sever them and calculate the independent graph sizes. Maybe I'll find a real solve for this later...but probably not.
This commit is contained in:
@ -77,6 +77,8 @@
|
||||
<EmbeddedResource Include="inputs\21a.txt" />
|
||||
<EmbeddedResource Include="inputs\24.txt" />
|
||||
<EmbeddedResource Include="inputs\24a.txt" />
|
||||
<EmbeddedResource Include="inputs\25.txt" />
|
||||
<EmbeddedResource Include="inputs\25a.txt" />
|
||||
<None Remove="inputs\22.txt" />
|
||||
<EmbeddedResource Include="inputs\22.txt" />
|
||||
<None Remove="inputs\22a.txt" />
|
||||
|
1262
inputs/25.txt
Normal file
1262
inputs/25.txt
Normal file
File diff suppressed because it is too large
Load Diff
13
inputs/25a.txt
Normal file
13
inputs/25a.txt
Normal file
@ -0,0 +1,13 @@
|
||||
jqt: rhn xhk nvd
|
||||
rsh: frs pzl lsr
|
||||
xhk: hfx
|
||||
cmg: qnr nvd lhk bvb
|
||||
rhn: xhk bvb hfx
|
||||
bvb: xhk hfx
|
||||
pzl: lsr hfx nvd
|
||||
qnr: nvd
|
||||
ntq: jqt hfx bvb xhk
|
||||
nvd: lhk
|
||||
lsr: lhk
|
||||
rzs: qnr cmg lsr rsh
|
||||
frs: qnr lhk lsr
|
115
src/25.cs
Normal file
115
src/25.cs
Normal file
@ -0,0 +1,115 @@
|
||||
using aoc2023.Util;
|
||||
|
||||
namespace aoc2023;
|
||||
|
||||
internal class Day25 : Day
|
||||
{
|
||||
private Dictionary<string, List<string>> connections = [];
|
||||
internal override void Parse()
|
||||
{
|
||||
var lines = Util.Parsing.ReadAllLines($"{GetDay()}");
|
||||
foreach (var line in lines)
|
||||
{
|
||||
var split = line.Split(": ");
|
||||
var right = split[1].Split(' ', StringSplitOptions.RemoveEmptyEntries);
|
||||
connections.TryAdd(split[0], []);
|
||||
foreach (var r in right)
|
||||
{
|
||||
connections[split[0]].AddUnique(r);
|
||||
|
||||
connections.TryAdd(r, []);
|
||||
connections[r].AddUnique(split[0]);
|
||||
}
|
||||
}
|
||||
|
||||
// Logger.LogLine("graph G {");
|
||||
// foreach (var c in connections)
|
||||
// {
|
||||
// Logger.LogLine($"{c.Key} -- {{ {string.Join(' ', c.Value)} }}");
|
||||
// }
|
||||
// Logger.LogLine("}");
|
||||
}
|
||||
|
||||
internal override string Part1()
|
||||
{
|
||||
var br = connections.ToDictionary();
|
||||
foreach (var b in br)
|
||||
{
|
||||
br[b.Key] = [..b.Value];
|
||||
if (b.Key == "nqq")
|
||||
{
|
||||
br[b.Key].Remove("pxp");
|
||||
}
|
||||
|
||||
if (b.Key == "pxp")
|
||||
{
|
||||
br[b.Key].Remove("nqq");
|
||||
}
|
||||
|
||||
if (b.Key == "jxb")
|
||||
{
|
||||
br[b.Key].Remove("ksq");
|
||||
}
|
||||
|
||||
if (b.Key == "ksq")
|
||||
{
|
||||
br[b.Key].Remove("jxb");
|
||||
}
|
||||
|
||||
if (b.Key == "kns")
|
||||
{
|
||||
br[b.Key].Remove("dct");
|
||||
}
|
||||
|
||||
if (b.Key == "dct")
|
||||
{
|
||||
br[b.Key].Remove("kns");
|
||||
}
|
||||
}
|
||||
|
||||
List<string> h1 = ["pxp", "dct", "ksq"];
|
||||
List<string> h2 = ["nqq", "jxb", "kns"];
|
||||
bool bfound = false;
|
||||
while (!bfound)
|
||||
{
|
||||
bfound = true;
|
||||
int c = h1.Count;
|
||||
for (int i = 0; i < c; i++)
|
||||
{
|
||||
foreach (var n in br[h1[i]])
|
||||
{
|
||||
if (!h1.Contains(n))
|
||||
{
|
||||
bfound = false;
|
||||
h1.Add(n);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bfound = false;
|
||||
while (!bfound)
|
||||
{
|
||||
bfound = true;
|
||||
var c = h2.Count;
|
||||
for (int i = 0; i < c; i++)
|
||||
{
|
||||
foreach (var n in br[h2[i]])
|
||||
{
|
||||
if (!h2.Contains(n))
|
||||
{
|
||||
bfound = false;
|
||||
h2.Add(n);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $"{h1.Count} * {h2.Count} = <+white>{h1.Count * h2.Count}";
|
||||
}
|
||||
|
||||
internal override string Part2()
|
||||
{
|
||||
return $"<red>M<green>e<red>r<green>r<red>y <green>C<red>h<green>r<red>i<green>s<red>t<green>m<red>a<green>s<red>!";
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user