Die eindimensionale Version dieses Problems war ziemlich einfach. Hier ist eine schwierigere 2D-Version.
Sie erhalten eine 2D-Anordnung von Landhöhen bei Standardeingabe und müssen herausfinden, wo sich die Seen bilden, wenn es regnet. Die Höhenkarte ist nur eine rechteckige Anordnung der Zahlen 0-9 einschließlich.
8888888888
5664303498
6485322898
5675373666
7875555787
Sie müssen dasselbe Array ausgeben und alle Positionen ersetzen, bei denen sich Unterwasser befindet *
.
8888888888
566*****98
6*85***898
5675*7*666
7875555787
Wasser kann diagonal entweichen, so dass in dieser Konfiguration kein See vorhanden ist:
888
838
388
kürzester Code gewinnt. Ihr Code muss Größen bis zu 80 breit und 24 hoch verarbeiten können.
Drei weitere Beispiele:
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
Antworten:
Haskell, 258 Zeichen
Beispiellauf:
Besteht alle Komponententests. Keine willkürlichen Größenbeschränkungen.
m
quelle
Python,
483491 ZeichenIch bin mir ziemlich sicher, dass es einen besseren (und kürzeren) Weg gibt, dies zu tun
quelle
input()
mitsys.stdin.read()
und die nachgestellten entfernen\n
aus meinen Probe - Eingängen.sys.stdin.read()
liest aus einer Datei, oder? Ich bin noch ziemlich neu bei Python.sys.stdin.read()
liest STandard INput bis EOF.input()
Liest und wertet eine Zeile der Standardeingabe aus.Python,
478471 Zeichen(Ohne Kommentare.
452450 Zeichen ohne Importe.)Die Idee hier ist, dass ich einen gerichteten Graphen konstruiere, bei dem jede Gitterzelle einen eigenen Scheitelpunkt hat (plus einen zusätzlichen "Drain" -Scheitelpunkt). Das Diagramm enthält eine Kante von jeder höherwertigen Zelle zu den benachbarten niedrigerwertigen Zellen sowie eine Kante von allen äußeren Zellen zum "Drain" -Vertex. Ich benutze dann Floyd-Warshall, um zu berechnen, welche Vertices mit dem "Drain" -Vertex verbunden sind. Alle nicht verbundenen Scheitelpunkte werden überflutet und mit einem Sternchen gekennzeichnet.
Ich habe nicht viel Erfahrung mit der Verdichtung von Python-Code, daher gibt es wahrscheinlich eine prägnantere Möglichkeit, wie ich diese Methode hätte implementieren können.
quelle
Common Lisp, 833
Es wurde noch kein Versuch unternommen, Golf zu spielen. Ich fand das Problem nur interessant. Eingabe ist das 2D-Array der Karte. Die Lösung überprüft jedes Quadrat, um festzustellen, ob es "entwässert" - ein Quadrat entwässert, wenn es sich an der Außenkante befindet oder an ein Quadrat gleicher oder niedrigerer Höhe angrenzt, das entwässert. Um eine endlose Wiederholung zu vermeiden, speichert der Code eine "Drain-Map" (dm), in der der Drain-Status bereits ermittelter Quadrate gespeichert wird.
quelle
Python, 246 Zeichen
Die Lösung besteht darin, von jeder Position aus eine DFS durchzuführen, um zu bestimmen, ob gefüllt werden soll oder nicht.
Wenn nachfolgende Leerzeichen in jeder Zeile zulässig sind, können Sie diese mit w = 80 kürzen und die Eingabezeilen mit Leerzeichen auf 80 Zeichen auffüllen.
quelle