Hashiwokakero (auf Japanisch "Brücken bauen") ist ein Rätsel, bei dem Sie eine Gruppe von Inseln mit Brücken verbinden müssen. Die Regeln sind:
- Brücken müssen entweder vertikal oder horizontal zwischen zwei Inseln verlaufen.
- Brücken dürfen sich nicht kreuzen.
- Ein Inselpaar darf höchstens durch zwei parallele Brücken verbunden sein.
- Jede Insel ist mit einer Nummer zwischen 1 und einschließlich 8 gekennzeichnet. Die Anzahl der mit einer Insel verbundenen Brücken muss mit der Anzahl auf dieser Insel übereinstimmen.
- Die Brücken müssen die Inseln zu einer einzigen verbundenen Gruppe verbinden.
Ihre Aufgabe ist es, ein Programm zu schreiben, das Hashiwokakero-Rätsel löst.
Sie können davon ausgehen, dass ein bestimmtes Rätsel lösbar ist und es nur eine Lösung gibt.
Das Programm sollte einigermaßen effizient sein. Zum Beispiel sollte das Lösen des folgenden 25x25-Puzzles auf einem durchschnittlichen PC nicht länger als 10 Minuten dauern, und es sollte nicht mehr als ein Gigabyte Speicher beanspruchen. Das Lösen kleinerer Rätsel wie des 7x7 sollte Sekunden dauern.
Eingang:
Das Rätsel wird als 2D-Karte mit Zeichen angegeben, wobei die Ziffern 1für 8Inseln und die Felder für Wasser stehen. Die Zeilen werden bei Bedarf mit Leerzeichen aufgefüllt, damit sie alle die gleiche Länge haben.
Inseln werden immer horizontal und vertikal durch mindestens ein Quadrat Wasser getrennt, sodass Platz für die mögliche Brücke zwischen ihnen vorhanden ist. Es werden immer mindestens zwei Inseln in einem Puzzle sein.
Ihr Programm sollte die Puzzle-Map vorzugsweise von der Standardeingabe lesen. Sie können jedoch eine alternative Eingabemethode angeben, wenn Ihre Programmiersprache dies erfordert.
Ausgabe:
Die Ausgabe sollte der Eingabe entsprechen, außer dass Leerzeichen bei Bedarf durch Brücken ersetzt werden. Die Brücken sollten mit den Unicode-Zeichen ─(U + 2500), │(U + 2502), ═(U + 2550) und ║(U + 2551) gezeichnet werden , um horizontale und vertikale Einzel- und Doppelbrücken darzustellen.
Wenn Unicode - Zeichen ein Problem sind, können Sie die ASCII - Zeichen verwenden -, |, =und Hstattdessen.
Gewinnkriterien:
Das ist Code Golf. Die kürzeste richtige und einigermaßen effiziente Lösung gewinnt.
Beispiele:
Puzzle (7x7):
2 2 1
1 4 3
3 2
4
3 2 3
1
3 4 2
Lösung:
2─2──1
│1──4─3
3──2║ ║
│ │4 ║
│3─2║ 3
1║ ║ │
3──4─2
Puzzle (25 x 25):
2 2 2 2 1 1 2 2 2 2 2
1 3 5 4 4 2
2 2 4 5 5 4 2 2 1 3
2 1 1 3 3 2 2
3 4 4 4 4 5 4 3 2 3
2 4 5 4 2 3
2 1 4 2 4 3 1 1 2
2 1 3 1 1 6 4 2
3 2 4 3 6 3 2
2 2 3 3 2 5 2 4 3
2 1 1 2
1 3 3 3 3 5 8 7 6 5 4
2 3 1 1 2
1 1 5 1 4 5 6 3 1 2
1 1 2 2 3 4
3 5 4 4 3 3 8 7 5 1 2
2 3 1 2 2 1 1
2 2 2 2 5 7 6 3 3
3 3 6 3 5 3 2 2 2 3
2 1 2 3 2 2
3 4 6 4 5 5 3 3 5 1
2 1 2 2 1 1 3
2 1 1 2 3 6 5 2 2
2 3 4 4 4 2 1
2 2 2 2 2 2 2 1 1 3 2
Lösung:
2─2─2──2 1 1─2─2──2──2─2
│ │ │1─3═5══4══4─2│
2 2─4─5══5═4═2│2──1 │ │3
│ 2│ ║1│ 1─3═3─2│ │ 2║
│ ║3═4│4══4─4═5─4─3──2 │3
2 4═5─4│ │ │ ║ │ │2───3│
│2─1║ ║4─2│ 4─3 │ 1│ 1 │2
2│1─3 ║║ │1 ║1──6══4 │ 2│
│3─2──4║ 3══6─3 ║ │ │ │2
2│2═3 │3──2 │ ║ 5─2│ 4─3│
│2─1│ │ │ │ ║ ║ │1 ║ │2
│ 1─3─3─3─3─5═8═7═6──5═4│
2──3───1│1─2│ ║ │ ║ ││
1 │ 1──5─1││ 4─5─6─3─1│2
1│ │1──2║ │2 │ ║ ║ │3═4│
│3─5═4 │4──3│ 3═8═7═5│1│2
2│ │ ║ 3│ 1│2──2║ │ ║1│1│
│2 │ ║ ║2 │2──2│5═7═6─3─3
3│ 3─6─3│ 5═3 │2│ ║2│2─3│
║2 │ ║ │ ║ │ 1│2─3║2│ ║2
3│ 4═6──4─5─5──3─3─5││1║│
│2 │ │1 │ │2║2──1│ ║1││3│
2│ │ 1│ │ 1║2│3══6═5─2││2
│2─3──4═4──4─2│ │ │1│
2─2──2─2──2─2─2 1 1─3─2
1 1Eingaben Gedanken machen ?
1 1, welches ein gültiges Puzzle ist und korrekt gehandhabt werden sollte.