Esempio n. 1
0
        public static void Main(string[] args)
        {
            char[] delimiterChars = { ',' };

//            var instructions = "R1010,D422,L354,U494,L686,U894,R212,U777,L216,U9,L374,U77,R947,U385,L170,U916,R492,D553,L992,D890,L531,U360,R128,U653,L362,U522,R817,U198,L126,D629,L569,U300,L241,U145,R889,D196,L450,D576,L319,D147,R985,U889,L941,U837,L608,D77,L864,U911,L270,D869,R771,U132,L249,U603,L36,D328,L597,U992,L733,D370,L947,D595,L308,U536,L145,U318,R55,D773,R175,D505,R483,D13,R780,U778,R445,D107,R490,U245,L587,U502,R446,U639,R150,U35,L455,D522,R866,U858,R394,D975,R513,D378,R58,D646,L374,D675,R209,U228,R530,U543,L480,U677,L912,D164,L573,U587,L784,D626,L994,U250,L215,U985,R684,D79,L877,U811,L766,U617,L665,D246,L408,U800,L360,D272,L436,U138,R240,U735,L681,U68,L608,D59,R532,D808,L104,U968,R887,U819,R346,U698,L317,U582,R516,U55,L303,U607,L457,U479,L510,D366,L583,U519,R878,D195,R970,D267,R842,U784,R9,D946,R833,D238,L232,D94,L860,D47,L346,U951,R491,D745,R849,U273,R263,U392,L341,D808,R696,U326,R886,D296,L865,U833,R241,U644,R729,D216,R661,D712,L466,D699,L738,U5,L556,D693,R912,D13,R48,U63,L877,U628,L689,D929,R74,U924,R612,U153,R417,U425,L879,D378,R79,D248,L3,U519,R366,U281,R439,D823,R149,D668,R326,D342,L213,D735,R504,U265,L718,D842,L565,U105,L214,U963,R518,D681,R642,U170,L111,U6,R697,U572,R18,U331,L618,D255,R534,D322,L399,U595,L246,U651,L836,U757,R417,D795,R291,U759,L568,U965,R828,D570,R350,U317,R338,D173,L74,D833,L650,D844,L70,U913,R594,U407,R674,D684,L481,D564,L128,D277,R851,D274,L435,D582,R469,U729,R387,D818,R443,U504,R414,U8,L842,U845,R275,U986,R53,U660,R661,D225,R614,U159,R477".Split(delimiterChars);
//            var instructions2 = "L1010,D698,R442,U660,L719,U702,L456,D86,R938,D177,L835,D639,R166,D285,L694,U468,L569,D104,L234,D574,L669,U299,L124,D275,L179,D519,R617,U72,L985,D248,R257,D276,L759,D834,R490,U864,L406,U181,R911,U873,R261,D864,R260,U759,R648,U158,R308,D386,L835,D27,L745,U91,R840,U707,R275,U543,L663,U736,L617,D699,R924,U103,R225,U455,R708,U319,R569,U38,R315,D432,L179,D975,R519,D546,L295,U680,L685,U603,R262,D250,R7,U171,R261,U519,L832,U534,L471,U431,L474,U886,R10,D179,L79,D555,R452,U452,L832,U863,L367,U538,L237,D160,R441,U605,R942,U259,L811,D552,R646,D353,L225,D94,L35,D307,R752,U23,R698,U610,L379,D932,R698,D751,R178,D347,R325,D156,R471,D555,R558,D593,R773,U2,L955,U764,L735,U438,R364,D640,L757,U534,R919,U409,R361,U407,R336,D808,R877,D648,R610,U198,R340,U94,R795,D667,R811,U975,L965,D224,R565,D681,L64,U567,R621,U922,L665,U329,R242,U592,L727,D481,L339,U402,R213,D280,R656,U169,R976,D962,L294,D505,L251,D689,L497,U133,R230,D441,L90,D220,L896,D657,L500,U331,R502,U723,R762,D613,L447,D256,L226,U309,L935,U384,L740,D459,R309,D707,R952,D747,L304,D105,R977,D539,R941,D21,R291,U216,R132,D543,R515,U453,L854,D42,R982,U102,L469,D639,R559,D68,R302,U734,R980,D214,R107,D191,L730,D793,L63,U17,R807,U196,R412,D592,R330,D941,L87,D291,L44,D94,L272,D780,R968,U837,L712,D704,R163,U981,R537,U778,R220,D303,L196,D951,R163,D446,R11,D623,L72,D778,L158,U660,L189,D510,L247,D716,L89,U887,L115,U114,L36,U81,R927,U293,L265,U183,R331,D267,R745,D298,L561,D918,R299,U810,L322,U679,L739,D854,L581,U34,L862,D779,R23".Split(delimiterChars);
            var instructions  = "R75,D30,R83,U83,L12,D49,R71,U7,L72";
            var instructions2 = "U62,R66,U55,R34,D71,R55,D58,R83";
//            var instructions = "R98,U47,R26,D63,R33,U87,L62,D20,R33,U53,R51".Split(delimiterChars);
//            var instructions2 = "U98,R91,D20,R16,D67,R40,U7,R15,U6,R7".Split(delimiterChars);
//            var instructions = "R8,U5,L5,D3".Split(delimiterChars);
//            var instructions2 = "U7,R6,D4,L4".Split(delimiterChars);
//
            var day3 = new Day3();


            var result1 = day3.GetLogFromMultipleInstructionsAsDictionary(new CoOrdinates {
                X = 0, Y = 0
            }, instructions);
            var result2 = day3.GetLogFromMultipleInstructionsAsDictionary(new CoOrdinates {
                X = 0, Y = 0
            }, instructions2);

            var intersections    = day3.GetIntersections(result1, result2);
            var shortestDistance = day3.ShortestDistance(intersections);

            Console.WriteLine(shortestDistance);

//            Working Giulio Code
//            var result1 = day3.GetLogFromMultipleInstructionsAsString(new CoOrdinates{X = 0,Y = 0}, instructions).GroupBy(x => x).ToDictionary(x => x.Key, x => x.Count());
//            var result2 = day3.GetLogFromMultipleInstructionsAsString(new CoOrdinates{X = 0,Y = 0}, instructions2).GroupBy(x => x).ToDictionary(x => x.Key, x => x.Count());
//
//


//           Console.WriteLine(day3.GetShortestIntersection(result1, result2));

//           var matches = result1.Except(result2);
//            var intersections = result1.Except(result2);
//
//            var intersections = new List<CoOrdinates>();
//            foreach (var log in result1)
//            {
//                intersections.AddRange(result2.Where(l => l.X == log.X).Where(l=> l.Y == log.Y));
//
//            }
        }
