Überlegen Sie, wie ein Wort in einem beliebig großen Boggle- Raster angeordnet werden kann, wenn die Regel, dass der gleiche Buchstabenwürfel nicht mehr als einmal verwendet wird, ignoriert wird . Nehmen Sie auch an, dass Sie eine unbegrenzte Anzahl von Buchstabenwürfeln (mit allen vorhandenen Buchstaben) haben und dies Qu
gerecht ist Q
.
Das Wort MISSISSIPPI
könnte mit nur 6 Würfeln arrangiert werden. Hier ist eine mögliche Anordnung:
S
MIS
PP
Beginnend mit dem M
Schritt machen wir wiederholt einen horizontalen, vertikalen oder diagonalen Schritt, bis das gesamte Wort buchstabiert ist.
Überraschenderweise benötigt eine längere Phrase wie AMANAPLANACANALPANAMA
auch nur 6 Würfel:
MAN
PLC
Die Mindestanzahl von Cubes für längere, komplexere Strings ist jedoch nicht immer offensichtlich.
Herausforderung
Schreiben Sie ein Programm, das eine Zeichenfolge aufnimmt und sie in einer Art Boggle so anordnet, dass die Mindestanzahl von Cubes verwendet wird . (Die Abmessungen des resultierenden Gitters und die Anzahl der leeren Zellen sind irrelevant.)
Angenommen, Sie haben eine unbegrenzte Anzahl von Cubes für jedes druckbare ASCII-Zeichen mit Ausnahme des Leerzeichens (Hex-Codes 21 bis 7E), da es als leere Gitterzelle verwendet wird. Es werden nur druckbare ASCII-Zeichenfolgen (ohne Leerzeichen) eingegeben.
Die Eingabe sollte über stdin oder die Befehlszeile erfolgen. Die Ausgabe sollte auf stdout (oder die nächstgelegene Alternative) gehen.
Führende oder nachfolgende Zeilenumbrüche und Leerzeichen in der Ausgabe sind in Ordnung (aber hoffentlich gibt es keine übermäßige Menge).
Der Suchraum explodiert exponentiell, wenn die Zeichenfolge länger wird, aber Sie müssen nicht versuchen, Ihren Algorithmus effizienter zu gestalten (obwohl das schön wäre :)). Das ist Code-Golf, also gewinnt die kürzeste Lösung in Bytes .
Beispiel
Wenn die Eingabe Oklahoma!
(mindestens 8 Zeichen) wäre, wären dies alles gültige Ausgaben, da alle genau 8 gefüllte Gitterzellen haben und dem (überarbeiteten) Boggle-Lesemuster folgen:
Oklaho
!m
oder
!
Oamo
klh
oder
lkO
!amo
h
etc.
Antworten:
Python 342
355398Einzug bei vier Leerzeichen ist eigentlich ein Tabulatorzeichen.
AMANAPLANACANALPANAMA
:MISSISSIPPI
:Oklahoma!
:Llanfairpwllgwyngyll
ist tödlich ;)quelle
import sys
und Ersetzensys.argv[1]
mitraw_input()
.elif
zuelif not c and (not A or len(b)<len(A[-1])):
und es viel schneller läuft"Oklahoma!"
OK - Eingang ist, könnten Sie nur verwendeninput()
stattraw_input()
.