Jednowymiarowy wersja tego problemu było dość łatwe, więc oto wersja trudniej 2D.
Otrzymujesz tablicę 2D wysokości ziemi na standardowym wejściu i musisz dowiedzieć się, gdzie utworzą się jeziora, gdy pada deszcz. Mapa wysokości jest po prostu prostokątnym układem cyfr od 0 do 9 włącznie.
8888888888
5664303498
6485322898
5675373666
7875555787
Musisz wypisać tę samą tablicę, zastępując wszystkie lokalizacje, które byłyby pod wodą *
.
8888888888
566*****98
6*85***898
5675*7*666
7875555787
Woda może uciekać po przekątnej, więc w tej konfiguracji nie byłoby jeziora:
888
838
388
najkrótszy kod wygrywa. Twój kod musi obsługiwać rozmiary do 80 szerokości i 24 wysokości.
Trzy kolejne przykłady:
77777 77777
75657 7*6*7
75757 => 7*7*7
77677 77677
77477 77477
599999 599999
933339 9****9
936639 => 9*66*9
935539 9*55*9
932109 9****9
999999 999999
88888888 88888888
84482288 8**8**88
84452233 => 8**5**33
84482288 8**8**88
88888888 88888888
Odpowiedzi:
Haskell, 258 znaków
Przykładowy przebieg:
Przechodzi wszystkie testy jednostkowe. Brak dowolnych ograniczeń wielkości.
m
źródło
Python,
483491 znakówJestem prawie pewien, że istnieje lepszy (i krótszy) sposób na zrobienie tego
źródło
input()
zsys.stdin.read()
i usunąć krawędzie tylną\n
z moich przykładowych wejść.sys.stdin.read()
czyta z pliku, prawda? Wciąż jestem nowy w Pythonie.sys.stdin.read()
odczytuje STanDard INput aż do EOF.input()
odczytuje i ocenia jeden wiersz standardowego wejścia.Python,
478471 znaków(Bez komentarzy.
452450 znaków bez importu).Chodzi o to, że tworzę ukierunkowany wykres, w którym każda komórka siatki ma swój własny wierzchołek (plus jeden dodatkowy wierzchołek „drenażowy”). Na wykresie jest krawędź od każdej komórki o wyższej wartości do sąsiednich komórek o niższej wartości, a także krawędź od wszystkich komórek zewnętrznych do wierzchołka „drenażu”. Następnie używam Floyd-Warshall do obliczenia, które wierzchołki są połączone z wierzchołkiem „drenażu”; wszystkie wierzchołki, które nie są połączone, zostaną zalane i będą oznaczone gwiazdką.
Nie mam dużego doświadczenia ze skondensowaniem kodu Pythona, więc prawdopodobnie jest bardziej zwięzły sposób na zaimplementowanie tej metody.
źródło
Common Lisp, 833
Nie podjęto żadnej próby gry w golfa, po prostu uważam ten problem za interesujący. Dane wejściowe to tablica 2D mapy. Rozwiązanie sprawdza każdy kwadrat, aby sprawdzić, czy „odpływa” - kwadrat odpływa, jeśli znajduje się na zewnętrznej krawędzi lub jeśli sąsiaduje z kwadratem o równej lub niższej wysokości, który odpływa. Aby uniknąć powtarzania się w nieskończoność, kod zachowuje „mapę drenażu” (dm), w której przechowuje status drenażu już określonych kwadratów.
źródło
Python, 246 znaków
Rozwiązanie działa, wykonując DFS z każdej pozycji, aby ustalić, czy wypełnić.
Jeśli końcowe białe znaki w każdej linii są dozwolone, można je skrócić, stosując w = 80 i wypełniając linie wejściowe białymi znakami do 80 znaków.
źródło