Esempio n. 2
0
        public void CheckStepsForIntersections()
        {
            var test1 = "R8,U5,L5,D3";
            var test2 = "U7,R6,D4,L4";

            var day3 = new Day3();

            var log1 = day3.GetLogFromMultipleInstructionsAsDictionary(centralPort, instructions);
            var log2 = day3.GetLogFromMultipleInstructionsAsDictionary(centralPort, instructions2);
            var log3 = day3.GetLogFromMultipleInstructionsAsDictionary(centralPort, instructions3);
            var log4 = day3.GetLogFromMultipleInstructionsAsDictionary(centralPort, instructions4);
            var log5 = day3.GetLogFromMultipleInstructionsAsDictionary(centralPort, instructions5);
            var log6 = day3.GetLogFromMultipleInstructionsAsDictionary(centralPort, instructions6);

            var logtest1 = day3.GetLogFromMultipleInstructionsAsDictionary(centralPort, test1);
            var logtest2 = day3.GetLogFromMultipleInstructionsAsDictionary(centralPort, test2);


            var intersections     = day3.GetIntersections(log1, log2);
            var intersections34   = day3.GetIntersections(log3, log4);
            var intersectionsTest = day3.GetIntersections(logtest1, logtest2);
            var intersections56   = day3.GetIntersections(log5, log6);

            var positionsOfIntersectionsinLog1 =
                intersections.Select(i => day3.GetPositionOfIntersection(log1.Keys, i.Key));
            var positionsOfIntersectionsinLog2 =
                intersections.Select(i => day3.GetPositionOfIntersection(log2.Keys, i.Key));

            var results1 = day3.GetStepsForIntersections(log1.Keys, intersections.Keys);
            var results2 = day3.GetStepsForIntersections(log2.Keys, intersections.Keys);
            var results3 = day3.GetStepsForIntersections(log3.Keys, intersections34.Keys);
            var results4 = day3.GetStepsForIntersections(log4.Keys, intersections34.Keys);
            var results5 = day3.GetStepsForIntersections(log5.Keys, intersections56.Keys);
            var results6 = day3.GetStepsForIntersections(log6.Keys, intersections56.Keys);

            var testresult1 = day3.GetStepsForIntersections(logtest1.Keys, intersectionsTest.Keys);
            var testresult2 = day3.GetStepsForIntersections(logtest2.Keys, intersectionsTest.Keys);

            var totalledSteps = day3.GetLowestTotalledSteps(testresult1, testresult2);


            Assert.AreEqual(30, totalledSteps);
            Assert.AreEqual(610, day3.GetLowestTotalledSteps(results1, results2));
            Assert.AreEqual(410, day3.GetLowestTotalledSteps(results3, results4));
            Assert.AreEqual(410, day3.GetLowestTotalledSteps(results5, results6));
        }
