Un pangram est une chaîne qui contient chaque lettre a
- z
de l'alphabet anglais, insensible à la casse. (C'est OK si le pangram contient plus d'une copie d'une lettre, ou s'il contient des caractères non-lettre en plus des lettres.)
Écrivez un programme ou une fonction dont l'entrée est une liste de chaînes et qui génère une ou plusieurs chaînes ayant les propriétés suivantes:
- Chaque chaîne de sortie doit être un pangram.
- Chaque chaîne de sortie doit être formée en concaténant une ou plusieurs chaînes de la liste d'entrée, séparées par des espaces.
- Chaque chaîne de sortie doit être la plus courte, ou liée pour la plus courte, parmi toutes les chaînes ayant ces propriétés.
De nombreux programmes choisissent de ne sortir qu'une seule chaîne; vous ne voudriez sortir plus d'une chaîne que si vous deviez autrement écrire du code supplémentaire pour limiter la sortie.
Vous pouvez supposer que l'entrée ne contient aucun caractère ou espace non imprimable et qu'aucun mot ne contient plus de (26 fois le logarithme naturel de la longueur de la liste) caractères. (Cependant, vous ne pouvez pas supposer que l'entrée ne contient que des lettres ou uniquement des lettres minuscules; les signes de ponctuation et les lettres majuscules sont tout à fait possibles.)
L'entrée et la sortie peuvent être données dans n'importe quel format raisonnable. Pour tester votre programme, je vous recommande d'utiliser deux cas de test: un dictionnaire de mots anglais (la plupart des ordinateurs en ont un), et le cas suivant (pour lequel un pangram parfait (26 lettres) est impossible, vous devrez donc en trouver un contenant des lettres en double):
abcdefghi
defghijkl
ijklmnop
lmnopqrs
opqrstuvw
rstuvwxyz
Vous devez inclure un échantillon de la sortie de votre programme avec votre soumission. (Cela peut être différent pour différentes personnes en raison de l'utilisation de listes de mots différentes.)
Condition de victoire
Il s'agit d'un défi de code-golf à complexité limitée . Le gagnant est le programme le plus court (en octets) qui s'exécute en temps polynomial . (Un résumé pour les personnes qui ne savent pas ce que cela signifie: si vous doublez la taille de la liste de mots, le programme ne devrait ralentir que d'un facteur constant. Cependant, le facteur constant en question peut être aussi grand que vous. Par exemple, il est valide pour qu'il devienne quatre fois plus lent ou huit fois plus lent, mais pas pour qu'il devienne plus petit d'un facteur de la longueur de la liste de mots; le facteur par lequel il devient plus lent doit être limité.)