public string CalculatePart1(string inputFile) { var program = GetProgram(inputFile); long?result = 0; var runner = new IntCodeRunner9(program); var counter = 0; var counter1 = 0; while (result != null) { result = runner.Run(0); if (counter == 2) { counter = 0; if (result.HasValue && result.Value == 2) { counter1++; } } else { counter++; } } return((counter1).ToString()); }
private static Dictionary <ScaffoldPoint, PointType> GetMap(IntCodeRunner9 computer, StringBuilder sb) { var map = new Dictionary <ScaffoldPoint, PointType>(); var x = 0; var y = 0; var result = computer.Run(null); while (result.HasValue) { if (result == 10) { x = 0; y++; sb.Append((char)result); result = computer.Run(null); continue; } var type = GetPointType((char)result); map.Add(new ScaffoldPoint(x, y), type); sb.Append((char)result); x++; result = computer.Run(null); } return(map); }
public string CalculatePart1(string inputFile) { var program = GetProgram(inputFile); var computer = new IntCodeRunner9(program); var sb = new StringBuilder(); sb.AppendLine(); var map = GetMap(computer, sb); long intersectionSum = 0; foreach (var scaffold in map .Where(x => x.Value == PointType.Scaffold) .Select(x => x.Key)) { var values = Enum.GetValues(typeof(Direction)).Cast <Direction>(); var isIntersection = values .Select(x => scaffold.GetPoint(x)) .All(x => map.ContainsKey(x) && map[x] == PointType.Scaffold); if (isIntersection) { intersectionSum += scaffold.X * scaffold.Y; } } sb.AppendLine(intersectionSum.ToString()); var path = GetPath(map); sb.AppendLine(path); return(sb.ToString()); }
public string CalculatePart2(string inputFile) { var program = GetProgram(inputFile); var runner = new IntCodeRunner9(program); var painted = new IntCodeRunner9.DefaultableDictionary <PanelPoint, long>(new Dictionary <PanelPoint, long>(), 0); var currentPoint = new PanelPoint(0, 0); painted[currentPoint] = 1; var currentDirection = Direction.Up; while (true) { var color = painted[currentPoint]; var paint = runner.Run(color); var turn = runner.Run(color); if (!paint.HasValue || !turn.HasValue) { break; } painted[currentPoint] = paint.Value; if (turn == 0) { currentDirection = TurnLeft(currentDirection); } else if (turn == 1) { currentDirection = TurnRight(currentDirection); } currentPoint = currentPoint.GetPoint(currentDirection); } var whites = painted.Where(x => x.Value == 1).OrderByDescending(x => x.Key.Y).GroupBy(x => x.Key.Y); var minX = painted.Min(x => x.Key.X); var maxX = painted.Max(x => x.Key.X); var sb = new StringBuilder(); sb.AppendLine(); foreach (var whiteLine in whites) { for (int i = minX; i < maxX + 1; i++) { sb.Append(whiteLine.Any(x => x.Key.X == i) ? "*" : " "); } sb.AppendLine(); } return(sb.ToString()); }
public string CalculatePart2(string inputFile) { var program = GetProgram(inputFile); program[0] = 2; long score = 0; long input = 0; long paddle = 0; long ball = 0; var runner = new IntCodeRunner9(program); while (true) { var resultX = runner.Run(input); var resultY = runner.Run(input); var resultT = runner.Run(input); if (resultX == null || resultY == null || resultT == null) { break; } if (resultX.Value == -1 && resultY.Value == 0) { score = resultT.Value; Console.WriteLine(score); } if (resultT == 3) { paddle = resultX.Value; } if (resultT == 4) { ball = resultX.Value; } if (ball < paddle) { input = -1; } else if (ball > paddle) { input = 1; } else { input = 0; } } return(score.ToString()); }
public string CalculatePart2(string inputFile) { var program = GetProgram(inputFile); var sb = new StringBuilder(); long?result = 0; var runner = new IntCodeRunner9(program); while (result.HasValue) { result = runner.Run(2); sb.AppendLine(result.ToString()); } return(sb.ToString()); }
public string CalculatePart2(string inputFile) { var program = GetProgram(inputFile); program[0] = 2; var solution = "A,A,B,C,B,C,B,C,C,A\nR,8,L,4,R,4,R,10,R,8\nL,12,L,12,R,8,R,8\nR,10,R,4,R,4\nn\n"; var computer = new IntCodeRunner9(program); long?result = 0; long numResult = 0; var sb = new StringBuilder(); GetMap(computer, sb); foreach (var c in solution.ToCharArray()) { var input = (long)c; result = computer.Run(input); if (c == '\n') { sb.Append((char)result); numResult = result.Value; do { result = computer.Run(null); if (result.HasValue) { sb.Append((char)result); numResult = result.Value; } } while (result != null); sb.AppendLine(); } } sb.AppendLine(numResult.ToString()); return(sb.ToString()); }
public string CalculatePart1(string inputFile) { var program = GetProgram(inputFile); var runner = new IntCodeRunner9(program); var painted = new IntCodeRunner9.DefaultableDictionary <PanelPoint, long>(new Dictionary <PanelPoint, long>(), 0); var currentPoint = new PanelPoint(0, 0); var currentDirection = Direction.Up; while (true) { var color = painted[currentPoint]; var paint = runner.Run(color); var turn = runner.Run(color); if (!paint.HasValue || !turn.HasValue) { break; } painted[currentPoint] = paint.Value; if (turn == 0) { currentDirection = TurnLeft(currentDirection); } else if (turn == 1) { currentDirection = TurnRight(currentDirection); } currentPoint = currentPoint.GetPoint(currentDirection); } return(painted.Count.ToString()); }
public Droid(long[] program) { _runner = new IntCodeRunner9(program); }