Esempio n. 3
0
        public static void Main(string[] args)
        {
            var day1 = Day1.Create();

            Console.WriteLine($"Day 1 Part 1: {day1.ExecutePart1()}");
            Console.WriteLine($"Day 1 Part 2: {day1.ExecutePart2()}");

            var day2 = Day2.Create();

            Console.WriteLine($"Day 2 Part 1: {day2.ExecutePart1()}");
            Console.WriteLine($"Day 2 Part 2: {day2.ExecutePart2()}");

            var day3 = Day3.Create();

            Console.WriteLine($"Day 3 Part 1: {day3.ExecutePart1()}");
            Console.WriteLine($"Day 3 Part 2: {day3.ExecutePart2()}");

            Console.ReadKey();
        }
Esempio n. 4
0
        private static void Main(string[] args)
        {
            //Day 1
            Console.WriteLine($"Result Day 1 (Part 1): {Day1.ExecutePart1()}");
            Console.WriteLine($"Result Day 1 (Part 2): {Day1.ExecutePart2()}");

            //Day 2
            Console.WriteLine($"Result Day 2 (Part 1): {Day2.ExecutePart1()}");
            Console.WriteLine($"Result Day 2 (Part 2): {Day2.ExecutePart2(19690720)}");

            //Day 3
            Console.WriteLine($"Result Day 3 (Part 1): {Day3.ExecutePart1()}");
            Console.WriteLine($"Result Day 3 (Part 2): {Day3.ExecutePart2()}");

            //Day 4
            Console.WriteLine($"Result Day 4 (Part 1): {Day4.ExecutePart1(145852, 616942)}");
            Console.WriteLine($"Result Day 4 (Part 2): {Day4.ExecutePart2(145852, 616942, 1)}");

            //Day 5
            Console.WriteLine($"Result Day 5 (Part 1): {Day5.ExecutePart1(1)}");
            Console.WriteLine($"Result Day 5 (Part 2): {Day5.ExecutePart2(5)}");

            //Day 6
            Console.WriteLine($"Result Day 6 (Part 1): {Day6.ExecutePart1()}");
            Console.WriteLine($"Result Day 6 (Part 2): {Day6.ExecutePart2()}");

            //Day 7
            Console.WriteLine($"Result Day 7 (Part 1): {Day7.ExecutePart1()}");
            Console.WriteLine($"Result Day 7 (Part 2): {Day7.ExecutePart2()}");

            //Day 8
            Console.WriteLine($"Result Day 8 (Part 1): {Day8.ExecutePart1()}");
            Console.WriteLine($"Result Day 8 (Part 2): {Day8.ExecutePart2()}");

            //Day 9
            Console.WriteLine($"Result Day 9 (Part 1): {Day9.ExecutePart1()}");
            Console.WriteLine($"Result Day 9 (Part 2): {Day9.ExecutePart2()}");
        }
