3154 - anagrame pfv
Cerința
Se citește de la tastatură un cuvânt s
format din cel mult 11
litere mici distincte. Să se genereze în ordine alfabetică și să se afișeze toate anagramele cuvântului s
în care vocalele sunt puncte fixe.
Date de intrare
Programul citește de la tastatură cuvântul s
.
Date de ieșire
Programul va afișa pe ecran pe rânduri separate anagramele cuvântului citit în care vocalele rămân pe pozițiile inițiale.
Restricții și precizări
- cuvântul
s
are cel mult11
caractere și este format din litere mici distincte
Exemplul 1
Intrare
dorel
Ieșire
doler dorel loder lored rodel roled
Explicație
Anagramele sunt afișate în ordine lexicografică, iar literele o
și e
rămân pe pozițiile inițiale.
Exemplul 2
Intrare
guadalahara
consola
Cuvântul trebuie să aibă cel mult 11 litere distincte.
Rezultat
<syntaxhighlight lang="python3" line="1"> from itertools import permutations
def este_vocala(caracter):
return caracter in "aeiou"
def valideaza_cuvant(cuvant):
return len(cuvant) <= 11 and len(set(cuvant)) == len(cuvant)
def genereaza_anagrame(cuvant):
vocale = [caracter for caracter in cuvant if este_vocala(caracter)] consoane = [caracter for caracter in cuvant if not este_vocala(caracter)]
vocale_unice = set(vocale) pozitii_vocale = {vocala: [i for i, caracter in enumerate(cuvant) if caracter == vocala] for vocala in vocale_unice}
anagrame = set()
for consoane_permutate in set(permutations(consoane)): anagrama_curenta = list(consoane_permutate)
for vocala in vocale_unice: for pozitie in pozitii_vocale[vocala]: anagrama_curenta.insert(pozitie, vocala)
anagrame.add("".join(anagrama_curenta))
return sorted(anagrame)
def main():
cuvant = input("Introduceți cuvântul s: ").lower()
if valideaza_cuvant(cuvant): anagrame = genereaza_anagrame(cuvant)
for anagrama in anagrame: print(anagrama)
else: print("Cuvântul trebuie să aibă cel mult 11 litere distincte.")
if __name__ == "__main__":
main()
</syntaxhighlight>