La versión unidimensional de este problema fue bastante fácil, así que aquí hay una versión 2D más difícil.
Se le proporciona una matriz 2D de alturas de tierra en la entrada estándar, y tiene que averiguar dónde se formarán los lagos cuando llueva. El mapa de altura es solo una matriz rectangular de los números 0-9, inclusive.
8888888888
5664303498
6485322898
5675373666
7875555787
Debe generar la misma matriz, reemplazando todas las ubicaciones que estarían bajo el agua *
.
8888888888
566*****98
6*85***898
5675*7*666
7875555787
El agua puede escapar en diagonal, por lo que no habría lago en esta configuración:
888
838
388
el código más corto gana. Su código debe manejar tamaños de hasta 80 de ancho y 24 de alto.
Tres ejemplos más:
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
Respuestas:
Haskell, 258 caracteres
Ejemplo de ejecución:
Pasa todas las pruebas unitarias. No hay límites arbitrarios en el tamaño.
m
fuente
Python,
483491 caracteresEstoy bastante seguro de que hay una manera mejor (y más corta) de hacer esto
fuente
input()
consys.stdin.read()
y retire el arrastre\n
de mis entradas de muestra.sys.stdin.read()
lee de un archivo ¿verdad? Todavía soy bastante nuevo en Python.sys.stdin.read()
lee ENTRADA ESTÁNDAR hasta EOF.input()
lee y evalúa una línea de entrada estándar.Python,
478471 caracteres(Sin incluir comentarios.
452450 caracteres sin incluir las importaciones).La idea aquí es que construya un gráfico dirigido donde cada celda de la cuadrícula tenga su propio vértice (más un vértice de "drenaje" adicional). Hay un borde en el gráfico desde cada celda de mayor valor a sus celdas vecinas de menor valor, además hay un borde desde todas las celdas exteriores hasta el vértice de "drenaje". Luego uso Floyd-Warshall para calcular qué vértices están conectados al vértice de "drenaje"; cualquier vértice que no esté conectado se inundará y se dibujará con un asterisco.
No tengo mucha experiencia con la condensación de código Python, por lo que probablemente haya una forma más sucinta de haber implementado este método.
fuente
Lisp común, 833
No se ha hecho ningún intento de jugar al golf, el problema me pareció interesante. La entrada es la matriz 2D del mapa. La solución verifica cada cuadrado para ver si "drena": un cuadrado drena si está en el borde exterior o si está adyacente a un cuadrado de altura igual o menor que drena. Para evitar que se repita sin cesar, el código mantiene un "mapa de drenaje" (dm) donde almacena el estado de drenaje de los cuadrados que ya se han determinado.
fuente
Python, 246 caracteres
La solución funciona haciendo un DFS desde cada posición para determinar si se debe llenar o no.
Si se permite el espacio en blanco al final de cada línea, se puede acortar usando w = 80 y rellenando las líneas de entrada con espacios en blanco a 80 caracteres.
fuente