Esempio n. 5
0
        public void Check_Output_Value()
        {
            var day3 = new Day3();

            var result1 = day3.GetLogFromMultipleInstructionsAsDictionary(centralPort, instructions);
            var result2 = day3.GetLogFromMultipleInstructionsAsDictionary(centralPort, instructions2);
            var result3 = day3.GetLogFromMultipleInstructionsAsDictionary(centralPort, instructions3);
            var result4 = day3.GetLogFromMultipleInstructionsAsDictionary(centralPort, instructions4);
            var result5 = day3.GetLogFromMultipleInstructionsAsDictionary(centralPort, instructions5);
            var result6 = day3.GetLogFromMultipleInstructionsAsDictionary(centralPort, instructions6);


            var intersections     = day3.GetIntersections(result1, result2);
            var shortestDistance  = day3.ShortestDistance(intersections);
            var intersections2    = day3.GetIntersections(result3, result4);
            var shortestDistance2 = day3.ShortestDistance(intersections2);
            var intersections3    = day3.GetIntersections(result5, result6);
            var shortestDistance3 = day3.ShortestDistance(intersections3);

            Assert.AreEqual(159, shortestDistance);
            Assert.AreEqual(135, shortestDistance2);
            Assert.AreEqual(806, shortestDistance3);
        }
