Masz małego robota z czterema czujnikami odległości. Zna układ pokoju, ale nie ma orientacji innej niż możliwość zablokowania orientacji siatki. Chcesz być w stanie dowiedzieć się, gdzie robot opiera się na odczytach, ale może być niejednoznaczny z powodu ograniczonych czujników.
Wyjaśnienie Wyzwania
Otrzymasz układ pokoju i cztery odczyty odległości zgodnie z ruchem wskazówek zegara, podające liczbę komórek między tobą a ścianą. Pośrodku pomieszczenia mogą znajdować się ściany, a krawędzie siatki są również ścianami. Robota nie można postawić na ścianie.
Twoim celem jest wyszczególnienie wszystkich lokalizacji w pomieszczeniu, w których może znajdować się robot, które dałyby podane odczyty. Należy pamiętać, że robot nie ma orientacji (innej niż zablokowanie na siatce pod kątem 90 stopni - tj. Robot nigdy nie będzie zorientowany ukośnie lub pod innym kątem pochylenia), więc odczyt [1, 2, 3, 4], na przykład, jest taki sam jak czytanie [3, 4, 1, 2].
Przykłady
W tych przykładach współrzędne komórki zostaną podane jako pary o indeksie 0 (x, y) od lewej górnej komórki. Odczyty będą podawane w kolejności zgodnej z ruchem wskazówek zegara na liście w nawiasach kwadratowych. Układy będą używać znaków funta dla ścian i innych znaków (zwykle kropek) do reprezentowania pustych komórek.
Przypadek 1
. . . .
. . . .
. . # .
. . . .
- [1, 0, 2, 3] ==> (1, 0), (3, 1)
- [0, 0, 3, 3] ==> (0, 0), (3, 0), (0, 3), (3, 3)
- [2, 1, 1, 0] ==> (0, 2), (2, 1)
- [1, 1, 2, 2] ==> (1, 1)
Przypadek 2
# a . # a .
a # . . # a
. . # . . #
# . . # . .
a # . . # a
. a # . a #
- [0, 0, 1, 1] ==> każda pozycja na siatce, która jest kropką
- [1, 0, 0, 0] ==> wszystkie a na siatce
Przypadek 3
.
- [0, 0, 0, 0] ==> (0, 0)
Przypadek 4
. # #
. . .
- [1, 2, 0, 0] ==> (0, 1)
- [0, 1, 2, 0] ==> (0, 1)
- [0, 0, 1, 0] ==> (0, 0)
- [1, 0, 1, 0] ==> (1, 1)
- [0, 1, 0, 1] ==> (1, 1)
Przypadek 5
. # . .
. . . .
. . # .
. . . .
- [2, 1, 1, 0] ==> (0, 2), (2, 1)
- [0, 2, 2, 1] ==> (1, 1)
- [1, 0, 2, 2] ==> (1, 1)
- [0, 3, 0, 0] ==> (0, 0)
- [1, 0, 1, 1] ==> (1, 2)
Inne zasady
- Dane wejściowe mogą być w dowolnym dogodnym formacie. Dane wejściowe to siatka ścian i przestrzeni oraz lista czterech odległości w kolejności zgodnej z ruchem wskazówek zegara.
- Dane wyjściowe może być albo listą wszystkich komórek, które spełniają odczyt, albo zmodyfikowaną wersją siatki pokazującą, które komórki spełniają odczyt. Dokładny format danych wyjściowych nie ma znaczenia, o ile jest rozsądny i spójny. Prawidłowe formaty wyjściowe obejmują między innymi :
- Drukowanie linii dla każdej współrzędnej komórki jako uporządkowanej pary
- Drukowanie siatki za pomocą
.
,#
i odpowiednio!
dla przestrzeni, ścian i możliwych lokalizacji. - Zwracanie listy zamówionych par
- Zwracanie listy indeksów
- Zwracanie listy list z różnymi wartościami dla przestrzeni, ścian i możliwych lokalizacji
- Zwróć / wydrukuj macierz 0 i 1, używając 1 do reprezentowania komórek, w których wystąpiłby odczyt. (Nie trzeba uwzględniać ścian)
- Ponownie lista ta nie jest wyczerpująca, więc inne reprezentacje są ważne, o ile są spójne i pokazują każdą możliwą prawidłową lokalizację w siatce lub liście. Jeśli nie jesteś pewien, zostaw komentarz, a ja chętnie wyjaśnię.
- Możesz założyć, że odczyt odpowiada co najmniej jednemu miejscu na siatce.
- Możesz założyć, że siatka wejściowa ma rozmiar co najmniej 1x1 i ma co najmniej jedno puste miejsce.
- Możesz założyć, że siatka wejściowa nie jest większa niż 256 komórek w każdym wymiarze.
- Możesz założyć, że siatka wejściowa jest zawsze idealnym prostokątem i nie jest poszarpana.
- Nie ma kary ani premii, jeśli twój program zda rozsądne wyjście za nieprawidłowe dane wejściowe.
- To jest kod golfowy, więc wygrywa najkrótszy kod.
Case 5
nie wydają się całkiem właściwe. I dostać(0,2),(2,1)
,(1,3)
,(1,3)
, inothing
.Odpowiedzi:
JavaScript (ES6),
130 128 126125 bajtówWypróbuj online! (z przetworzonym wyjściem dla czytelności)
Skomentował
źródło
Python 2 ,
234202200191 bajtówWypróbuj online!
źródło
Węgiel drzewny , 42 bajty
Wypróbuj online! Link jest do pełnej wersji kodu. Z jakiegoś powodu wydaje się, że węgiel drzewny dodaje trochę wypełnienia do wydruku; Zakładam, że to błąd w Charcoal. Wyjaśnienie:
Wydrukuj mapę bez poruszania kursorem.
Pętlę nad każdą postacią na mapie.
Jeśli jest to nowa linia, przesuń kursor na początek następnego wiersza.
Znajdź odległość do ściany w kierunku
k+m
.Pętla we wszystkich czterech początkowych kierunkach
k
, zerkanie we wszystkich czterech kierunkach zgodnie z ruchem wskazówek zegaram
, a jeśli wynik zawiera drugie wejście, wydrukuj w!
przeciwnym razie bieżący znak.źródło