Angenommen, Sie haben eine Liste mit Wörtern und möchten Buchstabenkarten verwenden, um jedes Wort zu buchstabieren. Um beispielsweise Katze zu buchstabieren , würden Sie drei Karten mit den Bezeichnungen C, A und T verwenden.
Angenommen, jede Karte ist doppelseitig , senden Sie ein Programm, um eine Mindestanzahl von Karten zu definieren, die zum Buchstabieren der gesamten Wortliste verwendet werden können.
Die Eingabe ist die Wortliste. Sie kann dateibasiert, fest codiert und über die Befehlszeile erfolgen. Die Ausgabe ist die Liste der Karten, die nach Belieben formatiert und sortiert ist, sofern klar ist, wie die Karten beschriftet sind.
Fall ist nicht wichtig: Golf, Golf und Golf sind gleichwertig.
Einige Hinweise:
- Die Anzahl der Karten darf nicht kleiner sein als die Länge des längsten Wortes
- Es macht keinen Sinn, dass eine Karte auf beiden Seiten den gleichen Buchstaben hat
- Während der Groß- / Kleinschreibung keine Bedeutung zukommt, empfehlen wir die Kleinschreibung, um bestimmte Symmetrien zu nutzen
Beispiele, die bestimmte Symmetrien ausnutzen :
Eingabe: Ben, Moor, Bug, Den, Do, Doe, Hund, Due, gegraben, Ed, Ende, Gob, Gott, Ned, Ode, Stift, Poe, Mops
Ausgabe: b / d, e / g, o / n
Eingabe: ein, und, Affe, sind, sein, Bett, Knospe, Bur, Dan, Deb, Dub, Ohr, Ed, Ära, Nickerchen, Pfanne, Erbse, Pub, Rae, lief, reiben
Ausgabe: a / b, d / r, e / n
Damit es ein Beliebtheitswettbewerb wird, sind Eleganz des Codes, Laufzeitleistung und Klugheit (einschließlich Regelbiegung und Lücken) wichtig!
Ergänzung : Einige haben nach "erlaubten" Symmetrien gefragt, ob spezielle Schriften verwendet werden können und ob die Karten gefaltet werden können.
Zulässige Symmetrien sind alle Buchstaben, die nach einer Drehung um 0, 90, 180 oder 270 Grad ähnlich aussehen. Dies schließt b / q, d / p und n / u ein. Ich würde auch M / W, Z / N und natürlich I / l (Großbuchstabe i, Kleinbuchstabe L) sagen. Ich kratzte wahrscheinlich an der Oberfläche. Wenn Sie sich also nicht sicher sind, fragen Sie einfach.
Um es einfach zu halten, beschränken Sie sich bitte auf eine serifenlose Standardschrift, wie sie in SE verwendet wird.
Was das Folding angeht, so können Sie einige erstaunliche Substitutionen durchführen, z. B. kann B D, E, F, I, P oder R sein, und vielleicht C oder L, wenn Sie wirklich kreativ folden, denke ich, dass dies buchstäblich zu viel ist !
Ich bin auf dieses Problem gekommen, als ich mit meinen Kindern mit ähnlichen Karten gespielt habe. Ich bemerkte, wie einfach es war, einseitige Karten zu entwickeln, und wie schwierig es war, doppelseitige Karten zu entwickeln.
Zusatz : Habe ein Kopfgeld zur Verfügung gestellt, um die beliebteste Antwort zu erhalten. Wenn es ein Unentschieden gibt, wird derjenige ausgezeichnet, der zuerst eingereicht hat.
Noch ein Hinweis:
- Wenn Sie das einseitige Problem lösen, erhalten Sie eine Vorstellung von der Mindestanzahl der benötigten Karten (z. B. werden 20 einseitige Karten in mindestens 10 doppelseitige Karten übersetzt).
Ergänzung : Ach ja, ich war beschäftigt und habe vergessen, dass das Kopfgeld abläuft. Es endete damit, dass niemand eine Antwort erhielt, bevor die Prämie begann! Das tut mir leid.
n/u
,d/p
? Was ist mitb/q
undm/w
? Und was ist, wenn ich eineP
Karte in zwei Teile falte, damit die obere Hälfte entstehtD
?Antworten:
CardChooser
Zusammenfassung
Diese Anwendung verwendet eine Brute-Force-Methode, um zu versuchen, jede Liste zu lösen. Zuerst erstelle ich eine Liste potenzieller Karten zur Auswahl, dann bestimme ich, welche am besten passt (entfernt die meisten Zeichen + verkürzt lange Wörter), füge diese zu einer Ergebnisliste hinzu und fahre mit diesem Vorgang fort, bis ich genügend potenzielle Karten ausgewählt habe Um jedes Wort in der Liste zu entfernen, ordne ich diese Karten jedem Wort neu zu und drucke die Ausgabe.
Wenn Sie eine eingeschränkte Version dieses Codes sehen möchten, ohne die bereitgestellte Windows Forms-Anwendung herunterzuladen und zu erstellen, können Sie den bereitgestellten Link verwenden, um mein Programm auf kleineren Datensätzen auszuführen. Beachten Sie, dass dies die Konsolenanwendungsversion ist Karten werden NICHT gedreht: http://ideone.com/fork/VD1gJF
Änderungshistorie
Aktuell - Bessere Ergebnisoptimierung von @Zgarb hinzugefügt
Update 3 - Mehr Code bereinigen, mehr Bugs behoben, bessere Ergebnisse
Update 2 - Windows Forms, ausführlichere Ausgabe
Update 1 - Neue / bessere Unterstützung für Zeichensymmetrien
Original - Konsolenanwendung
Beispiele
acr, achtern, ain, sll, win, say, said, fast, epic
hes, wird, mit, würde, würde, würde, noch nicht, Sie, Sie würden, youll
aaaa, bbbb, cccc
Code
Ich muss dies immer noch zu einem größeren Projekt zusammenfassen, wobei der ConsoleApp- und der WindowsForms-Code dieselben Klassen und Methoden verwenden, und dann die verschiedenen Bereiche in der RunButton_Click-Methode aufteilen, damit ich ohnehin Einheiten um sie herum schreiben kann, wenn ich Zeit dazu finde Das werde ich, denn jetzt habe ich:
quelle
i
Karte?said
's letzter Brief ist nicht W oder P