Esempio n. 6
0
        static void Main(string[] args)
        {
            {
                int totalFuel1 = 0;
                foreach (var line in File.ReadLines("input/1.txt"))
                {
                    int mass = Int32.Parse(line);
                    int fuel = (mass / 3) - 2;
                    if (fuel > 0)
                    {
                        totalFuel1 += fuel;
                    }
                }
                Console.WriteLine($"D1P1 fuel: {totalFuel1}");
            }

            {
                int totalFuel2 = 0;
                foreach (var line in File.ReadLines("input/1.txt"))
                {
                    int mass = Int32.Parse(line);
                    int fuel = (mass / 3) - 2;
                    while (fuel > 0)
                    {
                        totalFuel2 += fuel;
                        fuel        = (fuel / 3) - 2;
                    }
                }
                Console.WriteLine($"D1P2 fuel: {totalFuel2}");
            }

            {
                var rawOpCodes = File.ReadAllText("input/2.txt");
                var opCodes    = rawOpCodes.Split(",").Select(s => Int32.Parse(s)).ToList();
                opCodes[1] = 12;
                opCodes[2] = 2;
                for (int i = 0; opCodes[i] != 99; i += 4)
                {
                    if (opCodes[i] == 1)
                    {
                        opCodes[opCodes[i + 3]] = opCodes[opCodes[i + 1]] + opCodes[opCodes[i + 2]];
                    }
                    else if (opCodes[i] == 2)
                    {
                        opCodes[opCodes[i + 3]] = opCodes[opCodes[i + 1]] * opCodes[opCodes[i + 2]];
                    }
                    else if (opCodes[i] != 99)
                    {
                        throw new Exception("");
                    }
                }
                Console.WriteLine($"D2P1: {opCodes[0]}");
            }

            {
                var rawOpCodes    = File.ReadAllText("input/2.txt");
                var opCodesSource = rawOpCodes.Split(",").Select(s => Int32.Parse(s)).ToList();

                Parallel.ForEach(Enumerable.Range(0, 99), (int noun) =>
                {
                    Parallel.ForEach(Enumerable.Range(0, 99), (int verb) =>
                    {
                        List <int> opCodes = new List <int>();
                        opCodes.AddRange(opCodesSource);

                        opCodes[1] = noun;
                        opCodes[2] = verb;
                        for (int i = 0; opCodes[i] != 99; i += 4)
                        {
                            if (opCodes[i] == 1)
                            {
                                opCodes[opCodes[i + 3]] = opCodes[opCodes[i + 1]] + opCodes[opCodes[i + 2]];
                            }
                            else if (opCodes[i] == 2)
                            {
                                opCodes[opCodes[i + 3]] = opCodes[opCodes[i + 1]] * opCodes[opCodes[i + 2]];
                            }
                            else if (opCodes[i] != 99)
                            {
                                throw new Exception("");
                            }
                        }

                        if (opCodes[0] == 19690720)
                        {
                            Console.WriteLine($"D2P2: {100 * noun + verb}");
                        }
                    });
                });
            }

            {
                var paths = File.ReadAllText("input/3.txt");
                var wires = paths.Split(new String[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries).Select(p => p.Split(",").ToList()).ToList();
                if (wires.Count() != 2)
                {
                    throw new Exception();
                }

                var d = new Day3(wires[0], wires[1]);
                d.FindClosestIntersection();
                d.FindLeastSteps();
            }

            {
                int count = 0;
                Parallel.For(246540, 787419, p =>
                {
                    var password = Convert.ToString(p);
                    if (password.Length != 6)
                    {
                        throw new Exception();
                    }

                    bool bSuccess = false;
                    for (int i = 1; i < 6; ++i)
                    {
                        if (password[i] == password[i - 1])
                        {
                            bSuccess = true;
                        }
                        else if (password[i] < password[i - 1])
                        {
                            bSuccess = false;
                            break;
                        }
                    }

                    if (bSuccess)
                    {
                        Interlocked.Increment(ref count);
                    }
                });

                Console.WriteLine($"D4P1: {count}");
            }

            {
                int count = 0;
                Parallel.For(246540, 787419, p =>
                {
                    var password = Convert.ToString(p);
                    if (password.Length != 6)
                    {
                        throw new Exception();
                    }

                    bool bIncrement = true;
                    bool bPair      = false;
                    int pairCount   = 1;
                    for (int i = 1; i < 6; ++i)
                    {
                        if (password[i] < password[i - 1])
                        {
                            bIncrement = false;
                            break;
                        }

                        if (password[i] == password[i - 1])
                        {
                            ++pairCount;
                        }
                        else
                        {
                            if (pairCount == 2)
                            {
                                bPair = true;
                            }
                            pairCount = 1;
                        }
                    }

                    if (pairCount == 2)
                    {
                        bPair = true;
                    }

                    if (bPair && bIncrement)
                    {
                        Interlocked.Increment(ref count);
                    }
                });

                Console.WriteLine($"D4P2: {count}");
            }

            {
                var paths  = File.ReadAllText("input/5.txt");
                var d      = new Day5Part1(paths.Split(",").Select(i => int.Parse(i)).ToList());
                int output = d.Execute();
                Console.WriteLine($"D5P1: {output}");
            }

            {
                var paths  = File.ReadAllText("input/5.txt");
                var d      = new IntcodeComputer(paths.Split(",").Select(i => int.Parse(i)).ToList());
                int output = d.Execute(5);
                Console.WriteLine($"D5P1: {output}");
            }
        }
Esempio n. 7
0
        static private bool LoadPuzzles(string option)
        {
            bool finish = false;

            switch (option)
            {
            case "1":
                Day1 day1 = new Day1();
                day1.Execute();
                break;

            case "2":
                Day2 day2 = new Day2();
                day2.Execute();
                break;

            case "3":
                Day3 day3 = new Day3();
                day3.Execute();
                break;

            case "4":
                Day4 day4 = new Day4();
                day4.Execute();
                break;

            case "5":
                Day5 day5 = new Day5();
                day5.Execute();
                break;

            case "6":
                Day6 day6 = new Day6();
                day6.Execute();
                break;

            case "7":
                Day7 day7 = new Day7();
                day7.Execute();
                break;

            case "8":
                Day8 day8 = new Day8();
                day8.Execute();
                break;

            case "9":
                Day9 day9 = new Day9();
                day9.Execute();
                break;

            case "10":
                Day10 day10 = new Day10();
                day10.Execute();
                break;

            case "11":
                Day11 day11 = new Day11();
                day11.Execute();
                break;

            case "12":
                Day12 day12 = new Day12();
                day12.Execute();
                break;

            case "13":
                Day13 day13 = new Day13();
                day13.Execute();
                break;

            case "14":
                Day14 day14 = new Day14();
                day14.Execute();
                break;

            case "q":
            case "Q":
                finish = true;
                break;
            }
            return(finish);
        }