Le système principal est un dispositif mnémonique pour convertir des nombres en mots afin qu'ils puissent être mémorisés plus facilement.
Il est basé sur la façon dont les mots sonnent phonétiquement, mais pour garder les choses simples pour le défi, nous ne nous intéresserons qu'à la façon dont les mots sont orthographiés. Cela signifie qu'il y aura des conversions incorrectes, mais ça va.
Pour convertir un nombre en un mot à l'aide de notre système principal simplifié:
- Remplacez chacun
0
pars
ouz
. (Certains pourraient l'êtres
et d'autres pourraient l'êtrez
. Il en va de même ci-dessous.)- Remplacez chacun
1
part
oud
outh
.- Remplacez chacun
2
parn
.- Remplacez chacun
3
parm
.- Remplacez chacun
4
parr
.- Remplacez chacun
5
parl
.- Remplacez chacun
6
parj
oush
ouch
.- Remplacez chacun
7
park
ouc
oug
ouq
.- Remplacez chacun
8
parf
ouv
.- Remplacez chacun
9
parp
oub
.- Ajoutez les lettres
aehiouwxy
n'importe où dans n'importe quel montant pour faire un vrai mot anglais, si possible .
La seule exception est qu'elleh
ne peut pas être insérée après uns
ouc
.Le nombre peut en fait être n'importe quelle chaîne des chiffres 0-9 (pas de décimales, ni virgules ni signes).
Le mot ne peut contenir que les lettres minuscules az.
Exemples
Le nombre 32
doit être converti comme ?m?n?
, où ?
représente toute chaîne finie faite à partir des lettres aehiouwxy
(une chaîne du monoïde libre si vous préférez). Il y a plusieurs façons cela pourrait être transformé en un vrai mot anglais: mane
, moon
, yeoman
, etc.
Le nombre 05
peut être converti en ?s?l?
ou ?z?l?
. Certaines possibilités sont easily
, hassle
et hazel
. Le mot shawl
n'est pas autorisé car h
il ne peut pas être placé après s
; il serait incorrectement lu comme 65
.
Défi
Écrivez un programme ou une fonction qui prend une chaîne de chiffres 0 à 9 et trouve tous les mots dans lesquels il pourrait être converti en utilisant la mnémonique simplifiée du système principal.
Votre programme a accès à un fichier texte de liste de mots qui définit ce que sont tous les "vrais" mots anglais. Il y a un mot az en minuscules sur chaque ligne de ce fichier, et vous pouvez éventuellement supposer qu'il a une nouvelle ligne de fin. Voici une liste de vrais mots que vous pouvez utiliser pour les tests. Vous pouvez supposer que ce fichier de liste de mots est appelé f
(ou quelque chose de plus long) et se trouve dans n'importe quel répertoire pratique.
Pour une pénalité de 35 octets (ajoutez 35 à votre score), vous pouvez supposer que la liste de mots est déjà chargée dans une variable en tant que liste de chaînes. C'est principalement pour les langues qui ne peuvent pas lire les fichiers, mais toute soumission peut en profiter.
Votre programme doit sortir tous les mots de la liste de mots dans lesquels le numéro d'entrée peut être converti. Ils doivent être imprimés sur stdout (ou similaire), un par ligne (avec un retour à la ligne facultatif), ou ils peuvent être renvoyés sous forme de liste de chaînes si vous choisissez d'écrire une fonction. La liste de mots n'est pas nécessairement alphabétique et la sortie n'a pas besoin d'être non plus.
S'il n'y a pas de mots possibles, la sortie (ou la liste) sera vide. La sortie est également vide si la chaîne vide est entrée.
Prenez l'entrée via stdin, la ligne de commande ou comme argument de chaîne pour une fonction. La liste de mots ou son nom de fichier ne doit pas faire partie de l'entrée, uniquement la chaîne de chiffres.
Vous ne faites correspondre que des mots simples dans la liste de mots, pas des séquences de mots. Le mot noon
serait probablement l'un des résultats pour 22
, mais pas la séquence de mots no one
.
Cas de test
Supposons que ce soit la liste de mots:
stnmrljkfp
zthnmrlshqfb
asatanamaralajakafapa
aizxydwwwnhimouooraleshhhcavabe
zdnmrlshcvb
zdnmrlshchvb
sthnmrlchgvb
shthnmrlchgvb
bob
pop
bop
bopy
boppy
L'entrée 0123456789
doit donner tous les mots longs sauf zdnmrlshchvb
et shthnmrlchgvb
:
stnmrljkfp
zthnmrlshqfb
asatanamaralajakafapa
aizxydwwwnhimouooraleshhhcavabe
zdnmrlshcvb
sthnmrlchgvb
L'entrée 99
doit donner:
bob
pop
bop
bopy
(Les mots de sortie peuvent être dans n'importe quel ordre.)
Notation
La soumission la plus courte en octets l' emporte. Tiebreaker passe à la soumission publiée en premier.
Site lié à Nifty: numzi.com .