Ich habe ein Kombinationsschloss mit Buchstaben anstelle von Zahlen. Es sieht so aus: http://pictures.picpedia.com/2012/09/Word_Combination_Padlock.jpg Es gibt 5 Walzen mit jeweils 10 verschiedenen Buchstaben.
Die meisten Leute verwenden lieber ein Wort für ihre Kombination als eine willkürliche Folge von Buchstaben. (Natürlich weniger sicher, aber leichter zu merken.) Bei der Herstellung des Schlosses ist es daher ratsam, eine Buchstabenkombination zu erstellen, mit der so viele englische Wörter wie möglich aus 5 Buchstaben erstellt werden können.
Ihre Aufgabe ist es, eine Zuordnung von Buchstaben zu Rollen zu finden, mit der so viele Wörter wie möglich erstellt werden können. Zum Beispiel könnte Ihre Lösung sein
ABCDEFGHIJ DEFGHIJKLM ZYXWVUTSR ABCDEFGHIJ ABCDEFGHIJ
(Wenn Sie sich nicht zu einfallsreich fühlten, ist das).
Verwenden Sie aus Gründen der Konsistenz die Wortliste unter http://www.cs.duke.edu/~ola/ap/linuxwords
Jedes 5-Buchstaben-Wort in dieser Liste ist in Ordnung, einschließlich Eigennamen. Ignorieren Sie Sino- und L'vov sowie alle anderen Wörter in der Liste, die ein Nicht-Az-Zeichen enthalten.
Das Gewinnerprogramm ist dasjenige, das die größte Menge an Wörtern produziert. Für den Fall, dass mehrere Programme dasselbe Ergebnis erzielen, gewinnt das erste Programm, das veröffentlicht wird. Das Programm sollte in weniger als 5 Minuten ausgeführt werden.
Edit: da die Aktivität nachgelassen hat und keine besseren Lösungen herausgekommen sind, erkläre ich Peter Taylor zum Gewinner! Vielen Dank an alle für Ihre einfallsreichen Lösungen.
quelle
Antworten:
1275 Wörter durch einfaches gieriges Bergsteigen
Code ist C #. Lösung hergestellt wird
Ich verwende dieses Ausgabeformat, weil es sehr einfach zu testen ist:
quelle
Main
Methode, um verschiedene_Main
Methoden aufzurufen .Python (3), 1273 ≈ 30,5%
Dies ist ein wirklich naiver Ansatz: Halten Sie die Häufigkeit jedes Buchstabens an jeder Position fest und eliminieren Sie dann den "schlechtesten" Buchstaben, bis die verbleibenden Buchstaben auf die Rollen passen. Ich bin überrascht, dass es so gut zu laufen scheint.
Am interessantesten ist, dass ich fast genau die gleiche Ausgabe wie die C # 1275-Lösung habe, außer dass ich eine
N
auf meiner letzten Rolle anstelle von habeA
. DasA
war auch meine elfte bis letzte Eliminierung, noch bevor ich aV
und a weggeworfen habeG
.Produziert:
quelle
Mathematica , immer wieder 1275 Wörter ...
Dieser Code ist nicht Golf, da die Frage nicht dazu aufruft.
Die Wortanzahl entwickelt sich bei den meisten Läufen schnell (weniger als 10 Sekunden) auf 1275, wird aber nie darüber hinausgehen. Ich habe versucht, die Buchstaben mehr als einmal nacheinander durcheinander zu bringen, um aus einem theoretischen lokalen Maximum herauszukommen, aber es hat nie geholfen. Ich vermute sehr, dass 1275 das Limit für die angegebene Wortliste ist. Hier ist ein vollständiger Lauf:
Hier sind einige andere "gewinnende" Auswahlen:
Wie Peter bemerkt, handelt es sich tatsächlich um die gleiche Lösung in unterschiedlichen Reihenfolgen. Sortiert:
quelle
shortlist
fühlt sich lang an, und obwohl dies nicht Golf ist, möchte ich etwas kürzer. Kannst du helfen?Python, 1210 Wörter (~ 29%)
Vorausgesetzt, ich habe die Wörter dieses Mal richtig gezählt, ist dies etwas besser als die Lösung von FakeRainBrigand. Der einzige Unterschied besteht darin, dass ich jede Rolle der Reihe nach hinzufüge und dann alle Wörter aus der Liste entferne, die nicht mit der Rolle übereinstimmen, damit ich eine etwas bessere Verteilung für die nächsten Rollen erhalte. Aus diesem Grund gibt es genau die gleiche erste Rolle.
Das Programm gibt aus
quelle
iPython (
273210 Bytes, 1115 Wörter)1115/4176 * ~ 27%
Ich habe diese in iPython berechnet, aber mein Verlauf (um das Debuggen zu entfernen) sah folgendermaßen aus.
Wenn wir für kurze Zeit gehen; Ich könnte es darauf zuschneiden.
Verkürzt:
Meine Ergebnisse waren:
['sbcapfdtmg', 'aoeirulhnt', 'aironeluts', 'etnlriaosc', 'seyrdtnlah']
.* Meine Mathematik für das 4176 ist möglicherweise etwas kurz, da Wörter mit Bindestrichen oder Apostrophen weggelassen werden
quelle
Q.
? (todo) Wörter
Wörter sollten in einer Datei namens gespeichert werden
words
Läuft in ca. 170 ms auf meinem i7. Es analysiert die Wortliste und sucht an jeder Position nach dem häufigsten Buchstaben (wobei offensichtlich alle Nicht-Kandidaten herausgefiltert werden). Es ist eine faule, naive Lösung, die aber mit minimalem Code ein einigermaßen gutes Ergebnis liefert.
Ergebnisse:
quelle
Bearbeiten: Nachdem die Regeln geändert wurden, wird dieser Ansatz disqualifiziert. Ich werde es hier lassen, falls jemand Interesse hat, bis ich irgendwann dazu komme, es für die neuen Regeln zu modifizieren.
Python: 277 Zeichen
Ich bin mir ziemlich sicher, dass es sich bei der verallgemeinerten Version dieses Problems um NP-Hard handelt und für die Frage nicht die schnellste Lösung gesucht werden musste.
Beachten Sie, dass ich die Wortlistendatei in "w" umbenannt habe, um einige Zeichen zu speichern.
Die Ausgabe ist die Anzahl der Wörter, die von einer bestimmten Konfiguration aus möglich sind, gefolgt von der Konfiguration selbst:
Die letzte Ausgabezeile vor dem Beenden des Programms ist garantiert die optimale Lösung.
quelle