Pangrams
Le rapide renard brun sauta par dessus le chien paresseux.
Ceci est un exemple de pangram - une phrase qui contient au moins une fois chaque lettre de l'alphabet.
Un pangram auto-énumérant est une phrase qui remplit les critères pour être un pangram en produisant une analyse de son propre décompte des lettres.
Un exemple pour y parvenir est la phrase
Ce pangram contient quatre As, un B, deux Cs, un D, trente Es, six Fs, cinq Gs, sept Hs, onze Is, un J, un K, deux Ls, deux Ms, dix-huit Ns, quinze Os, deux Ps , un Q, cinq R, vingt-sept S, dix-huit Ts, deux Us, sept V, huit W, deux X, trois Y et un Z.
Le défi
Produisez une fonction dont l'entrée est la chaîne menant à l'inventaire des lettres. Dans l'exemple, l'entrée serait "Ce pangram contient". La quantité de chaque lettre doit être sous forme écrite et contribuer au nombre de lettres affiché.
Règles
- La virgule d'Oxford est facultative
- Utilisez une esperluette avant Z (ou, pour le mode difficile, incluez la possibilité de basculer entre "&" et "et" dans la fonction)
- Chaque lettre compte pour le nombre total de lettres
- Pas de numéros non écrits
- C'est le code-golf donc le code le plus court en octets gagne
- Dans hono u r du couple marié ce week - end, les chiffres doivent être rédigés en anglais de la Reine. par exemple
nine hundred and ninety-nine Gs
pour 999 occurrences de la lettre G etnine hundred and nine Gs
pour 909. - Les ordres de grandeur doivent être écrits dans la convention de dénomination standard à petite échelle
Cas de bord
- Il y a des cas où le code restera bloqué dans une boucle - par exemple, s'il y a deux Os, le code augmentera le nombre à trois Os, ce qui fera que le code comptera à nouveau deux Os. Si le calcul toutes les autres lettres avant de revenir à cela ne peut pas résoudre le problème, pensez à l'entrée à un faux départ et de sortie
false
,null
ou une chaîne vide. - Si une lettre a plus de 999 occurrences, l'entrée doit être considérée comme un faux démarreur.
Cas de test
- "Ce pangram contient" devrait afficher l'exemple de phrase
o
-s sans le mot pour le décompte, alors lorsque vous l'épelez avectwo
, la chaîne entière a maintenant troiso
-s, ce qui signifie que le mot est maintenant incorrect, le changer le rend à nouveau incorrect , etc.Rob enjoys any sentence with two As, two Bs, two Cs, one D, thirty five Es, four Fs, three Gs, nine Hs, eight Is, two Js, one K, two Ls, one M, twenty two Ns, eighteen Os, one P, one Q, nine Rs, twenty three Ss, twenty three Ts, three Us, four Vs, eleven Ws, one X, seven Ys, & one Z.
Réponses:
Python 2 , 615 octets
Essayez-le en ligne!
La fonction
f
prendp
comme préfixe de chaîne; et renvoie un tuple d'un entier représentant le nombre de pas effectués et l'autogramme.La fonction
g
code un nombre1<=n<=999
dans sa chaîne anglaise; il prend 291 octets, soit environ la moitié du nombre total d'octets. Le codecode la chaîne
s
en un pangramme (potentiellement autogramme)t
.Nous passons en revue le processus, en espérant la situation où nous trouvons un
t
tel quit
est un autogramme (c'est-à-dire, oùt==s
).Silorsque nous entrons dans une boucle, nous poussons au hasard le nombre de lettres de manière complètement ad hoc.Pour la plupart des valeurs de
p
, ce processus expirera sur TIO. En règle générale, des millions de possibilités sont examinées avant de trouver une combinaison «gagnante».Je n'ai aucune preuve du tout, mais ma supposition est: (a) à part une recherche exhaustive de force brute similaire à ce que l' auteur Lee Sallows décrit ici et implémente dans le matériel (!), Ce type d'heuristique aléatoire est à peu près aussi bon que vous pouvez obtenir; et (b) il n'y aura pas de solutions pour de nombreuses phrases (la plupart?) initiales
p
.la source
map(chr,range(65,91))
enregistre quelques octets.