Wprowadzenie
Niech pole będzie prostokątem wypełnionym tylko znakami -
i [0-9]
. Przykładem pola jest:
11-011123
111-010--
0010---01
111-01234
Widzisz, że to pole zostało podzielone na trzy mniejsze obszary:
Aby obliczyć wynik mniejszego obszaru, po prostu dodajemy wszystkie liczby. Na przykład:
11
111
0010
111
1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 = 9
Całkowity wynik dla tego obszaru to 9 . Robimy teraz to samo dla drugiego obszaru:
011123
010
0 + 1 + 1 + 1 + 2 + 3 + 0 + 1 + 0 = 9
Łączny wynik to także 9 . Teraz musimy zbadać ostatni obszar:
01
01234
0 + 1 + 0 + 1 + 2 + 3 + 4 = 11
Ma to łączny wynik 11 . Najwyższy wynik na boisku to 11, więc tego potrzebujemy.
Zadanie
Biorąc pod uwagę pole (w postaci ciągu 2D, tablicy itp.), Wypisz najwyższy wynik na polu. Możesz założyć, że podane pola zawsze będą zawierać co najmniej 1 cyfrę. To jest golf golfowy , więc wygrywanie z najmniejszą ilością bajtów wygrywa!
Przypadki testowe
Przypadek testowy 1:
Input:
1
Output:
1
Przypadek testowy 2:
Input:
1-1-1-1
-1-1-1-
2-1-1-1
-1-1-1-
Output:
2
Przypadek testowy 3:
Input:
12-45-
4-65-9
87-654
12-487
45----
684764
Output:
69
Przypadek testowy 4:
Input:
111-12
------
21--10
Output:
3
["111", "01234"]
?-
oddzielone obszary? Czy możesz wyjaśnić część „co definiuje obszar”?Odpowiedzi:
MATL ,
545149 bajtówDane wejściowe to tablica znaków 2D w formacie MATL (AB), z
;
separatorem wierszy. Dane wejściowe w przykładzie i przypadkach testowych wynoszą odpowiednio:Wypróbuj online!
Wyjaśnienie
Działa to poprzez zbudowanie macierzy przyległości wykresu zdefiniowanej przez relację „bycie połączonym”. Jako przykład rozważ pole 3 × 4
Wpisy w tablicy 2D można łatwo opisać w MATL, stosując indeksowanie liniowe (główne kolumny). W przypadku 3 × 4 indeks liniowy każdego wpisu podaje się jako
Macierz przylegania jest budowana etapami przy użyciu mnożenia macierzy. W pierwszym etapie rozważani są najbliżsi sąsiedzi. Na przykład punkt o indeksie 3 jest sąsiadem samego siebie i tego o indeksie 2. Nie jest sąsiadem liczby 6, ponieważ punkt ten nie zawiera liczby zgodnej z polem. W tym przykładzie macierzą przyległości relacji „najbliższy sąsiad” jest macierz L 12 × 12 podana jako
(Widać, że kolumna 3 ma wartość
1
w wierszach 2 i 3.) Ta macierz jest zawsze symetryczna, a jej przekątna ma wartość1
dla punktów, które nie zawierają-
.Następnym krokiem byłaby macierz przyległości relacji „połączonej co najwyżej z jednym punktem pomiędzy ”. Aby go uzyskać, wystarczy pomnożyć L i ustawić niezerowe wpisy na
1
. Zasadniczo macierz przylegania relacji „połączonej jakąś ścieżką”, M , jest uzyskiwana przez podniesienie L do wykładnika wykładniczego (w sensie macierzowym), który reprezentuje maksymalną możliwą długość ścieżki. Górna granica maksymalna długość drogi jest liczba niezerowych w pozycji L .Bezpośrednie obliczenie mocy macierzy może spowodować przepełnienie, ponieważ szybko pojawiają się duże liczby. Dlatego lepiej jest stopniowo pomnożyć przez tę samą macierz, konwertując niezerowe wpisy na 1 po każdym kroku, aby zapobiec tworzeniu się dużych liczb.
Kolumna I z M oznacza punkty, które są połączone (dowolnym ścieżką) z punktem ı . Teraz pole poziomu można sprowadzić do wektora kolumny c w kolejności liniowej, gdzie każdy wpis zawiera odpowiednią liczbę lub niezdefiniowaną wartość dla
-
. Więc w tym przypadku byłoby cMutantowanie każdej kolumny M przez element c i obliczanie sumy każdej kolumny daje, dla każdego punktu i , całkowity wynik punktu powierzchni i, do którego należy. Obszar jest definiowany przez wszystkie punkty, które są ze sobą połączone. Zauważ, że wiele kolumn da ten sam wynik; mianowicie kolumny i oraz j dadzą tę samą sumę, jeśli punkty i i j są połączone (należą do tego samego obszaru). Ostateczny wynik to maksimum tych sum.
źródło
JavaScript (ES6), 157 bajtów
Wyjaśnienie
Pobiera pole wejściowe jako ciąg. Dla każdej liczby w polu sumuje wszystkie liczby w obszarze. Odbywa się to poprzez wielokrotne iterowanie każdej liczby w polu, dodając liczbę do wyniku, jeśli sąsiadująca komórka zawiera wcześniej zliczoną liczbę. Liczby, które są częścią obszaru są reprezentowane przez ustawienie ich na 99, aby nie były ponownie liczone. Wysyła najwyższy wynik jako liczbę.
źródło
Pyth, 93 bajty
Wypróbuj online!
Jak to działa
Pierwszy krok: przeczytaj dane wejściowe
Drugi krok: zdefiniuj funkcję do oceny jednego obszaru
Trzeci krok: przeczytaj wszystkie obszary i znajdź wymagane maksimum
źródło