Das Hauptsystem ist eine mnemonic Vorrichtung zur Umwandlung von Zahlen in Worte zu fassen , so dass sie leichter gespeichert werden.
Es basiert darauf, wie Wörter phonetisch klingen, aber um die Dinge für die Herausforderung einfach zu halten, werden wir uns nur damit befassen, wie Wörter geschrieben werden. Dies bedeutet, dass es einige falsche Conversions geben wird, aber das ist in Ordnung.
So konvertieren Sie eine Zahl mit unserem vereinfachten Hauptsystem in ein Wort:
- Ersetzen Sie jedes
0durchsoderz. (Manche könntensund manche könnten seinz. Dasselbe gilt weiter unten.)- Ersetzen Sie jedes
1durchtoderdoderth.- Ersetzen Sie jeweils
2durchn.- Ersetzen Sie jeweils
3durchm.- Ersetzen Sie jeweils
4durchr.- Ersetzen Sie jeweils
5durchl.- Ersetzen Sie jedes
6durchjodershoderch.- Ersetzen Sie jedes
7durchkodercodergoderq.- Ersetzen Sie jedes
8durchfoderv.- Ersetzen Sie jedes
9durchpoderb.- Fügen Sie die Buchstaben
aehiouwxyan beliebiger Stelle hinzu, um nach Möglichkeit ein echtes englisches Wort zu erhalten .
Die einzige Ausnahme ist, dasshnicht nach einemsoder eingefügt werden darfc.Die Zahl kann tatsächlich eine beliebige Folge der Ziffern 0-9 sein (keine Dezimalstellen, Kommas oder Zeichen).
Das Wort darf nur die Kleinbuchstaben az enthalten.
Beispiele
Die Zahl 32muss wie folgt konvertiert werden ?m?n?: Dabei handelt es sich ?um eine beliebige endliche Zeichenfolge aus den Buchstaben aehiouwxy(eine Zeichenfolge aus dem freien Monoid, wenn Sie dies vorziehen). Es gibt viele Möglichkeiten , dies zu einem echten englischen Wort gemacht werden könnte: mane, moon, yeomanetc.
Die Nummer 05könnte als ?s?l?oder konvertiert werden ?z?l?. Einige Möglichkeiten sind easily, hassleund hazel. Das Wort shawlist nicht erlaubt, da es hmöglicherweise nicht nachgestellt wird s. es würde falsch als gelesen 65.
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die eine Zeichenfolge mit den Ziffern 0-9 enthält und alle Wörter findet, in die es mithilfe der vereinfachten Hauptsystem-Mnemonik konvertiert werden könnte.
Ihr Programm hat Zugriff auf eine Wortlistentextdatei, die definiert, was alle "echten" englischen Wörter sind. In jeder Zeile dieser Datei befindet sich ein z-Wort in Kleinbuchstaben, und Sie können optional davon ausgehen, dass es eine nachgestellte neue Zeile enthält. Hier ist eine Liste von echten Wörtern, die Sie zum Testen verwenden können. Sie können davon ausgehen, dass diese Wortlistendatei aufgerufen wird f(oder etwas länger ist) und sich in einem beliebigen Verzeichnis befindet.
Für eine 35-Byte-Strafe (addiere 35 zu deiner Punktzahl) kannst du annehmen, dass die Wortliste bereits als eine Liste von Zeichenfolgen in eine Variable geladen ist. Dies gilt hauptsächlich für Sprachen, die keine Dateien lesen können.
Ihr Programm muss alle Wörter in der Wortliste ausgeben, in die die eingegebene Nummer konvertiert werden kann. Sie sollten auf stdout (oder ähnlich) gedruckt werden, eine pro Zeile (mit einem optionalen abschließenden Zeilenumbruch), oder sie können als Liste von Zeichenfolgen zurückgegeben werden, wenn Sie eine Funktion schreiben möchten. Die Wortliste muss nicht unbedingt alphabetisch sein und die Ausgabe muss auch nicht so sein.
Wenn es keine möglichen Wörter gibt, ist die Ausgabe (oder die Liste) leer. Die Ausgabe ist auch leer, wenn die leere Zeichenfolge eingegeben wird.
Übernehmen Sie die Eingabe über stdin, die Befehlszeile oder als Zeichenfolgenargument für eine Funktion. Die Wortliste oder ihr Dateiname sollte nicht Teil der Eingabe sein, sondern nur die Ziffernfolge.
Sie stimmen nur mit einzelnen Wörtern in der Wortliste überein, nicht mit Wortfolgen. Das Wort noonwäre wahrscheinlich eines der Ergebnisse für 22, aber die Wortfolge no onewürde es nicht.
Testfälle
Angenommen, dies ist die Wortliste:
stnmrljkfp
zthnmrlshqfb
asatanamaralajakafapa
aizxydwwwnhimouooraleshhhcavabe
zdnmrlshcvb
zdnmrlshchvb
sthnmrlchgvb
shthnmrlchgvb
bob
pop
bop
bopy
boppy
Die Eingabe 0123456789sollte alle langen Wörter außer zdnmrlshchvbund enthalten shthnmrlchgvb:
stnmrljkfp
zthnmrlshqfb
asatanamaralajakafapa
aizxydwwwnhimouooraleshhhcavabe
zdnmrlshcvb
sthnmrlchgvb
Die Eingabe 99sollte geben:
bob
pop
bop
bopy
(Die Ausgabewörter können in beliebiger Reihenfolge sein.)
Wertung
Die kürzeste Übermittlung in Bytes gewinnt. Tiebreaker geht zu dem Beitrag, der zuerst veröffentlicht wurde.
Nifty verwandte Seite: numzi.com .