Wejście:
Matrycy zawierającej liczby całkowite w zakresie [0 - 9] .
Wyzwanie:
Ustal, czy wszystkie niezerowe elementy są ze sobą połączone pionowo i / lub poziomo.
Wynik:
Wartość truthy jeśli wszystkie są połączone, a wartość falsy jeśli nie są niezerowe elementy / grupy, które nie są podłączone do innych elementów / grup.
Przypadki testowe:
Przypadki testowe są oddzielone wierszami. Przypadki testowe można znaleźć w wygodniejszych formatach tutaj (od Kudos do Dada ).
Wszystkie są połączone i powinny zwrócić prawdziwą wartość:
0
---
0 0
---
1 1 1
0 0 0
---
1 0 0
1 1 1
0 0 1
---
0 0 0 0 0 0
0 0 3 5 1 0
0 1 0 2 0 1
1 1 0 3 1 6
7 2 0 0 3 0
0 8 2 6 2 9
0 0 0 0 0 5
Wszystkie poniższe elementy nie są połączone i powinny zwrócić wartość falsy:
0 1
1 0
---
1 1 1 0
0 0 0 2
0 0 0 5
---
0 0 5 2
1 2 0 0
5 3 2 1
5 7 3 2
---
1 2 3 0 0 5
1 5 3 0 1 1
9 0 0 4 2 1
9 9 9 0 1 4
0 1 0 1 0 0
To jest gra w golfa , więc wygrywa najkrótsze zgłoszenie w każdym języku. Wyjaśnienia są zachęcane!
Zainspirowany tym wyzwaniem .
code-golf
decision-problem
graph-theory
matrix
Stewie Griffin
źródło
źródło
Odpowiedzi:
Retina 0.8.2 ,
8077 bajtówWypróbuj online! Edycja: Zapisano 1 bajt dzięki @FryAmTheEggman. Wyjaśnienie:
Uprość do tablicy
@
s i1
s.Zmień jeden
1
na a_
.Wypełnienie powodziowe z
_
sąsiednich1
s.Sprawdź, czy pozostały jakieś
1
s.źródło
JavaScript (ES6),
136135 bajtówZwraca wartość logiczną.
Przypadki testowe
Pokaż fragment kodu
Skomentował
Funkcja rekurencyjna g () najpierw szuka niezerowej komórki (pod warunkiem, że globalnie zdefiniowana flaga z jest ustawiona na 0 ), a następnie zaczyna stamtąd wypełnianie zalewowe (jak tylko z! = 0 ).
źródło
MATL , 7 bajtów
Daje to macierz zawierającą wszystkie jako prawdziwe dane wyjściowe lub macierz zawierającą co najmniej zero jako fałsz . Wypróbuj online!
Możesz także zweryfikować prawdziwość / fałsz, dodając
if
-else
stopkę w stopce; spróbuj też!Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
Wolfram Language (Mathematica) , 54 bajty
Zaoszczędzono 2 bajty dzięki user202729.
Wypróbuj online!
źródło
C, 163 bajty
Dzięki @ user202729 za zapisanie dwóch bajtów!
Pętle przechodzą przez macierz, aż znajdzie pierwszy niezerowy element. Następnie przestaje na chwilę zapętlać i rekurencyjnie ustawia każdy niezerowy element podłączony do znalezionego elementu na zero. Następnie pętle przechodzą przez resztę macierzy sprawdzając, czy każdy element ma teraz zero.
Wypróbuj online!
Rozwinięty:
źródło
Perl,
8079787370 bajtówObejmuje
+2
dla0a
Podaj macierz wejściową bez spacji na STDIN (lub w rzeczywistości jako wiersze oddzielone dowolnym rodzajem białych znaków)
Łatwiejszy do odczytania, jeśli zostanie umieszczony w pliku:
źródło
Java 8, 226 bajtów
Zajęło to sporo czasu, więc cieszę się, że teraz działa ...
Wyjaśnienie:
Wypróbuj online.
źródło
APL (Dyalog Unicode) , 36 bajtów SBCS
Wypróbuj online!
źródło
Galaretka , 23 bajty
Wypróbuj online!
Wyjaśnienie.
Program oznaczy każdy składnik morfologiczny inną liczbą, a następnie sprawdzi, czy jest mniej niż 3 liczby. (włącznie z
0
).Rozważ wiersz w macierzy.
Wielokrotnie stosuj tę funkcję do wszystkich wierszy i kolumn w macierzy, we wszystkich rzędach, ostatecznie wszystkie składniki morfologiczne będą miały tę samą etykietę.
I w końcu...
źródło
¦
bierze O (n).Haskell , 132 bajty
wyodrębnione z Solve Hitori Puzzles
indices m
wyświetla(line,cell)
lokalizacje siatki wejściowej.filter((/=0).(m!))
odfiltrowuje wszystkie lokalizacje z wartościami niezerowymi.splitAt 1
dzieli pierwszego członka na listę singletonów obok listy odpoczynku.any(==1)[(b-d)^2+(p-q)^2|(d,q)<-f]
informuje, czy(b,p)
dotyka granicyf
.\(f,e)->partition(\(b,p)->touches(b,p)f)e
oddziela dotyków od [jeszcze] nie dotykających.until(null.fst)advanceFrontier
powtarza to, dopóki granica nie będzie mogła przejść dalej.null.snd
sprawdza, czy rzeczywiście osiągnięto wszystkie lokalizacje, do których należy dotrzeć.Wypróbuj online!
źródło
Brud , 37 bajtów
Drukuje
1
dla dopasowania i0
bez dopasowania. Wypróbuj online!Wyjaśnienie
Nieterminalny
C
dopasowuje dowolny niezerowy znak, który jest podłączony do pierwszego niezerowego znaku matrycy w angielskiej kolejności czytania.Kilka wyjaśnień:
e
dopasowuje prostokąt o zerowej szerokości lub wysokości, który jest częścią krawędzi matrycy wejściowej i$
jest „znakiem zastępczym”, który pasuje do wszystkiego. Wyrażeniee/\0{/e\0*0$e
można zwizualizować w następujący sposób:Wyrażenie
CoX^0oX
jest w rzeczywistości parsowane jako((CoF)0)oX
;oF
ioX
są operatorzy przyrostkowe i połączeniem żetonów pomocą poziomej konkatenacji.^
Umożliwia zestawienie wyższy priorytet, a następnieoX
, dzięki czemu obracanie się w stosunku do całego sub ekspresji.oF
Poprawia orientacjęC
po uprzednim obrócony ooX
; w przeciwnym razie może pasować do pierwszej niezerowej współrzędnej w obróconej angielskiej kolejności czytania.Oznacza to, że wszystkie niezerowe znaki muszą być połączone z pierwszym. Specyfikator siatki
:
jest technicznie operatorem postfiksowym, aleC|:\0
jest cukrem syntaktycznym(C|\0):
.źródło
Perl 5 ,
131129 + 2 (-ap
) = 133 bajtówWypróbuj online!
źródło
Python 2 ,
211163150 bajtówWypróbuj online!
Wyjście odbywa się za pomocą kodu wyjścia. Dane wejściowe mają postać listy 1d i szerokości macierzy.
źródło