Suchen Sie anhand einer Liste von Zeichenfolgen die kleinste quadratische Matrix, die die einzelnen Anfangszeichenfolgen enthält. Die Zeichenfolgen können horizontal, vertikal oder diagonal und vorwärts oder rückwärts wie in dieser Frage Wortsuchrätsel angezeigt werden .
Wörter sollten in das Quadrat gesetzt werden, mit mindestens einem Wort in jeder Richtung (horizontal, vertikal und diagonal). Wörter sollten nur einmal vorkommen.
Die Eingabe ist also nur eine Liste von Wörtern. Zum Beispiel: CAT, TRAIN, CUBE, BICYCLE
. Eine mögliche Lösung ist:
B N * * * * *
* I * * C A T
* A C * * * *
* R * Y * * C
* T * * C * U
* * * * * L B
* * * * * * E
Aus Gründen der Übersichtlichkeit habe ich das Ausfüllen von Buchstaben durch Sternchen ersetzt. Die gewünschte Ausgabe sollte zufällige Füllbuchstaben enthalten.
AC
Beispielsweise würde der in Ihrem Beispiel verbleibende Buchstabe einen anderen ergeben,CAT
wenn dies der Fall istT
.A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
keine Lösung.Antworten:
JavaScript (ES6), 595
628 680Bearbeiten Einige Bereinigung und Zusammenführung:
- Funktion P fusioniert innerhalb Funktion R
- Calc x und z in der gleichen .Map
- wenn Lösung gefunden, Set x auf 0 äußere Schleife verlassen
- und fusionierten definiton Anruf von W
Edit2 mehr Golf, zufällige Füllung verkürzt, äußere Schleife überarbeitet ... siehe Verlauf für etwas lesbarer
Im Gegensatz zu der akzeptierten Antwort,dies für die meisten Eingaben funktionieren. Vermeiden Sie einfach einzelne Buchstaben. Wenn eine Ausgabe gefunden wird, ist sie optimal und verwendet alle drei Richtungen.Die Einschränkung, das Wiederholen von Wörtern zu vermeiden, ist sehr schwierig. Ich musste bei jedem Schritt, bei dem ich ein Wort zum Gitter hinzufügte, und bei jedem zufälligen Füllzeichen nach wiederholten Wörtern suchen.
Hauptunterfunktionen:
P (w) wahr, wenn das Wort palindrom ist. Ein Palindrom-Wort wird zweimal gefunden, wenn nach wiederholten Wörtern gesucht wird.
R (s) prüft die Wiederholung von Wörtern in Gitter s
Q (s) füllen das Gitter s mit zufälligen Zeichen - es ist rekursiv und rückgängig zu machen, wenn sich ein Wort wiederholt - und können fehlschlagen.
W () rekursiv, versuchen Sie, wenn möglich, ein Raster mit der angegebenen Größe zu füllen.
Die Hauptfunktion verwendet W (), um ein Ausgabegitter zu finden. Dabei wird versucht, das längste Wort in der Eingabe bis zur Summe der Länge aller Wörter zu finden.
Ungolfed und erklärt (unvollständig, sorry Leute, es ist eine Menge Arbeit)
Test in der Firefox / FireBug-Konsole
F (['TRAIN', 'CUBE', 'BOX', 'BICYCLE'])
nicht gefüllt
F)
F (['AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG'])
F (['AA', 'AB', 'AC', 'AD', 'AE', 'AF'])
Ausgabe nicht gefüllt - @nathan: Jetzt können Sie kein weiteres A x ohne Wiederholungen hinzufügen . Du brauchst ein größeres Gitter.
quelle
C #
Hier ist eine einfache Implementierung mit noch zu erledigender Arbeit. Es gibt sehr viele Kombinationen, um die kleinste Größe zu erhalten. Also einfach den einfachsten Algorithmus verwenden, an den man denken könnte.
Prüfung
quelle
at least one word in each direction (horizontal, vertical and diagonal)
. Ausführen des Testprogramms, kein horizontales Wort (3 vertikale, 1 diag)