Il sistema principale è un dispositivo mnemonico per convertire i numeri in parole in modo che possano essere memorizzati più facilmente.
Si basa sul modo in cui le parole suonano foneticamente, ma per rendere le cose semplici per la sfida, ci occuperemo solo di come vengono scritte le parole. Ciò significa che ci saranno alcune conversioni errate, ma va bene.
Per convertire un numero in una parola usando il nostro sistema principale semplificato:
- Sostituisci ciascuno
0consoz. (Alcuni potrebbero esserese alcuni potrebbero esserez. Lo stesso vale sotto.)- Sostituisci ciascuno
1contodoth.- Sostituisci ciascuno
2conn.- Sostituisci ciascuno
3conm.- Sostituisci ciascuno
4conr.- Sostituisci ciascuno
5conl.- Sostituisci ciascuno
6conjoshoch.- Sostituisci ciascuno
7conkocogoq.- Sostituisci ciascuno
8confov.- Sostituisci ciascuno
9conpob.- Aggiungi le lettere
aehiouwxyovunque in qualsiasi importo per creare una vera parola inglese, se possibile .
L'unica eccezione è chehnon può essere inserito dopo unsoc.Il numero può effettivamente essere qualsiasi stringa delle cifre 0-9 (senza decimali o virgole o segni).
La parola può contenere solo le lettere minuscole az.
Esempi
Il numero 32deve essere convertito come ?m?n?, dove ?rappresenta qualsiasi stringa finita creata dalle lettere aehiouwxy(una stringa dal monoide libero se preferisci). Ci sono molti modi in cui questo potrebbe essere trasformato in una vera e propria parola inglese: mane, moon, yeoman, etc.
Il numero 05può essere convertito come ?s?l?o ?z?l?. Alcune possibilità sono easily, hasslee hazel. La parola shawlnon è consentita perché hnon può essere inserita dopo s; sarebbe erroneamente letto come 65.
Sfida
Scrivi un programma o una funzione che accetta una stringa di cifre 0-9 e trova tutte le parole in cui potrebbe essere convertito usando il sistema principale semplificato mnemonico.
Il tuo programma ha accesso a un file di testo dell'elenco di parole che definisce quali sono tutte le "vere" parole inglesi. Esiste una parola az minuscola su ciascuna riga di questo file e puoi facoltativamente supporre che abbia una nuova riga finale. Ecco un elenco di parole reali che puoi utilizzare per i test. Puoi presumere che questo file dell'elenco di parole sia chiamato f(o qualcosa di più) e si trovi in qualsiasi directory conveniente.
Per una penalità di 35 byte (aggiungi 35 al tuo punteggio) puoi presumere che l'elenco di parole sia già caricato in una variabile come un elenco di stringhe. Questo è principalmente per le lingue che non possono leggere i file, ma qualsiasi invio può trarne vantaggio.
Il programma deve generare tutte le parole nell'elenco di parole in cui è possibile convertire il numero di input. Dovrebbero essere stampati su stdout (o simili), uno per riga (con una nuova riga finale facoltativa), oppure possono essere restituiti come un elenco di stringhe se si sceglie di scrivere una funzione. L'elenco di parole non è necessariamente in ordine alfabetico e neanche l'output deve essere.
Se non ci sono parole possibili, l'output (o l'elenco) sarà vuoto. L'output è anche vuoto se viene immessa la stringa vuota.
Accetta input tramite stdin, riga di comando o come argomento stringa in una funzione. L'elenco di parole o il nome del suo file non devono far parte dell'input, ma solo la stringa di cifre.
Stai abbinando solo singole parole nell'elenco delle parole, non sequenze di parole. La parola noonsarebbe probabilmente uno dei risultati per 22, ma la sequenza di parole no oneno.
Casi test
Supponiamo che questo sia l'elenco delle parole:
stnmrljkfp
zthnmrlshqfb
asatanamaralajakafapa
aizxydwwwnhimouooraleshhhcavabe
zdnmrlshcvb
zdnmrlshchvb
sthnmrlchgvb
shthnmrlchgvb
bob
pop
bop
bopy
boppy
L'input 0123456789dovrebbe dare tutte le parole lunghe tranne zdnmrlshchvbe shthnmrlchgvb:
stnmrljkfp
zthnmrlshqfb
asatanamaralajakafapa
aizxydwwwnhimouooraleshhhcavabe
zdnmrlshcvb
sthnmrlchgvb
L'input 99dovrebbe dare:
bob
pop
bop
bopy
(Le parole in uscita possono essere in qualsiasi ordine.)
punteggio
Vince l' invio più breve in byte . Tiebreaker va alla presentazione pubblicata per prima.
Nifty sito correlato: numzi.com .