Ejemplo n.º 1
0
        public IActionResult CalculaDias([FromBody] MapaVM mapaVM)
        {
            if (ModelState.IsValid)
            {
                return(Ok(_mapaService.CalculoDias(mapaVM)));
            }

            //retorna totais
            return(BadRequest(ModelState));
        }
Ejemplo n.º 2
0
        public IActionResult MapaGrid([FromForm] MapaVM vm)
        {
            if (ModelState.IsValid)
            {
                HttpClient c = new HttpClient();
                c.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                c.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));

                var req     = new HttpRequestMessage(HttpMethod.Post, "https://localhost:44308/api/Mapa");
                var reqBody = JsonConvert.SerializeObject(vm);
                req.Content = new StringContent(reqBody, Encoding.UTF8, "application/json");
                var resp = c.SendAsync(req).Result;

                var    x   = resp.Content.ReadAsStringAsync().Result;
                MapaVM obj = JsonConvert.DeserializeObject <MapaVM>(x);
                return(View("MapaGrid", obj));
            }
            //return View(vm);

            return(BadRequest());
        }
Ejemplo n.º 3
0
        private Mapa CriaMapa(MapaVM mapaVM)
        {
            int               Linha       = 0;
            int               Coluna      = 0;
            Mapa              mapa        = new Mapa();
            Random            random      = new Random();
            List <Aeroporto>  aeroportos  = new List <Aeroporto>();
            List <NuvemCinza> nuvemCinzas = new List <NuvemCinza>();


            for (int i = 0; i < mapaVM.Aeroportos; i++)
            {
                do
                {
                    Linha  = random.Next(mapaVM.Linhas - 1);
                    Coluna = random.Next(mapaVM.Colunas - 1);
                } while (aeroportos.Where(x => x.Linha == Linha && x.Coluna == Coluna).Any());
                aeroportos.Add(new Aeroporto {
                    Linha = Linha, Coluna = Coluna
                });
            }

            for (int i = 0; i < mapaVM.Nuvens; i++)
            {
                do
                {
                    Linha  = random.Next(mapaVM.Linhas);
                    Coluna = random.Next(mapaVM.Colunas);
                } while (nuvemCinzas.Where(x => x.Linha == Linha && x.Coluna == Coluna).Any() ||
                         aeroportos.Where(x => x.Linha == Linha && x.Coluna == Coluna).Any());
                nuvemCinzas.Add(new NuvemCinza {
                    Linha = Linha, Coluna = Coluna
                });
            }

            return(new Mapa {
                Aeroportos = aeroportos, NuvemCinzas = nuvemCinzas, Linha = mapaVM.Linhas, Coluna = mapaVM.Colunas
            });
        }
Ejemplo n.º 4
0
        public MapaVM CalculoDias(MapaVM mapaVM)
        {
            int dias = 1;
            int qtdAeroportosVisiveis = mapaVM.Aeroportos;
            int dias1Aeroporto        = 0;
            int diasTodosAeroportos   = 0;

            char[,] grid = new char[mapaVM.Linhas, mapaVM.Colunas];
            bool flAeroportoVisivel = false;
            Mapa mapa = CriaMapa(mapaVM);

            MapaVM retornoGrid = new MapaVM(mapa.Aeroportos.Count(), mapa.NuvemCinzas.Count(), mapaVM.Linhas, mapaVM.Colunas, new List <char[, ]>());

            // preenche grid com informações
            foreach (Aeroporto aeroporto in mapa.Aeroportos)
            {
                grid[aeroporto.Linha, aeroporto.Coluna] = 'A';
            }
            foreach (NuvemCinza nuvemCinza in mapa.NuvemCinzas)
            {
                grid[nuvemCinza.Linha, nuvemCinza.Coluna] = '*';
            }

            //Calcula variação dos dias
            while (qtdAeroportosVisiveis > 0)
            {
                flAeroportoVisivel = false;
                // Analisa Aeroportos
                foreach (Aeroporto aeroporto in mapa.Aeroportos)
                {
                    if (grid[aeroporto.Linha, aeroporto.Coluna].Equals('A'))
                    {
                        bool flNuvem = false;
                        if (aeroporto.Linha > 0)
                        {
                            if (grid[aeroporto.Linha - 1, aeroporto.Coluna].Equals('*'))
                            {
                                flNuvem = true;
                            }
                        }
                        if (aeroporto.Coluna > 0)
                        {
                            if (grid[aeroporto.Linha, aeroporto.Coluna - 1].Equals('*'))
                            {
                                flNuvem = true;
                            }
                        }
                        if (aeroporto.Coluna + 1 < mapaVM.Colunas)
                        {
                            if (grid[aeroporto.Linha, aeroporto.Coluna + 1].Equals('*'))
                            {
                                flNuvem = true;
                            }
                        }
                        if (aeroporto.Linha + 1 < mapaVM.Linhas)
                        {
                            if (grid[aeroporto.Linha + 1, aeroporto.Coluna].Equals('*'))
                            {
                                flNuvem = true;
                            }
                        }
                        if (flNuvem)
                        {
                            dias1Aeroporto      = (dias1Aeroporto == 0 || dias1Aeroporto > dias + 1) ? dias + 1 : dias1Aeroporto;
                            diasTodosAeroportos = (diasTodosAeroportos == 0 || diasTodosAeroportos < dias + 1) ? dias + 1 : diasTodosAeroportos;
                        }
                        flAeroportoVisivel = true;
                    }
                }

                // Amplia nuvens
                retornoGrid.Grids.Add((char[, ])grid.Clone());

                char[,] gridClone = (char[, ])grid.Clone();
                for (int i = 0; i < mapaVM.Linhas; i++)
                {
                    for (int j = 0; j < mapaVM.Colunas; j++)
                    {
                        if (gridClone[i, j].Equals('*'))
                        {
                            if (i > 0)
                            {
                                if (grid[i - 1, j].Equals('A'))
                                {
                                    qtdAeroportosVisiveis--;
                                }
                                grid[i - 1, j] = '*';
                            }
                            if (i + 1 < mapaVM.Linhas)
                            {
                                if (grid[i + 1, j].Equals('A'))
                                {
                                    qtdAeroportosVisiveis--;
                                }
                                grid[i + 1, j] = '*';
                            }
                            if (j > 0)
                            {
                                if (grid[i, j - 1].Equals('A'))
                                {
                                    qtdAeroportosVisiveis--;
                                }
                                grid[i, j - 1] = '*';
                            }
                            if (j + 1 < mapaVM.Colunas)
                            {
                                if (grid[i, j + 1].Equals('A'))
                                {
                                    qtdAeroportosVisiveis--;
                                }
                                grid[i, j + 1] = '*';
                            }
                        }
                    }
                }

                if (!flAeroportoVisivel || qtdAeroportosVisiveis == 0)
                {
                    retornoGrid.Grids.Add((char[, ])grid.Clone());
                    break;
                }


                dias++;
            }
            retornoGrid.Dias1Aeroporto      = dias1Aeroporto;
            retornoGrid.DiasTodosAeroportos = diasTodosAeroportos;

            return(retornoGrid);
        }