3915 - anagrame cv
Cerința[edit | edit source]
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 nu există două vocale alăturate și nici două consoane alăturate.
Date de intrare[edit | edit source]
Programul citește de la tastatură cuvântul s
.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran pe rânduri separate anagramele cuvântului citit în care vocalele și consoanele alternează (nu există două vocale alăturate și nici două consoane alăturate).
Restricții și precizări[edit | edit source]
- cuvântul
s
are cel mult11
caractere și este format din litere mici distincte - dacă nu există soluții, atunci se va afișa mesajul
IMPOSIBIL
.
Exemplu:[edit | edit source]
Intrare
cosmina
Ieșire
caminos camison camonis camosin canimos canisom canomis canosim casimon casinom casomin casonim cimanos cimason cimonas cimosan cinamos cinasom cinomas cinosam ... sonimac (în total 144 de anagrame)
Exemplu:[edit | edit source]
Intrare
cosmin
Ieșire
IMPOSIBIL
Exemplu:[edit | edit source]
Intrare
ana
consola
Cuvântul trebuie să aibă cel mult 11 litere mici distincte.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def sunt_alternante(cuvant):
# Verificăm dacă vocalele și consoanele alternează în cuvânt for i in range(1, len(cuvant)): if (cuvant[i-1] in 'aeiou' and cuvant[i] in 'aeiou') or (cuvant[i-1] not in 'aeiou' and cuvant[i] not in 'aeiou'): return False return True
def genereaza_anagrame_alternante(curent, ramase, rezultat):
if not ramase: if sunt_alternante(curent): rezultat.append(curent) return
for i in range(len(ramase)): genereaza_anagrame_alternante(curent + ramase[i], ramase[:i] + ramase[i+1:], rezultat)
def valideaza_cuvant(cuvant):
# Verificăm restricțiile return 1 <= len(cuvant) <= 11 and len(set(cuvant)) == len(cuvant) and cuvant.islower()
def main():
try: # Citim cuvântul de la tastatură cuvant = input("Introduceți un cuvânt: ")
# Verificăm restricțiile utilizând funcția separată if not valideaza_cuvant(cuvant): print("Cuvântul trebuie să aibă cel mult 11 litere mici distincte.") return
# Inițializăm o listă pentru a stoca anagramele rezultate anagrame = []
# Generăm anagramele cuvântului în care vocalele și consoanele alternează genereaza_anagrame_alternante(, cuvant, anagrame)
# Sortăm și afișăm anagramele sau afișăm mesajul IMPOSIBIL dacă nu există soluții if anagrame: for anagrama in sorted(anagrame): print(anagrama) else: print("IMPOSIBIL")
except Exception as e: print(f"A intervenit o eroare: {e}")
if __name__ == "__main__":
main()
</syntaxhighlight>