Scrivi un programma che accetta (tramite stdin o riga di comando) una stringa con il modulo ricorsivo
PREFIX[SUFFIXES]
dove
PREFIX
può essere una qualsiasi stringa di lettere minuscole (az), inclusa la stringa vuota, eSUFFIXES
può essere qualsiasi sequenza di stringhe con la forma ricorsivaPREFIX[SUFFIXES]
concatenata insieme, inclusa la sequenza vuota.
Genera un elenco di stringhe con lettere minuscole dall'input valutando ricorsivamente l'elenco di stringhe in ciascuno dei suffissi e aggiungendole al prefisso. Output per stdout le stringhe in questo elenco in qualsiasi ordine, una per riga (più una nuova riga finale facoltativa).
Esempio
Se l'ingresso è
cat[s[up[][]][]ch[e[r[]s[]]]a[maran[]comb[]pult[[]ing[]]]]
poi il prefisso è
cat
e ed i suffissi sonos[up[][]]
,[]
,ch[e[r[]s[]]]
, ea[maran[]comb[]pult[[]ing[]]]
. Ogni suffisso ha il proprio prefisso e suffissi a turno.L'output sarebbe di queste 9 parole in qualsiasi ordine
catsup cats cat catcher catches catamaran catacomb catapult catapulting
perché l'input codifica questo albero
e ciascuna delle 9 parole in uscita può essere formata attraversando l'albero da radice a foglia.
Appunti
Ricorda che il prefisso può essere la stringa vuota, quindi qualcosa di simile
[donut[][]cruller[]]
è un input valido il cui output sarebbe (in qualsiasi ordine)
donut cruller
dove la riga vuota è per la stringa vuota che corrisponde al secondo suffisso.
La sequenza dei suffissi può anche essere vuota, quindi il banale caso di input
[]
ha una sola riga vuota come output:
- Si può presumere che l'input produrrà solo parole di output univoche.
- ad es.
hat[s[]ter[]s[]]
sarebbe un input non valido perchéhats
è codificato due volte. - Allo stesso modo,
[[][]]
non è valido perché la stringa vuota viene codificata due volte.
- ad es.
- Si può non dare per scontato che l'ingresso è il più breve o compresso il più possibile.
- ad esempio il
'e'
nodo nell'esempio principale sopra potrebbe essere combinato con il'ch'
nodo, ma ciò non significa che l'input non sia valido. - Allo stesso modo,
[[[[[]]]]]
è valido, nonostante codifica solo la stringa vuota in modo non ottimale.
- ad esempio il
- Invece di un programma è possibile scrivere una funzione che accetta la stringa di input come argomento e stampa l'output normalmente o lo restituisce come stringa o elenco.
Vince il codice più breve in byte.