//----------------------------------------------------------------- public override long Part2(string input) { var area = PartArea(input); if (_gridPreview != null) { _gridPreview.Grid = area; _gridPreview.Update(); } if (_occupiedPreview != null) { _occupiedPreview.Grid = new Grid <int>(0, new Point(0, area.UsedMaxX), new Point(0, area.UsedMaxY)); _occupiedPreview.Update(); } ///return 0; while (Step(area, GetDirectionsAdjacentSeats, 5)) { //_occupiedPreview?.Update(); //System.Console.ReadLine(); //Console.WriteLine("Step"); //Console.WriteLine(string.Join(",", GetDirectionsAdjacentSeats(area, new Point(4, 1)))); _gridPreview?.Update(); } return(area.PointsAndValues().Count(x => x.Value == TileType.Occupied)); }
//----------------------------------------------------------------- public override long Part1(string input) { var area = PartArea(input); if (_gridPreview != null) { _gridPreview.Grid = area; _gridPreview.Update(); } while (Step(area, GetImmediatelyAdjacentSeats, 4)) { Console.WriteLine("Step"); _gridPreview?.Update(); } return(area.PointsAndValues().Count(x => x.Value == TileType.Occupied)); }
public void Step() { if (y >= _totalHeight) { return; } Grid[x, y] = LastTile; x += _direction.X; y += _direction.Y; if (Renderer != null) { Renderer.Offset = new Point(x - Renderer.Viewport.Width / 2, y - Renderer.Viewport.Height / 2); } var gridValue = Grid[x, y]; Grid[x, y] = '@'; if (gridValue == '#') { LastTile = 'X'; HitTrees++; if (TreeHitHeader != null) { TreeHitHeader.SetValue(HitTrees); } } else { LastTile = 'O'; OpenSquare++; } if (Renderer != null) { Renderer.Update(); } }
//----------------------------------------------------------------- public override long Part1(string input) { var worldmap = new GrowingGrid <char>('~', new Point(-20, 20), new Point(-20, 20), 20, true, true); if (_gridPreview != null) { _gridPreview.Grid = worldmap; } worldmap[0, 0] = '@'; _gridPreview?.Update(); var instructions = ParseInput(input); int shipX = 0; int shipY = 0; var direction = Direction.Est; foreach (var instruction in instructions) { Console.WriteLine(instruction.Direction + " " + instruction.Amount); worldmap[shipX, shipY] = '!'; switch (instruction.Direction) { case 'N': shipY -= instruction.Amount; break; case 'S': shipY += instruction.Amount; break; case 'W': shipX -= instruction.Amount; break; case 'E': shipX += instruction.Amount; break; case 'L': for (int i = 0; i < instruction.Amount / 90; i++) { direction = direction.Left(); } break; case 'R': for (int i = 0; i < instruction.Amount / 90; i++) { direction = direction.Right(); } break; case 'F': var movement = direction.ToPoint() * instruction.Amount; shipX += movement.X; shipY += movement.Y; break; } worldmap[shipX, shipY] = '@'; Console.WriteLine("-> Ship : " + new Point(shipX, shipY) + " - " + direction); if (_gridPreview != null) { _gridPreview.Offset = new Point(shipX - _gridPreview.Viewport.Width / 2, shipY - _gridPreview.Viewport.Height / 2); } _gridPreview?.Update(); } return(new Point(shipX, shipY).DistanceManhattan(Point.ZERO)); }