Exemplo n.º 1
0
        public void Puzzle1_CountRemainingUnits_AfterAllCollapseEvents()
        {
            var polymer = new Polymer(Input.Day05);

            var collapsed = polymer.Collapse();

            collapsed.Should().HaveLength(9288);
        }
Exemplo n.º 2
0
        public void Puzzle2_ReduceUnits_AndFindShortestChain()
        {
            var polymer = new Polymer(Input.Day05);

            var shortest = polymer.FindShortestPolymer();

            shortest.Should().HaveLength(5844);
        }
Exemplo n.º 3
0
    public static void Main()
    {
        Polymer.Register <MyElement>();
        Polymer.Register <MyInput>();
        Polymer.Register <MyApp>();

        Polymer.Register <MyTimer>();
    }
Exemplo n.º 4
0
        public void Puzzle2Example_PolymerReducesUnitsAndFindsShortestPossibleChain()
        {
            const string input    = "dabAcCaCBAcCcaDA";
            const string expected = "daDA";

            var actual = new Polymer(input).FindShortestPolymer();

            actual.Should().Be(expected);
        }
Exemplo n.º 5
0
 public Obstacle(Polymer polymer)
 {
     if (polymer.Count < 3)
     {
         throw new InvalidNumberOfNodesException();
     }
     this.polymer = polymer;
     segments     = polymer.ToSegments();
 }
Exemplo n.º 6
0
        public void Puzzle1LargerExample_PolymerCollapsesCorrectly()
        {
            const string input    = "dabAcCaCBAcCcaDA";
            const string expected = "dabCBAcaDA";
            var          polymer  = new Polymer(input);

            var collapsed = polymer.Collapse();

            collapsed.Should().Be(expected);
        }
Exemplo n.º 7
0
        public void TestReactFiltered()
        {
            var input   = new StringReader("dabAcCaCBAcCcaDA");
            var polymer = new Polymer(input, 'c');

            var expected = "daDA";

            var actual = polymer.ToString();

            Assert.Equal(expected, actual);
        }
Exemplo n.º 8
0
        public void Reduce(string input, string charsToRemove, int expectedLength)
        {
            // Arrange
            var sut = new Polymer(input, charsToRemove.ToCharArray());

            // Act
            var result = sut.React();

            // Assert
            result.Should().Be(expectedLength);
        }
Exemplo n.º 9
0
        public void React(string input, int expectedLength)
        {
            // Arrange
            var sut = new Polymer(input);

            // Act
            var result = sut.React();

            // Assert
            result.Should().Be(expectedLength);
        }
Exemplo n.º 10
0
        public void Case1()
        {
            // Arrange
            var polymerSequence = "aA";
            var polymer         = new Polymer(polymerSequence);

            // Act
            polymer.React();

            // Assert
            Assert.Empty(polymer.Sequence);
        }
Exemplo n.º 11
0
        public void Case5()
        {
            // Arrange
            var polymerSequence = "dabAcCaCBAcCcaDA";
            var polymer         = new Polymer(polymerSequence);

            // Act
            polymer.React();

            // Assert
            Assert.Equal("dabCBAcaDA", polymer.Sequence);
        }
Exemplo n.º 12
0
        public void Case4()
        {
            // Arrange
            var polymerSequence = "aabAAB";
            var polymer         = new Polymer(polymerSequence);

            // Act
            polymer.React();

            // Assert
            Assert.Equal(polymerSequence, polymer.Sequence);
        }
Exemplo n.º 13
0
        static long Puzzle1(Polymer data, int iterations)
        {
            var letters = new Dictionary <char, long>();

            // I *really* hope they don't want the actual string data in part 2!
            var stack = new Stack <string>();
            var next  = new Stack <string>();
            var count = 0L;

            // Let's build up an initial set of pairs from the target data
            for (int x = 0; x < data.Template.Length - 1; x++)
            {
                var pair = data.Template[x..(x + 2)];
Exemplo n.º 14
0
        static void Main()
        {
            var polymer            = new Polymer(Input.Value);
            var differentMutations = new List <Polymer>();

            foreach (var types in polymer.AllTypes)
            {
                var mutation = polymer.WithoutTypes(types);
                mutation.React();
                differentMutations.Add(mutation);
            }
            Console.WriteLine($"Answer: {differentMutations.Select(m => m.Sequence.Length).OrderBy(m => m).First()}");
        }
Exemplo n.º 15
0
 public void ReactPolymer(Polymer polymer)
 {
     while (!polymer.IsEof)
     {
         if (polymer.CurrentIsAttractedToNext())
         {
             polymer.RemoveCurrent(2);
             polymer.Back();
         }
         else
         {
             polymer.Forward();
         }
     }
 }
Exemplo n.º 16
0
        public Polymer Sort(IHardenedPolymer polymer, Vector origin)
        {
            Polymer localPolymer = new Polymer(polymer);

            localPolymer.Remove(origin);

            Polymer top = new Polymer();
            Polymer bot = new Polymer();

            foreach (var node in localPolymer)
            {
                var op = node - origin;
                if (op.Y >= 0)
                {
                    top.Add(op);
                }
                else
                {
                    bot.Add(op);
                }
            }

            float cos(Vector point) => Math.Sign(point.X) * point.X * point.X / point.LengthSquared;

            top = new Polymer(top.OrderByDescending(cos));
            bot = new Polymer(bot.OrderBy(cos));

            Polymer sorted = new Polymer();

            sorted.Add(origin);
            foreach (var p in top)
            {
                sorted.Add(p + origin);
            }
            foreach (var p in bot)
            {
                sorted.Add(p + origin);
            }

            return(sorted);
        }
Exemplo n.º 17
0
        private IHardenedPolymer GrahamScan(IHardenedPolymer polymer)
        {
            var angleSorter = new PolymerSorter();
            var origin      = polymer.OrderBy(p => p.Y).ThenBy(p => p.X).First();
            var ordered     = angleSorter.Sort(polymer, origin);
            var stack       = new Stack <Vector>();

            stack.Push(ordered[0]);
            stack.Push(ordered[1]);
            for (int i = 2; i < ordered.Count; i++)
            {
                while (stack.Count >= 2 && !CCW(stack.Skip(1).First(), stack.Peek(), ordered[i]))
                {
                    stack.Pop();
                }
                stack.Push(ordered[i]);
            }

            Polymer hull = new Polymer(stack.Reverse());

            return(hull);
        }
Exemplo n.º 18
0
 public void Polymer_UnitsReact_DetectsWhetherUnitsReactCorrectly(char one, char two, bool expectedReaction)
 {
     Polymer.UnitsReact(one, two).Should().Be(expectedReaction);
 }
Exemplo n.º 19
0
 protected override void LoadState()
 {
     polymer = new(FileContents);
 }
Exemplo n.º 20
0
 protected override void ResetState()
 {
     polymer = null;
 }
Exemplo n.º 21
0
 public Part2()
 {
     polymer = new Polymer();
 }