Supongamos que esta cuadrícula de espacios y X
's representa la sección transversal de algunas bandejas de cubitos de hielo vacías de forma extraña :
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Las columnas sin X
's representan agujeros o huecos en las bandejas que no pueden retener agua, drenando en un sumidero de capacidad infinita. El agua que cae del borde más a la izquierda o más a la derecha de la rejilla también entra en este sumidero sin fin.
Si colocamos un grifo sobre las bandejas y dejamos que se llenen de agua hasta que el nivel de agua en todos los compartimientos permanezca estable, los compartimentos exactos que se llenen dependerán exactamente de dónde se colocó la corriente de agua sobre las bandejas. (Suponga una corriente de agua delgada y constante sin salpicaduras).
Por ejemplo, si nuestro grifo F
estuviera sobre la columna de la cuadrícula muy a la izquierda
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
el agua caería hasta la parte superior X
de esa columna y se extendería a izquierda y derecha, la mitad izquierda se derramaría en el fregadero de abajo y la mitad derecha llenaría el compartimento 2 × 1. Una vez que el compartimento se llena, la mitad derecha de la corriente de agua no tiene otro lugar que fluir sino hacia el fregadero y el nivel del agua en todas partes es esencialmente estable.
Al cerrar el grifo, la bandeja ahora se ve así: (con ~
agua)
X X X
X~~X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Del mismo modo, si posicionamos el grifo de esta manera:
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Llenará los dos compartimentos más a la izquierda, pero el resto del agua se drenará:
X X X
X~~X~X XX X XX X
XXXXXX XXXXXXXXXXXXX
Si colocamos el grifo de esta manera:
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
La mitad izquierda de la corriente fluirá hacia el fregadero, pero la mitad derecha eventualmente llenará los tres compartimentos más a la derecha porque no hay límite en cuanto a la distancia que puede viajar el agua horizontalmente en una superficie plana:
X X~X
X X X XX~X~~XX~~~X
XXXXXX XXXXXXXXXXXXX
Posicionado así, sin embargo:
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Toda el agua se drena y no se llenan los compartimentos:
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Reto
Escriba un programa o función que tome una cuadrícula rectangular de espacios, X
's y uno F
. La fila superior siempre contendrá F
y, de lo contrario, solo contendrá espacios. Los X
's en cada columna (si hay alguno) se extenderán en una línea sólida desde la base de la cuadrícula, es decir, no habrá cuevas ni salientes.
Imprima o devuelva la cuadrícula después de que el grifo F
haya llenado lo que pueda con agua ~
como se describe anteriormente. Deje la F
fila superior fuera de la salida.
La cuadrícula aparte de la fila del grifo será 1 × 1 como mínimo, por lo que
F X
es la entrada más pequeña que necesita admitir.
La entrada vendrá como un rectángulo de texto completo. Los espacios iniciales y finales son importantes en la entrada y la salida. por ejemplo, la entrada
F X X XXXX
debería resultar en
X~~X XXXX
(tenga en cuenta los espacios iniciales y finales)
Tener una nueva línea final en la entrada o salida está bien.
Puede utilizar cualquiera de los cuatro distintos ASCII imprimibles caracteres en lugar del espacio,
X
,F
,~
.
El código más corto en bytes gana.
Gran ejemplo:
Entrada:
F
X X
X X X
X XXX X X X X X
X X XXXXXXX X XXX XXXXXXX X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXX
Salida:
X~~~~~~~~~~~~~X
X~~~~~~~~~~~~~X~X
X~~~~~~~~~~~~XXX~~~~~~~X~~~~X~X~~~~~~~~~~~X X
X~~~X~~~~~XXXXXXX~~~~~~X~~~~XXX~~~~~XXXXXXX X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXX
zip()
<3Respuestas:
perl -p0, 204 + 2 bytes
IDEA
X *X
es porX~*X
es en esa isla.X *X
es conX~*X
es entre el drenaje en el lado inferior y el punto más cercano a F que sea más alto que la parte superior del lado inferior.La tierra directamente debajo de F cuenta como parte de ambos lados aquí.
GOLF
Notas
Puede ser difícil reconocer el algoritmo original en esta implementación, ya que Perl no admite retrospectivas de longitud variable.
fuente
Lua 5.2, 581 bytes
Nuevamente, comience lentamente con un lenguaje tan ineficaz para jugar al golf y con un algoritmo ineficaz. Pero mejoraré :)
Casos de prueba (con fuente de agua):
desde bash es posible probar de esta manera, pero no se ve tan bien:
fuente
Javascript, 460 bytes
Demostración en línea (en consola, probada en Chrome y Firefox actuales).
Desafiarme a mí mismo no es tan divertido, pero aún es posible. Mismo algoritmo que el Lua, ahora en javascript.
fuente