Suponha que essa grade de espaços e X
's represente a seção transversal de algumas bandejas de cubos de gelo vazias de formato estranho :
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
As colunas sem X
representam buracos ou lacunas nas bandejas que não podem reter água, drenando para um coletor de capacidade infinita. A água que cai da borda mais à esquerda ou à direita da grade também entra neste coletor interminável.
Se posicionarmos uma torneira acima das bandejas e deixá-las encher de água até que o nível da água em todos os compartimentos permaneça estável, os compartimentos exatos que ficarem cheios dependerão exatamente de onde o fluxo de água foi posicionado acima das bandejas. (Suponha um fluxo fino e constante de água sem respingos.)
Por exemplo, se nossa torneira F
estivesse acima da coluna da grade esquerda
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
a água cairia até o topo X
da coluna e se espalharia para a esquerda e direita, a metade esquerda derramando na pia abaixo e a metade direita enchendo o compartimento 2 × 1. Quando o compartimento se enche, a metade direita da corrente da água não tem para onde fluir, a não ser para a pia e o nível da água em todos os lugares é essencialmente estável.
Fechando a torneira, a bandeja agora fica assim: (com a ~
água)
X X X
X~~X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Da mesma forma, se posicionarmos a torneira assim:
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Encherá os dois compartimentos mais à esquerda, mas o restante da água será drenado:
X X X
X~~X~X XX X XX X
XXXXXX XXXXXXXXXXXXX
Se posicionarmos a torneira assim:
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
A metade esquerda do fluxo fluirá para a pia, mas a metade direita acabará preenchendo os três compartimentos mais à direita, porque não há limite para a distância que a água pode percorrer horizontalmente em uma superfície plana:
X X~X
X X X XX~X~~XX~~~X
XXXXXX XXXXXXXXXXXXX
Posicionado assim, no entanto:
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Toda a água escorre e nenhum compartimento está cheio:
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Desafio
Escreva um programa ou função que consiga uma grade retangular de espaços, X
's e um F
. A linha superior sempre conterá os F
espaços e, de outra forma, apenas. Os X
em cada coluna (se houver) se estenderão em uma linha sólida a partir da base da grade, ou seja, não haverá cavernas ou saliências.
Imprima ou devolva a grade depois que a torneira F
enche o que puder com água, ~
conforme descrito acima. Deixe a F
linha superior fora da saída.
A grade separada da linha da torneira será de 1 × 1 no mínimo,
F X
é a menor entrada que você precisa oferecer suporte.
A entrada entrará como um retângulo de texto completo. Os espaços iniciais e finais são importantes na entrada e na saída. por exemplo, a entrada
F X X XXXX
deve resultar em
X~~X XXXX
(observe os espaços à esquerda e à direita)
Ter uma nova linha à direita na entrada ou saída é bom.
Você pode usar qualquer quatro distintas ASCII imprimíveis caracteres no lugar do espaço,
X
,F
,~
.
O código mais curto em bytes vence.
Grande exemplo:
Entrada:
F
X X
X X X
X XXX X X X X X
X X XXXXXXX X XXX XXXXXXX X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXX
Saída:
X~~~~~~~~~~~~~X
X~~~~~~~~~~~~~X~X
X~~~~~~~~~~~~XXX~~~~~~~X~~~~X~X~~~~~~~~~~~X X
X~~~X~~~~~XXXXXXX~~~~~~X~~~~XXX~~~~~XXXXXXX X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXX
zip()
<3Respostas:
perl -p0, 204 + 2 bytes
IDÉIA
X *X
es porX~*X
es nessa ilha.X *X
es porX~*X
es entre o dreno no lado inferior e o ponto mais próximo de F que é mais alto que o topo do lado inferior.A terra diretamente abaixo de F conta como parte de ambos os lados aqui.
GOLFE
NOTAS
Pode ser difícil reconhecer o algoritmo original nesta implementação, já que o Perl não suporta visuais de comprimento variável.
fonte
Lua 5.2, 581 bytes
Novamente, comece lentamente com uma linguagem tão ineficaz para jogar golfe e com um algoritmo ineficaz. Mas vou melhorar :)
Casos de teste (com fonte de água):
do bash é possível testar dessa maneira, mas não parece tão legal:
fonte
Javascript, 460 bytes
Demonstração online (no console, testada no Chrome e Firefox atuais).
Desafiar a mim mesmo não é tão divertido, mas ainda é possível. Mesmo algoritmo que o Lua, agora em javascript.
fonte