Wyzwanie
Biorąc pod uwagę prostokątną siatkę znaków
ABCDE FGHIJ KLMNO PQRST
oraz siatkę o takich samych wymiarach kropek i spacji
. . . . . . . . . . .
Wyjmij ciąg, który jest generowany przez podążanie kropkami przez siatkę, zaczynając od lewego górnego rogu. Ten przykład przyniesieABGLQRSNIJE
Notatki
- Siatki wejściowe można traktować jako tablice 2D lub najbliższą alternatywę w swoim języku zamiast ciągu wielowierszowego.
- Zamiast spacji możesz użyć wartości NULL swojego języka. Ale musisz użyć kropek, aby zaznaczyć ścieżkę.
- Nie musisz oddzielać kropek na tej samej linii spacjami. Właśnie dodałem je dla czytelności.
- Najmniejsza możliwa kratka ma rozmiar 1x1.
- Kropka początkowa i końcowa będzie miała tylko jednego sąsiada. Kropki między nimi zawsze będą miały dokładnie dwóch pionowych lub poziomych sąsiadów. To gwarantuje, że ścieżka jest jednoznaczna.
- Ścieżka nie będzie przekątna.
- Znaki w siatce będą wszystkimi dużymi lub małymi znakami z zakresu,
[a-z]
co jest dla ciebie najwygodniejsze. - Ścieżka zawsze zaczyna się w lewym górnym rogu.
Zasady
- Dozwolona funkcja lub pełny program.
- Domyślne reguły wejścia / wyjścia.
- Obowiązują standardowe luki .
- To jest golf golfowy , więc wygrywa najmniej bajtów. Tiebreaker to wcześniejsze zgłoszenie.
Przypadki testowe
Siatka nr 1
ABCABCW DEFGHUQ XLUSDQZ ASUKWXI WUKOAIM AIAIOUP
. . . . . . . . . . . . => ABEFGSKUSAWA
. . . . . . . . . . . . . . . . . . . . . . . . . => ABCABCWQZIMPUOIAIAWAXLUUK
Siatka nr 2
Zwróć uwagę na potrójne spacje w drugiej linii pierwszego i drugiego przykładu.
AB Płyta CD
. => A
. . => AB
. . . => ACD
Siatka nr 3
ZA
. => A
Happy Coding!
ABCABCUQXIUOIAIAWAXLUUK
.Odpowiedzi:
APL, 63 bajty
Jest to funkcja, która pobiera dwie macierze znaków (muszą to być macierze), siatka znaków jako argument lewy, a siatka kropek jako argument prawy. Macierz kropek może być mniejsza niż matryca znaków.
Wyjaśnienie:
(,⍵='.')/,⍳⍴⍵
: uzyskaj pozycje kropek w kolejności wiersz-kolumna1↓
: upuść pierwszy (wiadomo, że jest w1 1
)(⊂1 1){
...}
: zaczynając od1 1
, uruchom następującą funkcję, która podąża ścieżką (jej lewy argument to jego bieżąca pozycja, prawy argument to niewidoczne pozycje). Działa, wybierając za każdym razem najbliższą niewidzianą kropkę. (Jeśli założenia z pytania się utrzymują, jest to poprawne.)×≢⍵:
: jeśli nadal są niezamówione pozycje:+/¨2*⍨⍺-⍵
: znajdź odległość Manhattan między każdą pozycją a bieżącą pozycjąV←(+=⌊/)
: dla każdej pozycji sprawdź, czy odległość jest równa najmniejszej odległości, i zapisz jąV
.⍵/⍨~
: wybierz wszystkie pozycje, dla których tak nie jest, oto pola do odwiedzenia w następnej kolejności(V/⍵)
: znajdź pozycję, dla której ma to miejsce, będzie to następne pole∇
: uruchom ponownie funkcję z tymi nowymi argumentami⍺,
: wynikiem jest bieżąca pozycja, a następnie wynik tej operacji dla reszty listy⋄⍺
: w przeciwnym razie po prostu zwróć bieżącą pozycję i zatrzymaj (jest to ostatnia)⍺[
...]
: dla każdej pozycji wybierz odpowiedni element w siatce znaków.Przypadki testowe:
źródło
JavaScript (ES6), 122 bajty
Wyjaśnienie
Pobiera siatki jako ciągi wielowierszowe.
Wygląda na przyzwoitą próbę, ale zabrakło mi czasu podczas gry w golfa, więc prawdopodobnie można to poprawić.
źródło
APL (Dyalog Classic) , 43 bajty
Wypróbuj online!
źródło