public void Puzzle1_CountRemainingUnits_AfterAllCollapseEvents() { var polymer = new Polymer(Input.Day05); var collapsed = polymer.Collapse(); collapsed.Should().HaveLength(9288); }
public void Puzzle2_ReduceUnits_AndFindShortestChain() { var polymer = new Polymer(Input.Day05); var shortest = polymer.FindShortestPolymer(); shortest.Should().HaveLength(5844); }
public static void Main() { Polymer.Register <MyElement>(); Polymer.Register <MyInput>(); Polymer.Register <MyApp>(); Polymer.Register <MyTimer>(); }
public void Puzzle2Example_PolymerReducesUnitsAndFindsShortestPossibleChain() { const string input = "dabAcCaCBAcCcaDA"; const string expected = "daDA"; var actual = new Polymer(input).FindShortestPolymer(); actual.Should().Be(expected); }
public Obstacle(Polymer polymer) { if (polymer.Count < 3) { throw new InvalidNumberOfNodesException(); } this.polymer = polymer; segments = polymer.ToSegments(); }
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); }
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); }
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); }
public void React(string input, int expectedLength) { // Arrange var sut = new Polymer(input); // Act var result = sut.React(); // Assert result.Should().Be(expectedLength); }
public void Case1() { // Arrange var polymerSequence = "aA"; var polymer = new Polymer(polymerSequence); // Act polymer.React(); // Assert Assert.Empty(polymer.Sequence); }
public void Case5() { // Arrange var polymerSequence = "dabAcCaCBAcCcaDA"; var polymer = new Polymer(polymerSequence); // Act polymer.React(); // Assert Assert.Equal("dabCBAcaDA", polymer.Sequence); }
public void Case4() { // Arrange var polymerSequence = "aabAAB"; var polymer = new Polymer(polymerSequence); // Act polymer.React(); // Assert Assert.Equal(polymerSequence, polymer.Sequence); }
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)];
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()}"); }
public void ReactPolymer(Polymer polymer) { while (!polymer.IsEof) { if (polymer.CurrentIsAttractedToNext()) { polymer.RemoveCurrent(2); polymer.Back(); } else { polymer.Forward(); } } }
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); }
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); }
public void Polymer_UnitsReact_DetectsWhetherUnitsReactCorrectly(char one, char two, bool expectedReaction) { Polymer.UnitsReact(one, two).Should().Be(expectedReaction); }
protected override void LoadState() { polymer = new(FileContents); }
protected override void ResetState() { polymer = null; }
public Part2() { polymer = new Polymer(); }