A versão unidimensional deste problema era bastante fácil, então aqui está uma versão 2D mais difícil.
Você recebe um conjunto 2D de alturas de terra com entrada padrão e precisa descobrir onde os lagos se formarão quando chover. O mapa de altura é apenas uma matriz retangular dos números de 0 a 9, inclusive.
8888888888
5664303498
6485322898
5675373666
7875555787
Você deve produzir a mesma matriz, substituindo todos os locais que estariam embaixo d'água *
.
8888888888
566*****98
6*85***898
5675*7*666
7875555787
A água pode escapar na diagonal, portanto não haveria lago nesta configuração:
888
838
388
o código mais curto vence. Seu código deve lidar com tamanhos de até 80 de largura e 24 de altura.
Mais três exemplos:
77777 77777
75657 7*6*7
75757 => 7*7*7
77677 77677
77477 77477
599999 599999
933339 9****9
936639 => 9*66*9
935539 9*55*9
932109 9****9
999999 999999
88888888 88888888
84482288 8**8**88
84452233 => 8**5**33
84482288 8**8**88
88888888 88888888
Respostas:
Haskell, 258 caracteres
Exemplo de execução:
Passa em todos os testes de unidade. Não há limites arbitrários no tamanho.
m
fonte
Python,
483491 caracteresTenho certeza de que existe uma maneira melhor (e mais curta) de fazer isso
fonte
input()
comsys.stdin.read()
e remova a fuga\n
de minhas entradas de amostra.sys.stdin.read()
lê de um arquivo, certo? Eu ainda sou bastante novo em Python.sys.stdin.read()
lê STanDard INput até EOF.input()
lê e avalia uma linha de entrada padrão.Python,
478471 caracteres(Sem incluir comentários.
452450 caracteres sem incluir as importações.)A idéia aqui é que eu construa um gráfico direcionado onde cada célula da grade tenha seu próprio vértice (mais um vértice "dreno" adicional). Há uma aresta no gráfico de cada célula de valor mais alto para as células vizinhas de valor mais baixo, além de haver uma aresta de todas as células externas no vértice "drenar". Eu então uso o Floyd-Warshall para calcular quais vértices estão conectados ao vértice "drenar"; quaisquer vértices que não estiverem conectados serão inundados e desenhados com um asterisco.
Como não tenho muita experiência com a condensação de código Python, provavelmente há uma maneira mais sucinta de implementar esse método.
fonte
Lisp comum, 833
Nenhuma tentativa foi feita para jogar golfe, apenas achei o problema interessante. Entrada é a matriz 2D do mapa. A solução verifica cada quadrado para ver se "drena" - um quadrado drena se estiver na borda externa ou se estiver adjacente a um quadrado de altura igual ou inferior que drena. Para evitar recursões sem fim, o código mantém um "mapa de drenagem" (dm) onde armazena o status de drenagem dos quadrados que já foram determinados.
fonte
Python, 246 caracteres
A solução funciona executando um DFS de cada posição para determinar se deve ou não ser preenchido.
Se o espaço em branco à direita em cada linha for permitido, ele poderá ser reduzido usando w = 80 e preenchendo as linhas de entrada com espaço em branco para 80 caracteres.
fonte