let's continue the advent of code but in c# mf

This commit is contained in:
didier committed 2025-12-26 09:44:17 -05:00
1 parent 5b4ced047b
commit 4fef30bfba
9 files changed
+364 -7

No files matched your search

+10
View File
@@ -0,0 +1,10 @@
namespace adventOfCode.day8;
public class Inputs
{
public static readonly string Example =
"162,817,812\n57,618,57\n906,360,560\n592,479,940\n352,342,300\n466,668,158\n542,29,236\n431,825,988\n739,650,466\n52,470,668\n216,146,977\n819,987,18\n117,168,530\n805,96,715\n346,949,466\n970,615,88\n941,993,340\n862,61,35\n984,92,344\n425,690,689";
public static readonly string Input =
"62481,24370,53899\n66340,66361,12487\n82829,41567,50460\n88731,67035,17931\n59963,32380,72202\n11358,27461,47584\n78416,48279,4367\n15462,94871,83068\n98060,13169,1863\n93577,72041,53914\n76379,23626,79660\n81956,8460,69098\n28582,84473,42115\n72971,68167,22168\n20656,90572,68545\n98099,95318,60866\n13911,71960,77341\n12311,67335,28531\n6461,96900,16383\n44940,47885,76474\n72381,93419,60162\n38365,48424,13181\n38389,39144,66773\n86766,91440,25862\n63175,39621,64401\n63128,38989,24676\n44377,64945,20408\n61457,60895,44891\n83451,27725,3152\n23558,92768,84103\n62555,73552,38406\n82768,77938,9681\n77017,31285,15201\n3613,39964,64576\n76297,91351,40548\n11017,72680,59851\n34150,13408,54455\n22091,79222,99498\n92623,82807,42405\n58520,22272,38782\n49045,15364,69144\n66307,20227,49524\n70709,6187,61184\n55250,30943,34702\n83510,7646,1256\n92500,97589,88344\n89184,56782,2611\n37145,63044,73781\n12701,62298,41130\n95801,80302,43509\n45269,81540,35702\n55867,22710,50573\n36510,89494,30067\n27441,77314,24621\n56029,51336,20069\n82702,84129,61802\n75301,25267,56295\n35860,55763,29092\n56112,48471,83647\n71377,46704,46244\n13494,5671,51289\n67642,21821,68758\n79549,54890,55669\n2606,74922,90329\n52554,2216,77139\n49345,78782,60048\n71469,3453,49286\n97116,87075,80036\n15609,78239,37995\n2857,47660,58969\n93008,2320,5601\n10779,57086,13138\n49461,2124,34224\n24876,72760,60405\n77055,37710,61869\n14730,65207,10161\n72658,84284,65384\n90363,10115,71282\n29832,59416,83252\n81449,75106,10402\n57418,96325,33857\n54725,17760,78951\n93256,17472,2504\n3322,74166,23627\n32081,55213,85496\n19321,2056,81231\n23483,38023,84160\n39191,11693,45961\n83140,77996,75262\n58405,78104,2168\n63487,47133,68921\n34899,25063,86893\n92050,15350,66805\n56409,39933,58714\n1864,98120,45471\n80911,99735,94959\n92708,79549,65668\n75707,8993,56732\n99401,60739,37763\n31494,56174,93879\n97778,85785,70179\n24702,99685,10427\n11369,48725,18145\n10000,60035,34719\n43589,8775,74614\n61647,56316,95371\n41756,9930,54146\n541,74141,48769\n8097,20212,21510\n93577,36155,51584\n89789,74369,48704\n81641,98420,20706\n88888,59900,18455\n83836,33148,56774\n15770,48634,30366\n88598,11876,42242\n99259,14526,76904\n92741,12276,40265\n88251,88296,17848\n11566,47145,7834\n71435,35592,12621\n50253,97430,21660\n26681,56280,9473\n1428,24,60322\n4644,41500,58899\n8070,78856,43800\n20173,47151,5607\n88080,33579,25090\n80428,80036,72689\n82182,68448,52795\n55025,92193,45293\n30710,57926,4977\n92644,5634,71511\n70959,82194,26985\n89964,55043,46952\n49215,4261,68603\n20461,71796,85600\n93295,4443,6865\n71752,34093,68135\n4372,15946,4919\n60536,91542,78250\n16288,35074,56720\n25748,37278,7880\n43146,24237,44791\n41635,58058,9596\n41414,20574,40562\n839,23234,44946\n38489,83895,53761\n69451,91823,50322\n56799,66858,6830\n8840,75892,49988\n80804,10418,71078\n310,29126,95523\n84436,54938,2132\n11467,17732,4156\n14181,79981,30720\n64855,47326,62302\n3895,70448,20329\n58087,70303,61428\n14653,43286,26953\n62681,33739,53127\n96211,90925,2789\n23074,44009,78704\n32662,31277,36531\n18015,14083,29433\n56296,87814,44350\n89334,16942,13844\n37104,33861,42735\n27947,21778,13729\n81863,16514,71\n54750,34035,25947\n15818,50187,14036\n86932,86909,44487\n78916,21580,95198\n29385,91717,58517\n85890,2165,17475\n34230,71349,65488\n75100,45351,97130\n45460,43169,10171\n18158,81704,19105\n30111,59730,82758\n4565,27847,37683\n19791,68429,461\n71924,49748,70713\n18764,12037,58930\n2524,40595,68330\n13483,59923,82399\n98948,3455,63115\n13222,87227,1292\n10689,34976,73891\n98617,14962,86519\n7779,81958,55664\n33972,95249,98942\n61726,70457,62214\n12208,44836,62937\n70597,44622,63150\n27375,31188,62826\n52410,44473,32001\n98053,77174,12802\n11904,55643,93445\n73164,86131,54754\n81204,84266,8050\n75089,70894,24807\n91025,70799,10415\n88178,28196,66228\n71455,3436,25491\n42302,87800,97888\n95021,94907,29531\n33478,59431,31624\n10632,29610,61595\n25072,82592,90760\n3784,59625,1022\n7144,2901,63299\n48352,93184,17289\n73673,24532,81217\n889,31278,64452\n39501,73989,57025\n30018,34716,69574\n53193,44694,92996\n50111,66815,66405\n21214,73044,86904\n22395,55743,71920\n75087,87617,90946\n73688,85294,71035\n68688,77165,40111\n65577,55731,10604\n47344,15165,2985\n81884,53717,93036\n32321,48816,7214\n70363,78798,11627\n94451,72902,82308\n58816,14066,80108\n59222,51580,66043\n58820,35913,82886\n75310,49473,19013\n93586,16044,32942\n46868,19795,71674\n10895,80510,9730\n10419,81157,76097\n12634,3704,95574\n42425,61938,86475\n53456,43000,55961\n96239,25618,1080\n64965,18715,77716\n14874,47845,69913\n86619,78274,56146\n10027,28857,27404\n31,86852,88182\n25084,89487,64095\n42131,42116,85157\n91564,70712,66726\n63926,3975,99273\n50288,43817,97353\n70849,90055,16020\n76503,9290,27095\n96186,13635,15020\n52274,55842,22549\n51845,24580,3119\n70196,70848,7156\n1552,99033,50558\n67573,99731,70665\n49554,3352,72836\n10281,95909,82756\n80947,99390,18937\n8288,36412,43419\n43082,47834,52847\n13428,56229,50716\n57716,542 Line truncated
}
+217
View File
@@ -0,0 +1,217 @@
namespace adventOfCode.day8;
internal record Point(long X, long Y, long Z)
{
public static Point Parse(string line)
{
var tmp = line.Split(",");
return new Point(int.Parse(tmp[0]), int.Parse(tmp[1]), int.Parse(tmp[2]));
}
public long Dist(Point p)
{
return (p.X - X) * (p.X - X) + (p.Y - Y) * (p.Y - Y) + (p.Z - Z) * (p.Z - Z);
}
}
internal record PointPairs(Point P1, Point P2) : IComparable<PointPairs>
{
public int CompareTo(PointPairs other)
{
return Dist().CompareTo(other.Dist());
}
private long Dist()
{
return P1.Dist(P2);
}
}
internal class Circuit : IComparable<Circuit>
{
private readonly ISet<Point> points;
public Circuit()
{
points = new HashSet<Point>();
}
public int CompareTo(Circuit other)
{
return Count().CompareTo(other.Count());
}
public bool IsLinkedTo(Point point)
{
return points.Contains(point);
}
public void Add(Point point)
{
points.Add(point);
}
public int Count()
{
return points.Count();
}
public bool IsLinkedTo(PointPairs pointPairs)
{
return IsLinkedTo(pointPairs.P1) || IsLinkedTo(pointPairs.P2);
}
public void Add(PointPairs pointPairs)
{
Add(pointPairs.P1);
Add(pointPairs.P2);
}
public override string ToString()
{
var ret = "";
foreach (var p in points) ret += $"({p.X}, {p.Y}, {p.Z}), ";
return ret;
}
public void AddAll(Circuit circuit)
{
foreach (var point in circuit.points) points.Add(point);
}
}
internal class Circuits
{
private readonly List<Circuit> circuits;
public Circuits()
{
circuits = new List<Circuit>();
}
public void Add(PointPairs pointPairs)
{
var addedCircuits = new List<Circuit>();
foreach (var circuit in circuits)
if (circuit.IsLinkedTo(pointPairs))
{
circuit.Add(pointPairs);
addedCircuits.Add(circuit);
}
if (addedCircuits.Count == 1) return;
if (addedCircuits.Count < 1)
{
var newCircuit = new Circuit();
newCircuit.Add(pointPairs);
circuits.Add(newCircuit);
return;
}
var mergedCircuit = new Circuit();
foreach (var circuit in addedCircuits)
{
mergedCircuit.AddAll(circuit);
circuits.Remove(circuit);
}
circuits.Add(mergedCircuit);
}
public List<Circuit> Get()
{
circuits.Sort();
circuits.Reverse();
return circuits;
}
public int Count()
{
return circuits.Count;
}
}
public class Question
{
private static List<Point> parseInput(string input)
{
var lines = input.Split("\n");
var ret = new List<Point>();
foreach (var line in lines) ret.Add(Point.Parse(line));
return ret;
}
private static List<PointPairs> CreateAllPointPairs(List<Point> points)
{
var ret = new List<PointPairs>();
for (var i = 0; i < points.Count; i++)
{
var p = points[i];
for (var j = i + 1; j < points.Count; j++) ret.Add(new PointPairs(p, points[j]));
}
ret.Sort();
return ret;
}
private static Circuits CreateCircuits(List<PointPairs> twoPointsList, int n)
{
var circuits = new Circuits();
var i = 0;
foreach (var twoPoints in twoPointsList)
{
if (i >= n) break;
circuits.Add(twoPoints);
i++;
}
return circuits;
}
private static PointPairs? CreateOnBigCircuit(List<PointPairs> twoPointsList, int total)
{
var circuits = new Circuits();
foreach (var twoPoints in twoPointsList)
{
circuits.Add(twoPoints);
if (circuits.Count() == 1 && circuits.Get()[0].Count() == total)
{
return twoPoints;
}
}
return null;
}
static long Question8A(string document, int n)
{
var points = parseInput(document);
var twoPoints = CreateAllPointPairs(points);
var circuits = CreateCircuits(twoPoints, n).Get();
return circuits[0].Count() * circuits[1].Count() * circuits[2].Count();
}
static long Question8B(string document)
{
var points = parseInput(document);
var twoPoints = CreateAllPointPairs(points);
var circuits = CreateOnBigCircuit(twoPoints, points.Count);
if (circuits == null)
{
return 0;
}
return circuits.P1.X * circuits.P2.X;
}
public static void Main()
{
Console.WriteLine($"The answer to question 8a is {Question8A(Inputs.Input, 1_000)}" );
Console.WriteLine($"The answer to question 8b is {Question8B(Inputs.Input)}" );
}
}