#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Fri Dec 21 10:25:58 2018 @author: andrea """ def es2(parola): ''' Es 2: 5 punti Si definisca la funzione ricorsiva (o che usa una vostra funzione ricorsiva) es2(parola), che presa in input una stringa di caratteri parola restituisce la lista delle diverse "sottoparole crescenti" di parola. Le sottoparole devono comparire nella lista in ordine lessicografico. Si ricorda che una sottoparola e' quello che si ottiene da una parola concellandone 0 o piu' caratteri (in testa, in coda o nel mezzo). Inoltre una sottoparola si dice crescente se i caratteri che la compongono letti da sinistra a destra risultano ordinati lessicograficamente. Ad esempio la lista restituita da es2('zanzara') sara' ['a', 'aa', 'aaa', 'aar', 'an', 'anr', 'anz', 'ar', 'az', 'n', 'nr', 'nz', 'r', 'z', 'zz'] ''' # inserisci qui il tuo codice class Nodo: def __init__(self, parola): self.parola = parola self.figli = [] if len(parola) > 1: for i in range(len(parola)): self.figli.append(Nodo(parola[:i]+parola[i+1:])) def raccogli(self): risultato = set() if all([ self.parola[i]<=self.parola[i+1] for i in range(len(self.parola)-1) ]): risultato.add(self.parola) for son in self.figli: risultato = risultato.union( son.raccogli() ) return risultato def es2(parola): return sorted(Nodo(parola).raccogli()) if __name__ == '__main__': print(es2('zanzara'))