Weź obszar 2D podzielony na kwadratowe elementy wyrównane do osi z ich środkami wyrównanymi w odstępach całkowitych. Mówi się, że krawędź jest wewnętrzna, jeśli jest współdzielona przez dwa elementy, w przeciwnym razie jest to krawędź zewnętrzna.
Twoim celem jest znalezienie minimalnej liczby sąsiednich elementów, które należy pokonać, aby osiągnąć zewnętrzną krawędź, zaczynając od środka każdego elementu, znanego jako traversal distance
, lub distance
w skrócie. Możesz przechodzić tylko przez krawędź (tzn. Bez cięcia narożników / ruchu po przekątnej). Uwaga: uważa się, że „elementy zewnętrzne” (elementy, które mają co najmniej jedną krawędź zewnętrzną) muszą przejść przez 0
sąsiednie elementy, aby osiągnąć krawędź zewnętrzną.
Wejście
Dane wejściowe to lista nieujemnych współrzędnych pary całkowitych oznaczających (x, y) środka wszystkich elementów. Zakłada się, że nie ma nakładających się elementów (tj. Para x / y jednoznacznie identyfikuje element). Być może nie nic o kolejności wprowadzania elementem zakładać.
Zachęcamy do przekształcenia źródła danych wejściowych w dowolne miejsce (np. 0,0 lub 1,1 itd.).
Możesz założyć, że wszystkie elementy wejściowe są połączone, lub innymi słowy, możliwe jest przejście z jednego elementu do dowolnego innego elementu przy użyciu powyższych reguł. Zauważ, że nie oznacza to, że region 2D jest po prostu połączony; może mieć w środku dziury.
Przykład: poniżej podano nieprawidłowe dane wejściowe.
0,0
2,0
sprawdzanie błędów nie jest wymagane.
Dane wejściowe mogą pochodzić z dowolnego źródła (plik, stdio, parametr funkcji itp.)
Wynik
Dane wyjściowe powinny być listą współrzędnych identyfikujących każdy element i odpowiednią liczbą całkowitą pokonaną, aby dostać się do krawędzi. Dane wyjściowe mogą być w dowolnej pożądanej kolejności elementów (np. Nie trzeba wyjściowych elementów w tej samej kolejności otrzymanej jako dane wejściowe).
Dane wyjściowe mogą pochodzić z dowolnego źródła (plik, stdio, wartość zwracana przez funkcję itp.)
Każde wyjście, które pasuje do współrzędnej elementu z jego odległością zewnętrzną, jest w porządku, np. Wszystkie są w porządku:
x,y: distance
...
[((x,y), distance), ...]
[(x,y,distance), ...]
Przykłady
Przykładowe dane tekstowe są w formie x,y
, z jednym elementem w wierszu; możesz przekształcić to w wygodny format wejściowy (zobacz zasady dotyczące formatu wejściowego).
Przykładowe wyniki tekstowe są w formacie x,y: distance
, z jednym elementem w wierszu; ponownie, możesz przekształcić to w wygodny format wyjściowy (zobacz reguły formatu wyjściowego).
Liczby graficzne mają lewą dolną granicę jako (0,0), a liczby w środku reprezentują oczekiwaną minimalną odległość przebytą do osiągnięcia krawędzi zewnętrznej. Pamiętaj, że liczby te służą wyłącznie do celów demonstracyjnych; twój program nie musi ich wysyłać.
Przykład 1
Wejście:
1,0
3,0
0,1
1,2
1,1
2,1
4,3
3,1
2,2
2,3
3,2
3,3
Wynik:
1,0: 0
3,0: 0
0,1: 0
1,2: 0
1,1: 1
2,1: 0
4,3: 0
3,1: 0
2,2: 1
2,3: 0
3,2: 0
3,3: 0
Reprezentacja graficzna:
Przykład 2
Wejście:
4,0
1,1
3,1
4,1
5,1
6,1
0,2
1,2
2,2
3,2
4,2
5,2
6,2
7,2
1,3
2,3
3,3
4,3
5,3
6,3
7,3
8,3
2,4
3,4
4,4
5,4
6,4
3,5
4,5
5,5
wynik:
4,0: 0
1,1: 0
3,1: 0
4,1: 1
5,1: 0
6,1: 0
0,2: 0
1,2: 1
2,2: 0
3,2: 1
4,2: 2
5,2: 1
6,2: 1
7,2: 0
1,3: 0
2,3: 1
3,3: 2
4,3: 2
5,3: 2
6,3: 1
7,3: 0
8,3: 0
2,4: 0
3,4: 1
4,4: 1
5,4: 1
6,4: 0
3,5: 0
4,5: 0
5,5: 0
Reprezentacja graficzna:
Przykład 3
Wejście:
4,0
4,1
1,2
3,2
4,2
5,2
6,2
8,2
0,3
1,3
2,3
3,3
4,3
5,3
6,3
7,3
8,3
9,3
1,4
2,4
3,4
4,4
5,4
6,4
7,4
8,4
9,4
2,5
3,5
4,5
5,5
6,5
9,5
10,5
11,5
3,6
4,6
5,6
9,6
10,6
11,6
6,7
7,7
8,7
9,7
10,7
11,7
wynik:
4,0: 0
4,1: 0
1,2: 0
3,2: 0
4,2: 1
5,2: 0
6,2: 0
8,2: 0
0,3: 0
1,3: 1
2,3: 0
3,3: 1
4,3: 2
5,3: 1
6,3: 1
7,3: 0
8,3: 1
9,3: 0
1,4: 0
2,4: 1
3,4: 2
4,4: 2
5,4: 2
6,4: 1
7,4: 0
8,4: 0
9,4: 0
2,5: 0
3,5: 1
4,5: 1
5,5: 1
6,5: 0
9,5: 0
10,5: 0
11,5: 0
3,6: 0
4,6: 0
5,6: 0
9,6: 0
10,6: 1
11,6: 0
6,7: 0
7,7: 0
8,7: 0
9,7: 0
10,7: 0
11,7: 0
Reprezentacja graficzna:
Punktacja
To jest kod golfowy. Najkrótszy kod w bajtach wygrywa. Obowiązują standardowe luki. Dozwolone są wszelkie wbudowane elementy inne niż specjalnie zaprojektowane w celu rozwiązania tego problemu.
Odpowiedzi:
MATLAB / oktawa, 143 bajty
Nie golfił
Wyjaśnienie
Tworzenie S Ource i R matryc esult o odpowiedniej wielkości, wypełnione zerami.
Oblicz indeksy liniowe odpowiadające
xy
parom, z jednym wypełnieniem elementu na granicach.Narysuj strukturę.
S
pokazano tutaj dla przykładu 2 :Usuń wszystkie elementy obramowania poprzez erozję obrazu
za pomocą dysku elementu strukturyzującego o promieniu 1 :
Jeśli dozwolony byłby ruch ukośny, zamiast tego użylibyśmy prostokąta:
Następnie zwiększ wynik dla wszystkich elementów innych niż graniczne
i zapętlaj, aż obraz całkowicie ulegnie erozji.
Zwraca wynik dla każdej
xy
pary.źródło
Pyth, 26 bajtów
Przykład 2
Użyłem formatu wyjściowego:
To znaczy lista zawierająca punkt, a następnie odległość od zewnętrznej strony.
Kod działa przy użyciu aktualnie osiągniętego zestawu, dla każdego punktu filtrując dane wejściowe dla wszystkich punktów dokładnie w odległości 1 od tego punktu i sprawdzając, czy wynikowa liczba punktów jest 4 razy większa niż liczba początkowa, i powtarzając, aż nie będzie . Kiedy zaczyna się w danym punkcie, pokazuje to, jak daleko ten punkt jest od zewnątrz.
źródło
MATL ,
38373633 bajtówUżywa bieżącej wersji (15.0.0) języka / kompilatora.
Format wejściowy to: jedna tablica z wartościami x i jedna tablica z wartościami y . Wejścia i wyjścia są oparte na 1. Tak więc przypadki testowe mają następujące dane wejściowe:
Wypróbuj online!
Wyjaśnienie
Matryca jest początkowo budowana z 1 w pozycjach wejściowych i 0 w przeciwnym razie. Następnie stosuje się splot z maską „Północ, Wschód, Południe, Zachód” (
[0 1 0; 1 0 1; 0 1 0]
), a wynik dla każdej pozycji porównuje się z 4. Wynik 4 oznacza, że pozycja ta jest otoczona innymi punktami, a zatem ma odległość na zewnątrz co najmniej 1. Wynik (0 lub 1 dla każdego punktu) jest dodawany do oryginalnej macierzy. Pozycje te zawierają teraz 2 (pod koniec procesu macierz zostanie zmniejszona o 1).Proces splotu jest iterowany. Dla następnej iteracji wejściem splotu jest skumulowana macierz progowa z 2; to znaczy wartości mniejsze niż 2 są ustawione na 0. Wynik splotu wskazuje, które punkty mają odległość co najmniej 2 (wszyscy ich sąsiedzi mają odległość 1).
Dla wygody wybiera się liczbę iteracji jako liczbę kolumn macierzy wejściowej. Jest to wystarczające (w rzeczywistości maksymalna wymagana liczba iteracji to połowa minimalnego wymiaru macierzy). Ostatnie iteracje mogą być bezużyteczne, ale nie wyrządzają szkody (po prostu dodają 0 do wszystkich punktów).
Pod koniec procesu 1 jest odejmowane od wyniku, ponieważ pozycje o wartości k mają odległość k -1 od zewnątrz. Współrzędne i wartości wszystkich pozycji zostaną wyodrębnione i wyświetlone.
źródło
Python 3,
180166160 bajtówWiemy, że jeśli współrzędna ma mniej niż czterech sąsiadów, musi znajdować się „na zewnątrz”. Dlatego możemy wielokrotnie usuwać zewnętrzne komórki i przypisywać im odległość równą liczbie iteracji / głębokości rekurencji w tym przypadku.
Zdecydowanie sądzę, że jest miejsce na ulepszenia - Jaki jest najlepszy sposób sprawdzenia sąsiadujących sąsiadów?
edytuj: Powinienem mieć możliwość zaakceptowania listy par jako krotek.
źródło
PHP, 316 bajtów
Wersja online
Awaria
Wizualizuj jako znaki Ascii
źródło