Un pangramma è una stringa che contiene ogni lettera a
- z
della alfabeto inglese, maiuscole e minuscole. (Va bene se il pangram contiene più di una copia di una lettera o se contiene caratteri non di lettere oltre alle lettere.)
Scrivi un programma o una funzione il cui input è un elenco di stringhe e che genera una o più stringhe con le seguenti proprietà:
- Ogni stringa di output deve essere un pangram.
- Ogni stringa di output deve essere formata concatenando una o più stringhe dall'elenco di input, separate da spazi.
- Ogni stringa di output deve essere la più breve o legata per la più breve, tra tutte le stringhe con queste proprietà.
Molti programmi sceglieranno di produrre solo una stringa; dovresti produrre più di una stringa se altrimenti dovessi scrivere un codice extra per limitare l'output.
Si può presumere che l'input non contenga caratteri o spazi non stampabili e che nessuna parola contenga più di (26 volte il logaritmo naturale della lunghezza dell'elenco) caratteri. (Non puoi supporre, tuttavia, che l'input contenga solo lettere o solo lettere minuscole; i segni di punteggiatura e le lettere maiuscole sono del tutto possibili.)
Input e output possono essere forniti in qualsiasi formato ragionevole. Per testare il tuo programma, ti consiglio di usare due casi di test: un dizionario di parole inglesi (la maggior parte dei computer ne ha uno) e il seguente caso (per il quale un pangram perfetto (26 lettere) è impossibile, quindi dovresti trovarne uno contenente lettere duplicate):
abcdefghi
defghijkl
ijklmnop
lmnopqrs
opqrstuvw
rstuvwxyz
Dovresti includere un campione dell'output del tuo programma insieme al tuo invio. (Questo potrebbe essere diverso per persone diverse a causa dell'uso di elenchi di parole diverse.)
Condizione di vittoria
Questa è una sfida di golf di codice a complessità limitata . Il vincitore è il programma più breve (in byte) che viene eseguito in tempo polinomiale . (Un riepilogo per le persone che non sanno cosa significhi: se si raddoppia la dimensione dell'elenco di parole, il programma dovrebbe diventare più lento di non più di un fattore costante. Tuttavia, il fattore costante in questione può essere grande quanto te Ad esempio, è valido per diventare quattro volte più lento, o otto volte più lento, ma non per ridurlo di un fattore della lunghezza dell'elenco di parole; il fattore attraverso il quale diventa più lento deve essere limitato.)