Ważna edycja: Wcześniej w Przykładzie 1 była niepoprawna wartość. Zostało to naprawione.
Otrzymujesz dwuwymiarową tablicę, w której każda komórka zawiera jedną z czterech wartości.
Przykłady:
1 2 2 2 2 1 @ . . X X V
1 3 1 4 1 4 e . @ I C V
2 3 1 3 4 2 H H @ X I V
1 4 4 2 1 3 V C C
2 2 2 3 2 3 X X X
Cztery wartości reprezentują strzałki kierunkowe (w górę, w dół, w lewo i w prawo), chociaż nie wiadomo, która wartość reprezentuje kierunek.
Strzałki kierunkowe tworzą nieprzerwaną ścieżkę, która obejmuje każdą komórkę w tablicy, chociaż nie wiadomo, gdzie znajdują się punkty początkowe lub końcowe.
Napisz kod, który określa, w którym kierunku każda z czterech wartości reprezentuje i gdzie znajdują się punkty początkowy i końcowy.
Dopuszczalna wartość zwracana dla tablicy zawierającej wartości A, B, C i D może wyglądać następująco:
{ up: A, down: C, left: D, right: B, start: [2, 0], end: [4, 2] }
Ponieważ możesz przejść ścieżkę w obie strony (od początku do końca i od końca do początku), zawsze będzie więcej niż jedno poprawne rozwiązanie, a może być ich więcej niż dwa. Załóżmy, że otrzymywane dane wejściowe (jak w powyższych przykładach) zawsze mają co najmniej jedno poprawne rozwiązanie. W przypadkach, w których istnieje więcej niż jedno prawidłowe rozwiązanie, wystarczy zwrócić tylko jedno prawidłowe rozwiązanie.
Najkrótszy kod wygrywa. Wybiorę zwycięzcę po 7 dniach lub 24 godzinach bez nowego zgłoszenia, w zależności od tego, co nastąpi wcześniej.
Dołączam rozwiązania do powyższych przykładów, ale zachęcam do sprawdzenia ich dopiero po napisaniu kodu:
Jeden:
{góra: 3, dół: 1, lewo: 4, prawo: 2, początek: [0,0], koniec: [2,5]}
Dwa:
{w górę: „@”, w dół: „e”, w lewo: „.”, w prawo: „H”, początek: [1,1], koniec: [0,0]}
Trzy:
{w górę: „I”, w dół: „V”, w lewo: „C”, w prawo: „X”, początek: [0,2], koniec: [4,2]}
Odpowiedzi:
DO#
EDYCJA: Naprawiono podział i formatowanie. I dodał klasę pomocnika.
To jest kod w golfa, 807 znaków
Wyniki dla trzech przypadków testowych:
Oto surowy kod bez „golfa”, prawie 4000 znaków:
Oto wyniki dla trzech przykładów:
źródło
Mathematica 278
Dodano spacje dla „przejrzystości”
Sesja i wyniki:
Który jest początkowym wierzchołkiem, końcowym wierzchołkiem i regułami przejścia związanymi z każdym symbolem.
Oto kod uzupełniający, który pokazuje zorientowany wykres:
źródło
Matematyka (151)
Zwraca punkt początkowy, punkt końcowy i reguły przejścia. Pierwszy indeks to wiersz, drugi to kolumna
Pamiętaj, że mój kod działa nawet z
{-1,0,1}~Tuples~{4,2}
. Do przyspieszenia możesz użyćPermutations@{{1, 0}, {0, 1}, {-1, 0}, {0, -1}}
zamiast tego.źródło
APL (207)
Nie mogłem być krótszy niż Mathematica, ponieważ nie mogłem rozumować w kategoriach TopologicalSort i tym podobnych. Mądrzejsi ludzie mogą go ściśnąć dalej.
Gra w golfa:
Nie golfowany:
Przykłady:
(Wskaźniki zaczynają się od 1)
źródło