示例#1
0
    //-----------------------------------------------------------------

    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));
    }
示例#2
0
    //-----------------------------------------------------------------

    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));
    }
示例#3
0
        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();
            }
        }
示例#4
0
    //-----------------------------------------------------------------
    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));
    }