Einführung
Erfahrene Code-Golfer haben uns auf die Flut des Jüngsten Gerichts vorbereitet . Risikogebiete wurden evakuiert und die Bevölkerung in die Höhe getrieben.
Wir haben die Flut unterschätzt (oder es gab einen Fehler im Code von @ user12345). Einige hochgelegene Gebiete nähern sich rasch dem Meeresspiegel. Um das Überleben der nun dicht besiedelten Lager zu sichern, müssen Mauern errichtet werden. Leider verfügt die Regierung nur über ein begrenztes Angebot an Mauern.
Problem
Unser Schreckensszenario wird durch zwei Zahlen in einer Zeile beschrieben, nund m. Auf diese Zeile folgen nZeilen mit mWerten pro Zeile, die nur durch ein Leerzeichen voneinander getrennt sind. Jeder Wert besteht aus vier Zeichen.
xUnpassierbar. Wasser kann hier nicht fließen. Wände können hier nicht errichtet werden.-Instabil. Hierdurch kann Wasser fließen. Wände können hier nicht errichtet werden..Stabil. Hier kann Wasser durchströmen. Hier können Wände errichtet werden.oLager. Hier kann Wasser durchströmen. Wenn doch, stirbt jeder. Wände können hier nicht gebaut werden.
Wasser fließt von allen Rändern der Karte, es sei denn, die Kante ist unpassierbar oder die Kachel ist mit einer Wand versehen. Schreiben Sie ein Programm, das die Mindestanzahl von Wänden ausgibt, die zum Schutz eines Lagers erforderlich sind.
Beispiel Eingabe
6 7
x . . x x x x
x . . x - - x
x . x x - - x
x . o o o - .
x . o o o - .
x x x x x x x
Beispielausgabe
3
Annahmen
- Wasser fließt nur orthogonal
- Lager existieren nur als ein orthonal zusammenhängender Block pro Szenario
- Es wird immer eine Lösung geben (obwohl dafür möglicherweise viele Wände erforderlich sind)
- Lager können nicht an einer Kante lokalisiert werden, da das Szenario dann keine Lösung hätte
- 2
n<<16 - 2
m<<16 - Die Eingabe kann von stdin bereitgestellt, aus "city.txt" gelesen oder als einzelnes Argument akzeptiert werden
Kürzester Code gewinnt!