Jest to drugi z serii wyzwań Island Golf. Poprzednie wyzwanie
Dwóch pustelników przybyło na bezludną wyspę. Odkąd przybyli szukając samotności, chcą żyć jak najdalej od siebie. Gdzie powinni budować swoje chaty, aby zmaksymalizować odległość między nimi?
Wejście
Twój wkład będzie w prostokątną siatkę składającą się z dwóch znaków reprezentujących ląd i wodę. W poniższych przykładach ziemia jest #
i woda jest .
, ale możesz zastąpić dowolne dwa różne znaki, które chcesz.
...........
...##......
..#####....
..#######..
.#########.
...#######.
...#####.#.
....####...
...........
Zawsze będą co najmniej dwie płytki lądu. Wszystkie kafelki ziemi będą sąsiadować (tzn. Jest tylko jedna wyspa). Płytki wodne również będą przylegające (tj. Nie będzie żadnych jezior). Zewnętrzna krawędź siatki będzie stanowić płytki wodne. Kafelki lądowe nie zostaną połączone po przekątnej: tzn. Nigdy nie zobaczysz czegoś takiego
....
.#..
..#.
....
Wynik
Twój kod musi wyświetlać tę samą siatkę z zaznaczonymi dwoma lokalizacjami chaty . W poniższych przykładach lokalizacje chat są oznaczone X, ale możesz zastąpić dowolną postać, o ile różni się ona od twoich postaci lądowych i wodnych.
Lokalizacje chat muszą składać się z dwóch pól ziemi, wybranych tak, aby zmaksymalizować odległość między nimi. Definiujemy odległość marszu jako długość najkrótszej ścieżki, całkowicie na lądzie, między dwoma punktami. Płytki lądowe uważa się za sąsiadujące poziomo lub pionowo, ale nie po przekątnej.
Możliwe rozwiązanie dla powyższej wyspy:
...........
...X#......
..#####....
..#######..
.#########.
...#######.
...#####.X.
....####...
...........
Odległość między tymi dwoma punktami wynosi 11, co jest największą odległością między dowolnymi dwoma punktami na tej wyspie. Istnieje inne rozwiązanie odległości 11:
...........
...##......
..X####....
..#######..
.#########.
...#######.
...#####.X.
....####...
...........
Detale
Twoje rozwiązanie może być pełnym programem lub funkcją . Każda z domyślnych metod wejścia i wyjścia jest akceptowalna.
Dane wejściowe i wyjściowe mogą być ciągiem wielowierszowym, listą ciągów lub tablicą 2D / zagnieżdżoną listą znaków / ciągami jednoznakowymi. Twój wynik może (opcjonalnie) mieć jeden końcowy znak nowej linii. Jak wspomniano powyżej, możesz użyć dowolnych trzech różnych znaków zamiast #.X
(w zgłoszeniu określ, których znaków używasz).
Przypadki testowe
A. Wyspy z wyjątkowymi miejscami w chatach:
....
.##.
....
....
.XX.
....
......
......
..##..
...#..
......
......
......
......
..X#..
...X..
......
......
........
.#####..
.##..##.
.#..###.
.##..##.
........
........
.#####..
.##..##.
.#..###.
.#X..#X.
........
.........
.#####.#.
.#...#.#.
.#.###.#.
.#.....#.
.#######.
.........
.........
.#####.X.
.#...#.#.
.#.X##.#.
.#.....#.
.#######.
.........
B. Przykład wyspy z wieloma możliwymi rozwiązaniami:
........
....##..
...####.
..###...
.#####..
.#####..
..##....
........
Możliwe wyniki:
........
....#X..
...####.
..###...
.#####..
.X####..
..##....
........
........
....#X..
...####.
..###...
.#####..
.#####..
..X#....
........
........
....##..
...###X.
..###...
.#####..
.X####..
..##....
........
........
....##..
...###X.
..###...
.#####..
.#####..
..X#....
........
C. Duży przypadek testowy jako Gist
To jest golf-golf : wygrywa najkrótszy kod w każdym języku.
Odpowiedzi:
Python 3,
249246 bajtówOgolono 3 bajty, dzięki DLosc.
Dane wejściowe i wyjściowe są pojedynczymi ciągami, gdzie „.”, „@” I „X” oznaczają odpowiednio wodę, chaty i ziemię.
Poprzednia wersja:
Dane wejściowe to pojedynczy ciąg znaków z „.” i „#” reprezentujące odpowiednio wodę i ziemię. „X” oznacza chaty na wyjściu.
Wyjaśnienie:
Zasadniczo wykonuje szerokie pierwsze wyszukiwanie z każdego możliwego punktu początkowego w tym samym czasie. Prowadź słownik d długości ścieżek wpisanych na początku i na końcu ścieżki, np. D [(k, i)] to odległość od k do i. Następnie iteruj po klawiszach w słowniku d i utwórz nowy słownik, u, ze ścieżkami dłuższymi o 1 jednostkę, przesuwając jednostkę punktu końcowego 1 do N, S, E, W, np. U [(k, i + 1)] = d [(k, i)] + 1. Nie dołączaj ścieżek, które są już w d. Jeśli u nie jest puste, dodaj nowe dłuższe ścieżki do d i powtórz. Kiedy u jest pusty, oznacza to, że nie można już utworzyć ścieżek. Teraz d zawiera wszystkie możliwe ścieżki i ich długości. Więc to tylko kwestia zdobycia klucza najdłuższą ścieżką.
Wersja mniej golfowa, komentowana:
źródło
C #, 387 bajtów
Zacznijmy...
Wypróbuj online
Kompletny program, odczytuje ze STDIN, pisze do STDOUT. Po prostu przechodzi przez każdą komórkę i uruchamia BFS, aby obliczyć najdalszą komórkę, rejestrując oba, jeśli jest ona najdalej zapisana. Naprawdę nic, a frustrująco mało mogę znaleźć w golfa.
Sformatowany i skomentowany kod:
źródło