コード例 #1
0
        public async Task <IActionResult> Save(CameraTile tile)
        {
            if (ModelState.IsValid)
            {
                return(await SaveBaseTile(ConfigStore, tile));
            }

            return(View("Add", tile));
        }
コード例 #2
0
        public async Task <IActionResult> Save(CameraTile tile)
        {
            if (ModelState.IsValid)
            {
                return(await SaveBaseTile(ConfigStore, tile));
            }

            ViewBag.Entities = (await EntityClient.GetEntities("camera")).OrderBy(e => e).Select(e => new SelectListItem(e, e));
            return(View("Add", tile));
        }
コード例 #3
0
        public Day20() : base(20, 2020, "")
        {
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();

            string[] tiles = Input.Split("\n\n");

            Dictionary <int, int> allEdges = new Dictionary <int, int>();
            List <CameraTile>     allTiles = new List <CameraTile>();
            var edgeToTiles = new Dictionary <int, List <CameraTile> >();

            foreach (string tile in tiles)
            {
                CameraTile newTile = new CameraTile(tile);
                allTiles.Add(newTile);

                foreach (int edge in newTile.AllPossibleNeighbors())
                {
                    allEdges[edge] = allEdges.GetValueOrDefault(edge, 0) + 1;

                    if (edgeToTiles.TryGetValue(edge, out List <CameraTile> tilesWithEdge))
                    {
                        tilesWithEdge.Add(newTile);
                    }
                    else
                    {
                        edgeToTiles[edge] = new List <CameraTile>();
                        edgeToTiles[edge].Add(newTile);
                    }
                }
            }

            List <CameraTile> Corner = new List <CameraTile>();
            List <CameraTile> Edge   = new List <CameraTile>();
            List <CameraTile> Center = new List <CameraTile>();

            foreach (CameraTile t in allTiles)
            {
                int edgeCount = 0;

                if (allEdges[t.N] == 1 && allEdges[flipped(t.N)] == 1)
                {
                    t.blockedN = true;
                    edgeCount++;
                }
                if (allEdges[t.E] == 1 && allEdges[flipped(t.E)] == 1)
                {
                    t.blockedE = true;
                    edgeCount++;
                }
                if (allEdges[t.S] == 1 && allEdges[flipped(t.S)] == 1)
                {
                    t.blockedS = true;
                    edgeCount++;
                }
                if (allEdges[t.W] == 1 && allEdges[flipped(t.W)] == 1)
                {
                    t.blockedW = true;
                    edgeCount++;
                }

                if (edgeCount == 2)
                {
                    Corner.Add(t);
                }
                else if (edgeCount == 1)
                {
                    Edge.Add(t);
                }
                else
                {
                    Center.Add(t);
                }
            }

            long product = 1;

            foreach (CameraTile t in Corner)
            {
                product *= t.tileId;
            }

            partOne = product.ToString();

////////////////////////////////////////////////////////////////////////////////////////////////////

            Dictionary <Coordinate2D, CameraTile> board = new Dictionary <Coordinate2D, CameraTile>();

            CameraTile lastTile = Corner[0];

            board[(0, 0)] = lastTile;