Opis wyzwania
W metodzie taksówek odległość między dwoma punktami jest zdefiniowana jako:
Rozważ macierz zawierającą tylko zera i jedynki:
0 0 0 1 0
1 0 0 0 0
0 0 0 0 0
1 0 0 1 0
1 0 0 0 0
Odwzorujmy każdą 1
odległość na najbliższą inną 1
w macierzy (oczywiście przy założeniu, że odległość między dwoma sąsiadującymi rzędami / kolumnami wynosi 1):
0 0 0 3 0
2 0 0 0 0
0 0 0 0 0
1 0 0 3 0
1 0 0 0 0
W przypadku tego wyzwania, biorąc pod uwagę macierz, znajdź jej mapę odległości, jak pokazano powyżej.
Przykłady
0 0 1
0 0 0
0 0 0
0 1 0
0 0 0
0 0 4
0 0 0
0 0 0
0 4 0
0 0 0
-----
0 0 0 0 0 0 1
0 1 0 1 0 0 0
1 1 0 0 0 0 1
0 0 1 0 0 0 0
0 0 0 0 0 1 0
0 1 0 0 0 0 0
1 0 0 0 0 0 0
0 0 0 1 0 0 1
0 0 0 0 0 0 2
0 1 0 2 0 0 0
1 1 0 0 0 0 2
0 0 2 0 0 0 0
0 0 0 0 0 3 0
0 2 0 0 0 0 0
2 0 0 0 0 0 0
0 0 0 3 0 0 3
-----
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
-----
1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1
22 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 22
-----
0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 9 0 0 0 0 0 0 0 0 2 0 0 0 4
0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0
-----
1 1
1 1
Notatki
- Możesz przyjmować dane wejściowe w dowolnym rozsądnym formacie
- Oprócz
0
i1
możesz wybrać dowolne dwie różne wartości - Możesz założyć, że matryca nie jest pusta (zawiera co najmniej jeden wiersz o długości większej lub równej 1), a także że jest prostokątna
- Możesz również założyć, że w matrycy występują co najmniej dwie prawdziwe wartości (w przeciwnym razie dane wyjściowe nie są zdefiniowane)
- Możesz napisać pełny program lub funkcję
- Zamiast zwracać nową macierz, możesz zmodyfikować istniejącą
- To jest golf golfowy , więc spraw , aby twój bajt był jak najmniejszy!
code-golf
matrix
binary-matrix
shooqie
źródło
źródło
Odpowiedzi:
MATL ,
2322 bajtówWypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
Aby zobaczyć wyniki pośrednie, pomocne może być wstawienie
X#
(wyświetlenie stosu) między dowolnymi dwoma statystykami.źródło
t
M
Taxi , 14652 bajtów
Wypróbuj online!
Zakładam, że żaden człowiek nie chce czytać tego kodu, więc wypróbuj go z komentarzami, znaczącymi etykietami i bardziej czytelnymi danymi wyjściowymi!
Dane wejściowe: ciąg znaków reprezentujący tablicę. Łańcuch musi składać się z 3 znaków:
0
,|
reprezentujących przerwy wierszy, a wszelkie pozytywne cyfra większa niż jeden (PDGTO). Lubię korzystać8
. OP umożliwia wprowadzanie danych w dowolnym rozsądnym formacie i uważam, że to się kwalifikuje. Ciąg nie musi być formatowany do tablicy prostokątnej, ale zakłada się, że jest wyrównany do lewej, cokolwiek to jest.Dane wyjściowe: tablica wartości pokazująca minimalną odległość od taksówki
PDGTO
do jednej lub drugiejPDGTO
.Przykład:
Drugi format wyjściowy jest wyraźnie łatwiejszy do odczytania, ale dodaje również 7 bajtów do programu, w końcu jest to golf golfowy . Byłoby możliwe, aby wrócić na końcu i usunąć wszystkie zera końcowe zamiast po prostu uzupełniać
0
wartości, ale to dodałoby jeszcze więcej bajtów i został uznany za niedopuszczalny koszt.Oto tekst kodu bez golfa z komentarzami, lepszymi etykietami i wyraźniejszymi
danymi wyjściowymi: (Tak samo jak w przypadku powyższego linku).
źródło
Python 3 + numpy , 102 bajty
Wypróbuj online!
Pobiera dane wejściowe jako
numpy
tablicę.Python 3 , 127 bajtów
Wypróbuj online!
źródło
Perl 5 , 197 bajtów
Wypróbuj online!
źródło
$#
, w zasadzie ...JavaScript (ES6), 97 bajtów
Pobiera dane wejściowe w składni curry
(w)(a)
, gdzie w to szerokość matrycy, a a to płaska tablica zer i jedynek. Zwraca inną płaską tablicę.Przypadki testowe
Ten fragment zawiera funkcję pomocniczą do formatowania danych wyjściowych w celu zapewnienia ich czytelności.
Pokaż fragment kodu
źródło
Oktawa, 59 bajtów
Pobiera dane wejściowe jako tablicę 2D.
Wypróbuj online!
Wyjaśnienie:
Dla każdej lokalizacji 1s znalezionych w tablicy ustaw ją na zero i oblicz transformację odległości bloku miasta tablicy, a na końcu ustaw lokalizację na obliczoną odległość.
źródło
Python 3 z Numpy ,
106101 bajtów5 bajtów mniej dzięki @notjagan
Funkcja, która wprowadza tablicę Numpy i wyprowadza ją, modyfikując tę tablicę (co jest domyślnie dozwolone ).
Wypróbuj online!
źródło
Galaretka , 27 bajtów
Wypróbuj online!
źródło