Meine Kinder haben eine Alphabet-Matte zum Spielen:
Nach Monaten, in denen die Fliesen der Matte nach dem Zufallsprinzip platziert wurden, wurde ich müde und legte alle Fliesen der Matte abschnittsweise nach ihren Hintergrundfarben gruppiert. Wenn die Buchstaben die Hintergrundfarbe darstellen, habe ich eine Matte wie diese:
AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC
Für die Farben A, B, C, D und E gibt es also immer eine Möglichkeit, alle Kacheln mit derselben Hintergrundfarbe horizontal oder vertikal in der Matte zu verbinden. Das ist, was ich eine Matte nenne, die richtig nach Farben gruppiert ist . Sie können die Gruppen für das vorherige Beispiel in den folgenden Tabellen sehen:
AA
A
A
AA
AAAA
AAAAAA
BB
BB
B
C
CCC
CCCC
CCC
CCCC
CCC
DDD
D
DD
DD
E
EE
E
EE
E
Außerdem gibt es nur eine Gruppe für jede Farbe, sodass dies nicht gültig wäre:
ABA
ABA
Weil Farbe-A-Kacheln nicht nur in einer Gruppe gruppiert sind. Dies gilt auch nicht, da die Kacheln weder horizontal noch vertikal verbunden sind:
AB
BA
Die Herausforderung
Überprüfen Sie bei einem zweidimensionalen Array von Zeichen im druckbaren ASCII-Bereich (muss kein Quadrat sein, solange die Größe beider Dimensionen gleich oder größer als 1 ist), ob das Array eine nach Farben richtig gruppierte Matte darstellt (Jedes andere Zeichen im Array repräsentiert eine andere Farbe.) Die Eingabe kann in jedem vernünftigen Format erfolgen, sofern es sich um ein zweidimensionales Array von Zeichen handelt (2D-Zeichen-Array, Array von Zeichenfolgen mit derselben Länge usw.). Die Ausgabe muss aus zwei Wahrheits- und Falschwerten (0) bestehen / 1, 't' / 'f', true / false, egal, solange etwas zurückgegeben wird und die Rückgabewerte für alle Eingaben konsistent sind).
Das ist Code-Golf, also kann das kürzeste Programm / Funktion / Methode / Lambda für jede Sprache gewinnen!
Beispiele
A truthy
AB
AB truthy
AB
BA falsey
ABCDE truthy
ABCDC falsey
**::dd22
***:d222
*:::::22 truthy
$$$%%%&&
$$%%&&&&
&&$$$%&& falsey
AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC truthy
AABB
ABBA
AAAA truthy
AAAB
AAAA
AAAA truthy
Meine Matte richtig nach Farben gruppiert
(Ich muss noch diese Grenzen reparieren ...)
Antworten:
MATL ,
1615 BytesDie Eingabe ist ein 2D-Zeichen-Array (mit durch getrennten Zeilen
;
). Die Ausgabe erfolgt,0
wenn die Eingabe qualifiziert ist oder1
nicht.Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
Der Code überprüft im Wesentlichen, ob jedes Zeichen in der Eingabe nur eine verbundene Komponente enthält, wobei die 4-Konnektivität berücksichtigt wird (dh keine Diagonalen).
Wiederholte Zeichen werden wiederholt verarbeitet (was mehr Golf als Deduplizieren bedeutet).
quelle
Befunge-93, 317 Bytes
Bearbeiten: Korrigiert für die richtige Anzahl von Bytes. Auch könnte weiter Golf gespielt werden
Druckt 1 als wahr, 0 als falsch
Probieren Sie es online
Hier ist eine Visualisierung des Pfades, den der Zeiger nimmt
Hinweis: Dies ist eine alte Version
Wie es funktioniert
Hier ist ein schneller und schmutziger Pseudocode
Grundsätzlich wird nach dem Speichern der Eingabe das Ganze durchlaufen und die einzelnen Leerzeichen überprüft. Wenn ein Leerzeichen mit einem Zeichen gefunden wird, werden die Koordinaten zum Stapel hinzugefügt. Anschließend werden die umgebenden Leerzeichen rekursiv auf dasselbe Zeichen überprüft, wobei jedes Leerzeichen auf 0 gesetzt wird. Wenn der Abschnitt dieses Zeichens erschöpft ist, wird geprüft, ob für dieses Zeichen bereits ein Abschnitt vorhanden ist. Wenn dies der Fall ist, geben Sie 0 zurück. Wenn nicht, fügen Sie es dem Array von Zeichen hinzu. Wenn es das gesamte Raster ohne Duplikate durchlaufen hat, wird 1 zurückgegeben.
Für Leute, die mit Befunge vertraut sind, ist hier eine abgesetzte Version des Codes
quelle
J, 66 Bytes
c
definiert ein Verb , das , wenn man eine Matrix aus Einsen und Nullen erzählt wird c onnected. Singleton-Typen werden als Sonderfall von true behandelt. Andernfalls wird für jede Zelle eine orthogonale Nachbarzählung verwendet, dann wird das Signum dieser Zählung mit der ursprünglichen Matrix multipliziert. Wenn dieses Produkt der ursprünglichen Matrix entspricht, ist es verbunden.Die Nachbarzählung wird durch Verschieben in alle 4 Richtungen und anschließende Summierung erreicht. Die Verschiebung in 4 Richtungen wird mit der Funktion "
x
-arg can by a table" zum Drehen / Verschieben erreicht|.
Schließlich wird die Antwort selbst erzielt, indem für jedes eindeutige
~.
Element der Eingabe eine Einsen / Nullen-Matrix erstellt wird und anschließend sichergestellt wird, dass alle diese Matrizen verbunden sind. Dies ist das Verb in der zweiten Zeile.Probieren Sie es online!
quelle
JavaScript (ES6), 114 Byte
Nimmt Eingaben als ein Array von Zeichenfolgen. Rückgabe
0
oder1
.Testfälle
Code-Snippet anzeigen
Formatiert und kommentiert
quelle
Wolfram Language (Mathematica) , 96 Byte
Probieren Sie es online!
Übernimmt die Eingabe als 2D-Liste von Zeichen: zum Beispiel
{{"A","B"},{"C","D"}}
.Der
Charakter ist\[Transpose]
.Wie es funktioniert
Nimmt für jedes Zeichen
c
in der EingabeSubgraph
dasGridGraph
von desselbenDimensions
als die Eingabe, die jedemPosition
in demc
auftritt entspricht, und prüft, ob es ein istConnectedGraphQ
.quelle
Python 2 , 247 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6), 181 Byte
Wenn eine neue Farbkachel gefunden wird, füllen Sie die verbundenen mit leeren Zeichenfolgen. Wenn die Matte richtig nach Farben gruppiert ist, sollten alle Kacheln mit leeren Zeichenfolgen gefüllt werden.
Code testen
Code-Snippet anzeigen
quelle