Dies ist die erste in einer Reihe von Island Golf Herausforderungen. Nächste Herausforderung
Wenn Sie eine Insel in ASCII-Kunst haben, geben Sie einen optimalen Pfad aus, um sie zu umrunden.
Eingang
Ihre Eingabe ist ein rechteckiges Raster aus zwei Zeichen, die Land und Wasser darstellen. In den folgenden Beispielen ist Land #
und Wasser .
, Sie können jedoch zwei beliebige Zeichen ersetzen.
...........
...##......
..#####....
..#######..
.#########.
...#######.
...#####.#.
....####...
...........
Es wird immer mindestens ein Landplättchen geben. Die Landplättchen werden alle zusammenhängend sein (dh es gibt nur eine Insel). Die Wasserplättchen werden auch zusammenhängend sein (dh es gibt keine Seen). Der äußere Rand des Gitters besteht aus Wasserplättchen. Landplättchen werden nicht diagonal verbunden, dh Sie werden niemals so etwas sehen
....
.#..
..#.
....
Ausgabe
Ihr Code muss dasselbe Raster mit einer kürzesten Umrundung ausgeben . In den folgenden Beispielen wird der Umrundungspfad mit gezeichnet o
, Sie können jedoch jedes Zeichen ersetzen, sofern es sich von Ihren Land- und Wasserzeichen unterscheidet.
Eine Weltumsegelung ist eine einfache geschlossene Kurve, die vollständig auf Wasserplättchen gezeichnet ist und alle Landplättchen auf dem Gitter vollständig umgibt. Diagonale Verbindungen sind zulässig. Dies ist zum Beispiel eine Umrundung der obigen Insel (aber keine kürzeste):
.ooooo.....
o..##.oo...
o.#####.o..
o.#######o.
o#########o
ooo#######o
..o#####.#o
..oo####..o
....oooooo.
Die Länge einer Umrundung wird wie folgt berechnet: Addieren Sie für jedes Paar benachbarter Kacheln auf dem Pfad, wenn diese horizontal oder vertikal verbunden sind, 1; Wenn sie diagonal verbunden sind, fügen Sie √2 hinzu. Die Länge des obigen Pfades beträgt 22 + 7√2 (≈ 31.9).
Eine kürzeste Weltumsegelung ist eine Weltumsegelung mit möglichst kurzer Länge. Ihr Programm sollte einen Pfad ausgeben, der diese Bedingung erfüllt. Für die meisten Inseln gibt es mehrere mögliche Lösungen. Hier ist eine Lösung für die obige Insel mit einer Länge von 10 + 13√2 (≈ 28.4):
...oo......
..o##oo....
.o#####oo..
.o#######o.
o#########o
.o.#######o
..o#####.#o
...o####.o.
....ooooo..
Einzelheiten
Ihre Lösung kann ein vollständiges Programm oder eine Funktion sein . Alle Standardeingabe- und -ausgabemethoden sind zulässig.
Ihre Eingabe und Ausgabe kann eine mehrzeilige Zeichenfolge oder eine Liste von Zeichenfolgen sein. Wenn Ihre Sprache einen Zeichentyp hat, der sich von Einzelzeichenfolgen unterscheidet, können Sie "Zeichenfolge" im vorherigen Satz durch "Zeichenliste" ersetzen. Wenn Ihre Sprache die Höhe und / oder Breite des Rasters eingeben muss, können Sie dies tun. Ihre Ausgabe kann (optional) eine einzelne nachgestellte Zeile enthalten. Wie oben erwähnt, können Sie drei verschiedene Zeichen anstelle von verwenden #.o
(bitte geben Sie in Ihrer Übermittlung an, welche Zeichen Sie verwenden).
Testfälle
A. Inseln mit einzigartigen kürzesten Umrundungen:
...
.#.
...
.o.
o#o
.o.
......
.####.
......
.oooo.
o####o
.oooo.
......
......
..##..
...#..
......
......
......
..oo..
.o##o.
..o#o.
...o..
......
.......
.#####.
...#...
...#...
.#####.
.......
.ooooo.
o#####o
o..#..o
o..#..o
o#####o
.ooooo.
.......
...#...
...#...
.#####.
...#...
...#...
.......
...o...
..o#o..
.o.#.o.
o#####o
.o.#.o.
..o#o..
...o...
.......
.#####.
.##..#.
..#..#.
.......
.ooooo.
o#####o
o##..#o
.o#..#o
..oooo.
B. Beispiel einer Insel mit mehreren möglichen Lösungen:
........
....##..
...####.
..###...
.#####..
.#####..
..##....
........
Mögliche Ausgaben:
....oo..
...o##o.
..o####o
.o###.o.
o#####o.
o#####o.
.o##oo..
..oo....
....oo..
...o##o.
..o####o
.o###.o.
o#####o.
o#####o.
.o##.o..
..ooo...
....oo..
...o##o.
..o####o
.o###..o
o#####.o
o#####o.
.o##oo..
..oo....
....oo..
...o##o.
..o####o
.o###..o
o#####.o
o#####o.
.o##.o..
..ooo...
Das ist Code-Golf : Der kürzeste Code in jeder Sprache gewinnt.