Hintergrund
Ich habe ein paar alte und körnige Schwarzweißbilder. Einige von ihnen stellen Weinreben dar, die an einer Wand klettern, andere nicht - Ihre Aufgabe ist es, sie für mich zu klassifizieren.
Ein- und Ausgabe
Ihre Eingabe ist ein rechteckiges 2D-Array von Bits A , das in einem beliebigen geeigneten Format angegeben wird. Es wird nicht leer sein, aber es kann nicht garantiert werden, dass es sowohl Nullen als auch Einsen enthält. Das Array zeigt eine Rebe, wenn die folgenden Bedingungen erfüllt sind:
- Die unterste Reihe von A enthält mindestens eine 1. Dies sind die Wurzeln der Rebe.
- Jede 1 in A ist mit der unteren Reihe durch einen Pfad von 1s verbunden, der nur nach links, rechts und unten verläuft (nicht nach oben und nicht diagonal). Diese Wege sind die Zweige der Rebe.
Ihre Ausgabe ist ein konsistenter Wahrheitswert, wenn die Eingabe eine Rebe darstellt, und ansonsten ein konsistenter falscher Wert.
Beispiele
Dieses Array zeigt eine Rebe:
0 0 1 0 0 1
0 1 1 0 0 1
0 1 0 1 1 1
1 1 0 1 0 1
0 1 1 1 0 1
0 0 1 0 1 1
Diese Eingabe stellt keine Rebe dar, da sich in der Mitte des rechten Randes eine 1 befindet, die nicht durch einen Zweig mit den Wurzeln verbunden ist:
0 0 0 1 1 0
0 1 0 1 1 1
0 1 0 1 0 1
0 1 1 1 1 0
0 0 1 1 0 1
Das Array all-0 stellt niemals eine Rebe dar, das Array all-1 jedoch immer.
Regeln und Wertung
Sie können ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig.
Testfälle
Wahrheitseingaben:
1
0
1
1
01
11
0000
0111
1100
1001
1111
1111
1111
1111
001001
011001
010111
110101
011101
001011
1011011
1001001
1111111
0100000
0111111
1111001
1001111
1111101
0000000
0011100
0010100
0011100
0001000
1111111
0001000
0011100
0010100
0010100
Falsche Eingaben:
0
1
0
10
01
000
000
000
011
110
000
111111
000000
101011
111001
010010
001000
000010
110001
001100
111111
110101
010011
111011
000110
010111
010101
011110
001101
11000000
10110001
10011111
11110001
01100011
00110110
01101100
01100001
01111111