Eingang:
Eine Matrix mit ganzen Zahlen im Bereich [0 - 9] .
Herausforderung:
Bestimmen Sie, ob alle Nicht-Null-Elemente vertikal und / oder horizontal miteinander verbunden sind.
Ausgabe:
Ein wahrer Wert, wenn alle verbunden sind, und ein falscher Wert, wenn es Elemente / Gruppen ungleich Null gibt, die nicht mit anderen Elementen / Gruppen verbunden sind.
Testfälle:
Testfälle werden durch eine Linie getrennt. Testfälle können in bequemen Formaten findet hier ( großes Lob an Dada ).
Die folgenden sind alle miteinander verbunden und sollten einen wahrheitsgemäßen Wert zurückgeben:
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
Die folgenden sind alle nicht verbunden und sollten einen falschen Wert zurückgeben:
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
Das ist Code-Golf , also gewinnt die kürzeste Einsendung in jeder Sprache. Erklärungen sind erwünscht!
Inspiriert von dieser Herausforderung .
quelle
Antworten:
Retina 0.8.2 ,
8077 BytesProbieren Sie es online! Bearbeiten: 1 Byte dank @FryAmTheEggman gespeichert. Erläuterung:
Vereinfachen Sie zu einem Array von
@
s und1
s.Ändern Sie eine
1
zu a_
.Fülle es von dem
_
bis zum angrenzenden1
s.Prüfen Sie, ob noch
1
s übrig sind.quelle
JavaScript (ES6),
136135 BytesGibt einen Booleschen Wert zurück.
Testfälle
Code-Snippet anzeigen
Kommentiert
Die rekursive Funktion g () sucht zunächst nach einer Nicht-Null-Zelle (solange das global definierte Flag z auf 0 gesetzt ist ) und beginnt von dort aus mit dem Füllen (sobald z! = 0 ist ).
quelle
MATL , 7 Bytes
Dies ergibt eine Matrix, die alle Einsen als wahrheitsgemäße Ausgabe enthält, oder eine Matrix, die mindestens eine Null als falsch enthält . Probieren Sie es online!
Sie können auch die Richtigkeit / Falschheit überprüfen, indem Sie einen
if
-else
Zweig in der Fußzeile hinzufügen . versuche es auch!Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
Wolfram Language (Mathematica) , 54 Byte
2 Bytes dank user202729 gespeichert.
Probieren Sie es online!
quelle
C 163 Bytes
Vielen Dank an @ user202729 für das Speichern von zwei Bytes!
Durchläuft die Matrix, bis das erste Nicht-Null-Element gefunden wird. Hört dann für eine Weile auf zu schleifen und setzt rekursiv jedes Nicht-Null-Element, das mit dem gefundenen Element verbunden ist, auf Null. Durchläuft dann den Rest der Matrix und prüft, ob jedes Element jetzt Null ist.
Probieren Sie es online!
Abgerollt:
quelle
Perl,
8079787370 BytesEnthält
+2
für0a
Geben Sie die Eingabematrix ohne Leerzeichen in STDIN an (oder in der Tat als durch Leerzeichen getrennte Zeilen).
Einfacher zu lesen, wenn in einer Datei abgelegt:
quelle
Java 8, 226 Bytes
Das hat eine ganze Weile gedauert und ich bin froh, dass es jetzt funktioniert.
Erläuterung:
Probieren Sie es online aus.
quelle
APL (Dyalog Unicode) , 36 Byte SBCS
Probieren Sie es online!
quelle
Jelly , 23 Bytes
Probieren Sie es online!
Erläuterung.
Das Programm kennzeichnet jede morphologische Komponente mit einer anderen Nummer und prüft dann, ob es weniger als 3 Nummern gibt. (einschließlich
0
).Betrachten Sie eine Zeile in der Matrix.
Wenden Sie diese Funktion wiederholt für alle Zeilen und Spalten in der Matrix in allen Reihenfolgen an. Schließlich haben alle morphologischen Komponenten dieselbe Bezeichnung.
Und schlussendlich...
quelle
¦
nimmt O (n).Haskell , 132 Bytes
extrahiert aus Löse Hitori Rätsel
indices m
listet die(line,cell)
Positionen des Eingaberasters auf.filter((/=0).(m!))
filtert alle Stellen mit Nicht-Null-Werten heraus.splitAt 1
Partitioniert das erste Mitglied in eine Singleton-Liste neben einer Rest-Liste.any(==1)[(b-d)^2+(p-q)^2|(d,q)<-f]
sagt , wenn(b,p)
die Grenze berührtf
.\(f,e)->partition(\(b,p)->touches(b,p)f)e
spaltet Berührungen von noch nicht Berührungen ab.until(null.fst)advanceFrontier
wiederholt dies, bis die Grenze nicht mehr vorrücken kann.null.snd
prüft das Ergebnis, ob tatsächlich alle zu erreichenden Standorte erreicht wurden.Probieren Sie es online!
quelle
Schmutz , 37 Bytes
Druckt
1
für Übereinstimmung und0
für keine Übereinstimmung. Probieren Sie es online!Erläuterung
Das
C
Nicht- Terminal stimmt mit jedem Nicht-Null-Zeichen überein, das mit dem ersten Nicht-Null-Zeichen der Matrix in der englischen Lesereihenfolge verbunden ist.Einige Erklärungen:
e
Stimmt mit einem Rechteck mit der Breite oder Höhe Null überein, das Teil der Kante der Eingabematrix ist, und$
ist ein "Platzhalter", der mit allem übereinstimmt. Der Ausdrucke/\0{/e\0*0$e
kann wie folgt dargestellt werden:Der Ausdruck
CoX^0oX
wird tatsächlich analysiert als((CoF)0)oX
; Die OperatorenoF
undoX
sind Postfix-Operatoren, und die Verkettung von Tokens bedeutet horizontale Verkettung. Die^
Nebeneinanderstellung hat dann eine höhere PrioritätoX
, sodass die Drehung auf den gesamten Unterausdruck angewendet wird. DasoF
korrigiert die AusrichtungC
nach dem Drehen umoX
; Andernfalls könnte es mit der ersten Koordinate ungleich Null in einer gedrehten Lesereihenfolge übereinstimmen.Dies bedeutet, dass alle Zeichen ungleich Null mit dem ersten Zeichen verbunden sein müssen. Der Grid-Spezifizierer
:
ist technisch gesehen ein Postfix-Operator,C|:\0
ist jedoch syntaktischer Zucker für(C|\0):
.quelle
Perl 5 ,
131129 + 2 (-ap
) = 133 BytesProbieren Sie es online!
quelle
Python 2 ,
211163150 BytesProbieren Sie es online!
Die Ausgabe erfolgt über den Exit-Code. Die Eingabe erfolgt als 1d-Liste und die Breite der Matrix.
quelle