Stellen Sie sich ein zweidimensionales Array von Booleschen Werten vor, wobei die Nullen Grasquadrate auf einem rechteckigen Grundstück und die Einsen Zäune darstellen.
Schreiben Sie eine Funktion, die das 2D-Array als Eingabe akzeptiert und festlegt, ob Sie mit nur Nord-, Ost-, West- und Südbewegungen von einer Grasfläche zu einer anderen fahren können, ohne gegen einen Zaun zu stoßen.
Wenn eine Grasfläche im Array vollständig von Zäunen umschlossen ist (was bedeutet, dass Sie nicht mit N / E / W / S reisen können, um jede andere Grasfläche im Array zu erreichen), sollte die Funktion false zurückgeben. Andernfalls sollte true zurückgegeben werden.
Im Folgenden finden Sie zwei Beispiel-Arrays, die Sie als Eingaben verwenden können. Ihre Funktion sollte jedoch nicht nur diese, sondern alle 2D-Arrays mit Booleschen Werten verarbeiten können:
0 0 0 0 0
0 1 0 0 0
0 1 1 1 1
0 0 0 0 0
0 0 0 1 1
(should return true)
0 1 0 1 0
0 1 1 0 0
0 0 0 0 0
0 0 0 1 0
1 1 1 1 0
(should return false, since the middle 0 in the top row is fully enclosed)
Kürzester Arbeitscode gewinnt. Ich wähle den Gewinner, nachdem entweder eine Woche vergangen ist oder innerhalb von 24 Stunden keine neuen Beiträge eingegangen sind.
1 1 1
;1 0 1
;1 1 1
? In der Mitte befindet sich eine Graszelle. Optisch ist die Graszelle in der Mitte vollständig von Zäunen umschlossen, aber Ihrer Definition nach nicht.Antworten:
Matlab 45
quelle
input('');c=bwconncomp(~ans,4);c.NumObjects<2
Dies würde 45 Zeichen ergeben.APL (39)
Verwendung:
quelle
Mathematica,
6058 ZeichenVerwendung:
quelle
f=Max@WatershedComponents[Image@#,CornerNeighbors->1>2]<2&
Ruby,
202,198,193Füllt eine Überflutung und prüft dann, ob noch Nullen übrig sind.
quelle
PHP 147
202177165149BytesBEARBEITEN Ich habe meinen gzip-Hack mit einer echten PHP-Lösung geschlagen.
Ein wenig lang ... Eingabe als Textzeichenfolge, keine Leerzeichen, durch Zeilenumbrüche begrenzte Zeilen. Es füllt sich mit
c
s und prüft dann, ob noch Nullen übrig sind. In der Schleife verwende ichexp
als grobe Obergrenze die Anzahl der erforderlichen Iterationen. Ich nutze die Symmetrie, um die doppelten Fälle in weniger Code zu behandelnHier ist ein ungolfed Testfall:
quelle
Excel VBA,
305215 BytesJa, haha VBA , aber der Matrixcharakter des Problems lässt vermuten, dass eine praktische Lösung in Excel interessant sein könnte (außerdem hat jemand bereits eine Antwort in meinen anderen Sprachen eingereicht!). Offensichtlich wird VBA nicht die prägnanteste sein, aber ich denke, es ist vernünftig.
Diese Flut füllt sich von einem beliebigen Ausgangspunkt aus und prüft, ob noch "Gras" übrig ist
R ist ein Arbeitsblattbereich mit Einsen und Nullen, die die im Problem definierten Zäune und Grasflächen darstellen. Bonus, das Spielfeld muss nicht rechteckig oder sogar zusammenhängend sein.
Zum Beispiel würde False zurückgeben. Die Nullen rechts sind von den Nullen links nicht zu erreichen. Das unregelmäßige Feld bricht es nicht.
Einige Hinweise zum Golfen.
Ich denke, einige Zeichen könnten abgeschnitten werden, wenn die Anforderung in Bezug auf 1 und 0 invertiert würde, aber nicht genug, um es wert zu invertieren.
VBA besteht auf ein paar Leerzeichen (a = b vs a = b), was der Zeichenzählung nicht hilft.
S muss explizit als Bereich deklariert werden. Wenn eine Variante übrig bleibt, wird sie eher zu einem Bereichswert als zu einem Bereich.
Vielleicht ein besserer Weg, um die Flut zu verzweigen? Ich konnte mir keine Schleife einfallen lassen, in der Zeichen gespeichert wurden, um sie N / E / S / W zu senden
Bearbeiten: Der Basisfall wurde auf der Flood-Füllung überarbeitet, und es wurde einiges abgeschnitten, indem überprüft wurde, ob er sich nach der Rekursion in einem Basisfall befindet, anstatt die Rekursion zu verhindern.
quelle
Python (219 Bytes)
Auf jeden Fall nicht die kürzeste, aber es ist mein erster Versuch hier, also bin ich stolz darauf:
Die Eingabe sollte eine Zeichenfolge aus 0 und 1 sein, wobei die Zeilen durch ein Zeilenumbruchzeichen (\ n) begrenzt werden.
Anwendungsbeispiel:
quelle
and
, ich denke, es spart einige ZeichenPython (196)
Standard Flutfüllung.
Führt die Matrix durch STDIN, wobei jede Zeile durch ein einzelnes Leerzeichen getrennt ist. Zum Beispiel "01010 01100 00000 00010 11110".
quelle
Mathematica 53
Es ruft die interne Funktion auf
Image`MorphologicalOperationsDump`imageBinaryLabel
, die der ähneltMorphologicalComponents
.quelle
PHP (286 Zeichen)
Viel zu lange, ich bin wahrscheinlich den langen langen Weg gegangen.
Nicht golfen:
quelle
C #, 235 Bytes
Es wird versucht, jede Zelle im Board mit Flood zu füllen. Es wird nur eine Flood-Füllung zurückgegeben, die wahr ist.
quelle
Python 2.X + 3.X: 335 Zeichen
Golf gespielt:
Ungolfed:
quelle