Supposons que cette grille d'espaces et X
représente la section transversale de certains bacs à glaçons vides de forme étrange :
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Les colonnes sans X
représentent des trous ou des lacunes dans les plateaux qui ne peuvent pas retenir l'eau, s'écoulant dans un évier de capacité infinie. L'eau tombant du bord le plus à gauche ou le plus à droite de la grille va également dans cet évier sans fin.
Si nous devions placer un robinet au-dessus des plateaux et les laisser se remplir d'eau jusqu'à ce que le niveau d'eau dans tous les compartiments reste stable, les compartiments exacts qui se rempliraient dépendraient exactement de l'endroit où le courant d'eau était positionné au-dessus des plateaux. (Supposez un mince filet d'eau constant sans éclaboussures.)
Par exemple, si notre robinet F
était au-dessus de la colonne de grille tout à gauche
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
l'eau tomberait au sommet X
de cette colonne et se répandrait à gauche et à droite, la moitié gauche se déversant dans l'évier ci-dessous et la moitié droite remplissant le compartiment 2 × 1. Une fois que le compartiment se remplit, la moitié droite du jet d'eau n'a nulle part où s'écouler, mais dans l'évier et le niveau d'eau partout est essentiellement stable.
En fermant le robinet, le plateau ressemble maintenant à ceci: (avec ~
de l'eau)
X X X
X~~X X XX X XX X
XXXXXX XXXXXXXXXXXXX
De même, si nous positionnons le robinet comme ceci:
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Il remplira les deux compartiments les plus à gauche mais le reste de l'eau s'écoulera:
X X X
X~~X~X XX X XX X
XXXXXX XXXXXXXXXXXXX
Si nous positionnons le robinet comme ceci:
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
La moitié gauche du ruisseau coulera dans l'évier mais la moitié droite finira par remplir les trois compartiments les plus à droite car il n'y a pas de limite à la distance à laquelle l'eau peut voyager horizontalement sur une surface plane:
X X~X
X X X XX~X~~XX~~~X
XXXXXX XXXXXXXXXXXXX
Cependant, positionné comme ceci:
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Toute l'eau s'écoule et aucun compartiment n'est rempli:
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Défi
Écrivez un programme ou une fonction qui prend dans une grille rectangulaire d'espaces, X
de et un F
. La ligne du haut contiendra toujours le F
et sinon ne contiendra que des espaces. Le X
's dans chaque colonne (s'il y en a) s'étendra en ligne continue jusqu'à la base de la grille, c'est-à-dire qu'il n'y aura pas de grottes ou de surplombs.
Imprimez ou renvoyez la grille une fois que le robinet F
a rempli ce qu'il peut avec de l'eau, ~
comme décrit ci-dessus. Laissez la F
ligne supérieure hors de la sortie.
La grille en dehors de la rangée de robinets sera de 1 × 1 au minimum afin
F X
est la plus petite entrée que vous devez prendre en charge.
L'entrée apparaîtra sous la forme d'un rectangle de texte complet. Les espaces de début et de fin importent en entrée et en sortie. par exemple l'entrée
F X X XXXX
devrait se traduire par
X~~X XXXX
(notez les espaces de début et de fin)
Avoir une seule nouvelle ligne de fin dans l'entrée ou la sortie est très bien.
Vous pouvez utiliser tous les quatre distincts ASCII imprimables caractères en place de l' espace,
X
,F
,~
.
Le code le plus court en octets gagne.
Grand exemple:
Contribution:
F
X X
X X X
X XXX X X X X X
X X XXXXXXX X XXX XXXXXXX X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXX
Sortie:
X~~~~~~~~~~~~~X
X~~~~~~~~~~~~~X~X
X~~~~~~~~~~~~XXX~~~~~~~X~~~~X~X~~~~~~~~~~~X X
X~~~X~~~~~XXXXXXX~~~~~~X~~~~XXX~~~~~XXXXXXX X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXX
zip()
<3Réponses:
perl -p0, 204 + 2 octets
IDÉE
X *X
es par desX~*X
es sur cette île.X *X
es par desX~*X
es entre le drain du côté inférieur et le point le plus proche de F qui est plus haut que le haut du côté inférieur.Le terrain juste en dessous de F compte ici comme partie des deux côtés.
LE GOLF
REMARQUES
Il peut être difficile de reconnaître l'algorithme d'origine dans cette implémentation car Perl ne prend pas en charge les lookbehinds de longueur variable.
la source
Lua 5.2, 581 octets
Encore une fois, commencez lentement avec un langage si inefficace pour le golf et avec un algorithme inefficace. Mais je vais m'améliorer :)
Cas de test (avec source d'eau):
à partir de bash, il est possible de tester de cette façon, mais ce n'est pas si joli:
la source
Javascript, 460 octets
Démo en ligne (dans la console, testée dans Chrome et Firefox actuels).
Me mettre au défi n'est pas si amusant, mais toujours possible. Même algorithme que celui de Lua, désormais en javascript.
la source