Exemple #1
0
        public void TestRotation()
        {
            const string input = @".#....#####...#..
                                   ##...##.#####..##
                                   ##...#...#.#####.
                                   ..#.....#...###..
                                   ..#.#.....#....##";

            var asteroids = MonitorStation.Parse(input);

            var station = MonitorStation.GetBestStation(asteroids);

            Assert.AreEqual(Tuple.Create(8, 3), station);

            var firstAsteroidDestroyed = MonitorStation.DestroyAsteroid(asteroids, 1);

            Assert.AreEqual(Tuple.Create(8, 1), firstAsteroidDestroyed);

            var secondAsteroidDestroyed = MonitorStation.DestroyAsteroid(asteroids, 2);

            Assert.AreEqual(Tuple.Create(9, 0), secondAsteroidDestroyed);

            var ninthAsteroidDestroyed = MonitorStation.DestroyAsteroid(asteroids, 9);

            Assert.AreEqual(Tuple.Create(15, 1), ninthAsteroidDestroyed);

            var nthAsteroidDestroyed = MonitorStation.DestroyAsteroid(asteroids, 36);

            Assert.AreEqual(Tuple.Create(14, 3), nthAsteroidDestroyed);
        }
Exemple #2
0
        public void TestGetMaxViews(IEnumerable <Point> asteroids,
                                    Point p, int count)
        {
            var result = MonitorStation.FindBestAsteroid(asteroids);

            Assert.Equal(p, result.Asteroid);
            Assert.Equal(count, result.Count);
        }
Exemple #3
0
        public void TestStation()
        {
            var parsedInput = MonitorStation.Parse(_testInput);

            var station = MonitorStation.GetBestStation(parsedInput);

            Assert.AreEqual(Tuple.Create(3, 4), station);
        }
Exemple #4
0
        public void PuzzleOne()
        {
            var asteroids = File.ReadAllLines("tests/y2019/Day10.Input.txt")
                            .GetAsteroidsMap();

            var result = MonitorStation.FindBestAsteroid(asteroids).Count;

            Assert.Equal(230, result);
        }
Exemple #5
0
        public void Day10Part1_TestSolution()
        {
            string[] map = DayDataUtilities.ReadLinesFromFile("day10.txt");
            Assert.NotNull(map);
            var sut = new MonitorStation(map);

            Assert.Equal(316, sut.Asteroids.Count);
            var bestStation = sut.FindBestStation();

            Assert.Equal(26, bestStation.X);
            Assert.Equal(28, bestStation.Y);
            Assert.Equal(267, bestStation.Steps0);
        }
Exemple #6
0
        public void PuzzleTwo()
        {
            var asteroids = File.ReadAllLines("tests/y2019/Day10.Input.txt")
                            .GetAsteroidsMap();

            var laser = MonitorStation.FindBestAsteroid(asteroids).Asteroid;

            var bet = asteroids
                      .Except(new [] { laser })
                      .VaporizeAll(laser, Enumerable.Empty <Point>())
                      .ElementAtOrDefault(200 - 1);

            Assert.Equal(1205, bet.X * 100 + bet.Y);
        }
Exemple #7
0
        public void TestParseStation()
        {
            var field = MonitorStation.Parse(_testInput);

            var expected = new List <Tuple <int, int> >
            {
                Tuple.Create(1, 0),
                Tuple.Create(4, 0),
                Tuple.Create(0, 2),
                Tuple.Create(1, 2),
                Tuple.Create(2, 2),
                Tuple.Create(3, 2),
                Tuple.Create(4, 2),
                Tuple.Create(4, 3),
                Tuple.Create(3, 4),
                Tuple.Create(4, 4)
            };

            Assert.AreEqual(expected, field);
        }
Exemple #8
0
        private void LoadData()
        {
            FixedStationQueryCondition condition = new FixedStationQueryCondition();
            ObservableCollection <FixedStationInfo> monitorList = QueryMonitorStationItemSource(condition);

            if (monitorList != null && monitorList.Count > 0)
            {
                ContextMenu contextMenu = GetContextMenu();
                foreach (FixedStationInfo info in monitorList)
                {
                    if (!Obj.screenMap.CheckCoordinate(new double[] { info.LONG == null ? 0 : info.LONG.Value, info.LAT == null ? 0 : info.LAT.Value }))
                    {
                        continue;
                    }
                    MonitorStation group = new MonitorStation(info);
                    group.ContextMenu = contextMenu;
                    Obj.screenMap.AddElement(group, Obj.screenMap.GetMapPointEx(info.LONG.Value, info.LAT.Value));
                }
            }
        }
Exemple #9
0
        public void Day10Part2_TestSolution()
        {
            string[] map = DayDataUtilities.ReadLinesFromFile("day10.txt");
            Assert.NotNull(map);
            var sut         = new MonitorStation(map);
            var bestStation = new Point(26, 28);
            var dictLos     = sut.CalculateLOS(bestStation);

            Assert.Equal(256, dictLos.Count);

            var polarPts = sut.MakeMapPolar(bestStation);

            // Start point is angle -1,5707963267948966, ie. -pi/2, wrap angle by adding 2 pi
            foreach (var pt in polarPts)
            {
                if (pt.angle < -1.5707963267948966)
                {
                    pt.angle += 2 * Math.PI;
                }
            }

            Assert.Equal(sut.Asteroids.Count - 1, polarPts.Count);
            SortedDictionary <double, List <PolarPoint> > dictPolar = sut.MakePolarLOS(polarPts);

            sut.DumpPolarLOS(dictPolar);
            Assert.Equal(267, dictPolar.Count);
            int        count   = 1;
            PolarPoint rock200 = null;

            foreach (var angle in dictPolar.Keys)
            {
                if (count == 200)
                {
                    rock200 = dictPolar[angle].Find(r => r.dist == dictPolar[angle].Min(p => p.dist));
                    break;
                }
                count++;
            }
            Assert.NotNull(rock200);
            Assert.Equal(1309, rock200.cartPt.Y + rock200.cartPt.X * 100);
        }
Exemple #10
0
        public void Day10Part1_Example01()
        {
            string[] map = new string[]
            {
                ".#..#",
                ".....",
                "#####",
                "....#",
                "...##"
            };

            var sut = new MonitorStation(map);

            Assert.Equal(10, sut.Asteroids.Count);

            var bestStation = sut.FindBestStation();

            Assert.Equal(3, bestStation.X);
            Assert.Equal(4, bestStation.Y);
            Assert.Equal(8, bestStation.Steps0);
        }