public override string?CalculateSolutionPartTwo() { var computer = new IntcodeComputer(_initialMemory); var inputQueue = new Queue <long>(new[] { 1L }); IDynamicIndexable2D <bool> panels = new DynamicIndexable2D <bool>(new[, ] { { true } }.AsIndexable()); Position pos = Position.Zero; Direction direction = Direction.North; using IEnumerator <long> e = computer.Execute(inputQueue).GetEnumerator(); while (e.MoveNext()) { long color = e.Current; long turn = e.MoveNext() ? e.Current : throw new InvalidOperationException(); panels[pos] = color == 1; direction = turn == 1 ? direction.ToRight() : direction.ToLeft(); pos += direction * 1; inputQueue.Enqueue(panels[pos] ? 1 : 0); } return(SolutionPartTwo = panels.ToString(b => b ? '#' : ' ', screenMode: true)); }
public override string?CalculateSolution() { var computer = new IntcodeComputer(_initialMemory); var inputQueue = new Queue <long>(new[] { 0L }); IDynamicIndexable2D <bool> panels = new DynamicIndexable2D <bool>(); Position pos = Position.Zero; Direction direction = Direction.North; var paintedPanels = new HashSet <Position>(); using IEnumerator <long> e = computer.Execute(inputQueue).GetEnumerator(); while (e.MoveNext()) { long color = e.Current; long turn = e.MoveNext() ? e.Current : throw new InvalidOperationException(); panels[pos] = color == 1; paintedPanels.Add(pos); direction = turn == 1 ? direction.ToRight() : direction.ToLeft(); pos += direction * 1; inputQueue.Enqueue(panels[pos] ? 1 : 0); } return(Solution = paintedPanels.Count().ToString()); }
public override string?CalculateSolution() { var computer = new IntcodeComputer(_initialMemory); computer.Memory[1] = 12; computer.Memory[2] = 2; computer.Execute().Count(); return(Solution = computer.Memory[0].ToString()); }
public override string?CalculateSolutionPartTwo() { var computer = new IntcodeComputer(); for (int noun = 0; noun <= 99; noun++) { for (int verb = 0; verb <= 99; verb++) { computer.LoadProgram(_initialMemory); computer.Memory[1] = noun; computer.Memory[2] = verb; computer.Execute().Count(); if (computer.Memory[0] == 19690720) { return(SolutionPartTwo = (100 * noun + verb).ToString()); } } } return(SolutionPartTwo = ""); }
public override string?CalculateSolutionPartTwo() { IDynamicIndexable2D <int> screen = new DynamicIndexable2D <int>(); var computer = new IntcodeComputer(_initialMemory); computer.Memory[0] = 2; using IEnumerator <long> e = computer.Execute(PaddleMovesEnumerable()).GetEnumerator(); bool draw = false; long score = 0; int blockCount = 0; bool scoreDrawn = false; if (draw) { Console.Clear(); } while (e.MoveNext()) { int x = (int)e.Current; if (!e.MoveNext()) { break; } int y = (int)e.Current; if (!e.MoveNext()) { break; } int id = (int)e.Current; if (x == -1 && y == 0) { score = id; if (draw) { Console.SetCursorPosition(0, 0); Console.WriteLine($"Score: {score}"); Console.SetCursorPosition(0, 0); scoreDrawn = true; } } else { if (id == ScreenObject.Block && screen[x, y] != ScreenObject.Block) { blockCount++; } else if (id != ScreenObject.Block && screen[x, y] == ScreenObject.Block) { blockCount--; } screen[x, y] = id; if (draw) { Console.SetCursorPosition(x, y + 1); Console.Write(screen[x, y] switch { 1 => '+', 2 => 'x', 3 => '_', 4 => 'o', _ => ' ' });