Easy As ABC, auch als "End View" bekannt, ist ein Puzzle, bei dem Sie ein leeres Gitter mit Buchstaben erhalten. Sie müssen das Raster teilweise ausfüllen, damit sich in jeder Zeile und Spalte genau einer von jedem Buchstaben befindet. Außerdem müssen Buchstaben am Ende einer Zeile (oder Spalte) der erste Buchstabe sein, der in dieser Zeile (oder Spalte) aus dieser Richtung sichtbar ist. Ihr Ziel bei diesem Code-Golf ist es, ein Easy As ABC-Puzzle zu lösen.
Hier ist zum Beispiel ein Easy As ABC-Puzzle von der diesjährigen MIT Mystery Hunt mit den Buchstaben MIC:
Die Lösung ist:
(Entschuldigung für die Artefakte auf dem Cs; ich habe versucht, die irrelevanten Informationen aus dem Rest des Puzzles herauszuarbeiten.)
I / O.
Die Eingabe ist ein Array von Zeichenfolgen oder eine Zeichenfolge, möglicherweise mit Trennzeichen. Es beginnt in der oberen linken Ecke und geht im Uhrzeigersinn. Zum Beispiel könnte das obige Puzzle wie folgt eingegeben werden:
".CMM.M|....IM|.....I|C.ICI."
Die Ausgabe sollte das gelöste Raster mit oder ohne Rand sein. Es kann sich um ein Array von Zeichen, ein Array von Zeichenfolgen oder ein anderes geeignetes Format handeln. Das gleiche "leere" Zeichen muss als Eingabe akzeptiert und als Ausgabe angezeigt werden, aber dieses leere Zeichen kann alles sein. Wenn es sich um einzelne Zeichenfolgen handelt, müssen Eingabe und Ausgabe dasselbe Trennzeichen (zwischen den Seiten für die Eingabe und den Zeilen für die Ausgabe) oder überhaupt kein Trennzeichen haben.
Für unlösbare Rätsel müssen Sie etwas ausgeben, das nicht mit einer Lösung verwechselt werden kann. Sie können davon ausgehen, dass kein Puzzle mehr als eine Lösung hat.
Sie müssen eine beliebige Anzahl von Buchstaben und ein beliebiges Raster zulassen. Alle verwendeten Buchstaben werden am Rand des Rasters angezeigt.
Das ist Code-Golf : Wie immer gewinnt der kürzeste Code!
Testfälle
"T.AA..|.T.TSS|..TST.|A...SS"
"R.RU..|B.B..B|.UR.UB|UR..B."
"N...NK|E.NK.K|..KK..|....EK"
"CA..DBD|.B..CC.|.D.DEB.|DB.A..A"
"...DDEBE|DC..EBBD|BA..ABF.|E..FECDE"
quelle
Antworten:
PHP, 1111 Bytes
abzüglich der Bytes, die Zeilenumbrüche entfernen
Die Online-Version funktioniert nur mit den Testfällen mit einer Länge von 6
kurze Problemumgehung
mache alle Permutationen
Fülle 2 Arrays mit den Permutationen $ x $ y
Wechseln Sie zwischen zwei Funktionen, bis nur noch 1 Lösung in der x-Array-Zeile für jede Zeile vorhanden ist
Funktion i: Finden Sie Schnittpunkte im Raster und lassen Sie Permutationen fallen
Funktion c: Überprüfen Sie die Spalten in jedem Array eindeutiger Zeichen und entfernen Sie die Permutationen in den anderen Zeilen für das Array $ x und $ y
quelle