Dato un file di dizionario (un file di testo contenente una parola o una frase su ciascuna riga, con possibile punteggiatura ma senza numeri; le linee sono alfabetizzate), devi generare ogni combinazione di parole in cui una lettera può essere rimossa da una parola per farne un'altra; la lettera rimossa deve essere racchiusa tra parentesi.
Ad esempio, l'input
cat
cart
code
golf
ode
verify
versify
dovrebbe dare un output di
ca(r)t
(c)ode
ver(s)ify
Diversi modi per ottenere la stessa coppia devono essere visualizzati solo una volta. È possibile generare scra(p)pedo scrap(p)ed, ma non entrambi.
L'output deve essere ordinato in ordine alfabetico per la voce più lunga;
mart
mar
mat
ma
dovrebbe avere un output di
ma(r)
ma(t)
ma(r)t
mar(t)
e gli ultimi due potrebbero essere in entrambi gli ordini.
Il file del dizionario può includere lettere maiuscole, spazi, trattini o apostrofi; questi dovrebbero essere ignorati. Per esempio,
inlay
in-play
dovrebbe produrre in(p)lay. L'output dovrebbe essere nello stesso caso. È consentito uno spazio extra.
L'input può essere STDIN o da un file; è separato da newline. L'output può essere il valore di ritorno di una funzione o STDOUT (o scritto in un file se lo si desidera).
Questo è code-golf , quindi vince il codice più breve in byte.
(Questa è la mia prima sfida su PPCG - fammi sapere se ho fatto qualcosa di sbagliato e lo risolverò.)
mart mar mat ma? Sarebbemar(t) ma(r)t ma(r) ma(t)?