Angenommen, dieses Gitter von Räumen und X
's repräsentiert den Querschnitt einiger seltsam geformter leerer Eiswürfelschalen :
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Spalten ohne X
's stellen Löcher oder Lücken in den Schalen dar, die kein Wasser aufnehmen können und in eine Senke mit unbegrenzter Kapazität abfließen. Wasser, das vom linken oder rechten Rand des Gitters abfällt, fließt ebenfalls in diese endlose Spüle.
Wenn wir einen Wasserhahn über den Schalen positionieren und sie mit Wasser füllen lassen, bis der Wasserstand in allen Fächern stabil bleibt, hängen die genauen Fächer, die gefüllt werden, davon ab, wo genau der Wasserstrom über den Schalen positioniert ist. (Nehmen Sie einen dünnen, gleichmäßigen Wasserstrahl ohne Spritzer an.)
Zum Beispiel, wenn sich unser Wasserhahn F
über der linken Spalte befindet
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Das Wasser fiel bis zum obersten Punkt X
in dieser Säule und breitete sich links und rechts aus, wobei die linke Hälfte in das darunter liegende Waschbecken und die rechte Hälfte das 2 × 1-Fach füllten. Sobald sich das Fach gefüllt hat, kann die rechte Hälfte des Wasserstroms nur noch in die Spüle fließen, und der Wasserstand ist überall im Wesentlichen stabil.
Wenn Sie den Wasserhahn ausschalten, sieht das Fach jetzt so aus: (mit ~
Wasser)
X X X
X~~X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Ebenso, wenn wir den Wasserhahn wie folgt positionieren:
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Es füllt die beiden Fächer ganz links, aber der Rest des Wassers fließt ab:
X X X
X~~X~X XX X XX X
XXXXXX XXXXXXXXXXXXX
Wenn wir den Wasserhahn so positionieren:
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Die linke Hälfte des Stroms fließt in die Spüle, aber die rechte Hälfte füllt schließlich die drei am weitesten rechts liegenden Bereiche aus, da die horizontale Reichweite von Wasser auf einer ebenen Fläche unbegrenzt ist:
X X~X
X X X XX~X~~XX~~~X
XXXXXX XXXXXXXXXXXXX
So positioniert jedoch:
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Das gesamte Wasser fließt ab und es sind keine Fächer gefüllt:
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die ein rechteckiges Raster aus Leerzeichen X
und einem enthält F
. Die oberste Zeile enthält immer die F
und ansonsten nur Leerzeichen. DasX
s in jeder Spalte (falls vorhanden) erstrecken sich in einer durchgezogenen Linie von der Basis des Gitters aus, dh es gibt keine Höhlen oder Überhänge.
Drucken Sie das Gitter aus oder senden Sie es zurück, nachdem der Wasserhahn wie oben beschrieben F
mit Wasser gefüllt wurde ~
. Lassen Sie die obere F
Reihe aus der Ausgabe.
Das Gitter neben der Wasserhahnreihe beträgt mindestens 1 × 1
F X
ist die kleinste Eingabe, die Sie unterstützen müssen.
Die Eingabe erfolgt als vollständiges Textrechteck. Führende und nachfolgende Leerzeichen spielen bei der Eingabe und Ausgabe eine Rolle. zB die Eingabe
F X X XXXX
sollte ergeben
X~~X XXXX
(beachte die führenden und nachfolgenden Leerzeichen)
Es ist in Ordnung, in der Eingabe oder Ausgabe eine einzige nachgestellte Newline zu haben.
Sie können alle vier verschiedene verwenden druckbaren ASCII - Zeichen anstelle von Raum,
X
,F
,~
.
Der kürzeste Code in Bytes gewinnt.
Großes Beispiel:
Eingang:
F
X X
X X X
X XXX X X X X X
X X XXXXXXX X XXX XXXXXXX X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXX
Ausgabe:
X~~~~~~~~~~~~~X
X~~~~~~~~~~~~~X~X
X~~~~~~~~~~~~XXX~~~~~~~X~~~~X~X~~~~~~~~~~~X X
X~~~X~~~~~XXXXXXX~~~~~~X~~~~XXX~~~~~XXXXXXX X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXX
zip()
<3Antworten:
Perl -p0, 204 + 2 Bytes
IDEE
X *X
durchX~*X
es auf dieser Insel.X *X
es durchX~*X
es zwischen dem Abfluss auf der unteren Seite und dem Punkt, der F am nächsten liegt und höher ist als die Oberseite der unteren Seite.Das Land direkt unter F zählt hier zu beiden Seiten.
GOLF
ANMERKUNGEN
Es ist möglicherweise schwierig, den ursprünglichen Algorithmus in dieser Implementierung zu erkennen, da Perl keine Lookbehinds mit variabler Länge unterstützt.
quelle
Lua 5.2, 581 Bytes
Wieder langsam mit so ineffektiver Sprache zum Golfen und mit ineffektivem Algorithmus beginnen. Aber ich werde mich verbessern :)
Testfälle (mit Wasserquelle):
Von Bash aus ist es möglich, diesen Weg zu testen, aber es sieht nicht so schön aus:
quelle
Javascript, 460 Bytes
Online-Demo (in der Konsole, getestet in aktuellem Chrome und Firefox).
Mich selbst herauszufordern ist nicht so lustig, aber dennoch möglich. Gleicher Algorithmus wie der von Lua, jetzt in Javascript.
quelle