1868 - Prosirx

De la Universitas MediaWiki

Cerinţa

Se consideră un text format din cel mult 200 de caractere litere mici și spații. Cuvintele din text sunt separate prin unul sau mai multe spații. Scrieti un program care citește textul și care:

a) determină numărul de consoane din textul citit;

b) înlocuiește prima literă a fiecărui cuvânt din textul citit cu litera X (mare);

c) modifică textul citit prin aranjarea în ordine lexicografică a tuturor cuvintelor din text și separarea lor prin câte un singur spațiu.

Date de intrare

Fișierul de intrare prosirxin.txt conține pe prima linie textul.

Date de ieșire

Fișierul de ieșire prosirxout.txt va conține:

- pe prima linie răspunsul la cerința a)

- pe a doua linie răspunsul la cerința b)

- pe a treia linie răspunsul la cerința c)

Restricţii şi precizări

  • textul este format din cel mult 200 de caractere, doar litere mici sau spații

Exemplu 1

prosirxin.txt
oana   este    la scoala 
prosirxout.txt
Datele de intrare corespund restrictiilor impuse
7 
Xana   Xste    Xa Xcoala 
este la oana scoala 


Exemplu 2

prosirxin.txt
oana   este    la scoala999
prosirxout.txt
Datele de intrare nu corespund restrictiilor impuse


Explicație

Sunt 7 consoane în textul citit.

Rezolvare

def analyze_text(text):
    # Analizează textul și returnează numărul de consoane,
    # textul cu prima literă a fiecărui cuvânt înlocuită cu 'X'
    # și textul cu cuvintele aranjate în ordine lexicografică
    consoane = 'bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ'
    vocale = 'aeiouAEIOU'
    nr_consoane = sum(c in consoane for c in text)
    cuvinte = text.split()
    cuvinte_x = ['X' + cuvant[1:] if cuvant[0] in vocale else cuvant for cuvant in cuvinte]
    cuvinte_sortate = sorted(cuvinte)
    return nr_consoane, ' '.join(cuvinte_x), ' '.join(cuvinte_sortate)


def main():
    with open('prosirxin.txt', 'r') as fin, open('prosirxout.txt', 'w') as fout:
        text = fin.readline().strip()

        # Verifică dacă textul respectă restricțiile
        if len(text) > 200 or not all(c.isalpha() or c.isspace() for c in text):
            fout.write("Datele de intrare nu corespund restrictiilor impuse\n")
            return

        fout.write("Datele de intrare corespund restrictiilor impuse\n")

        # Analizează textul și scrie rezultatele în fișierul de ieșire
        nr_consoane, text_x, text_sortat = analyze_text(text)
        fout.write(str(nr_consoane) + '\n')
        fout.write(text_x + '\n')
        fout.write(text_sortat + '\n')


if __name__ == "__main__":
    main()