2686 - ASCII Comp

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Numim cuvânt un șir de caractere care nu conține spații și conține cel puțin o literă. Numim valoarea ASCII a unui cuvânt suma codurilor ASCII ale caracterelor care fac parte din acel cuvânt.

Se dă un șir de caractere, care conține litere mici și mari ale alfabetului englez, spații, cifre și alte simboluri. Să se afișeze pe câte un rând valoarea ASCII și cuvintele care au acea valoare, în ordinea crescătoare a valorilor ASCII. Cuvintele cu aceeași valoare a codurilor ASCII sunt afișate pe aceeași linie cu spații între ele în ordinea în care apar în șir.

Date de intrare[edit | edit source]

Programul citește de la tastatură șirul de caractere.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran pe câte un rând valoarea ASCII și cuvintele care au acea valoare separate printr-un spațiu, în ordine crescătoare a valorilor codurilor ASCII. Dacă nu există niciun cuvânt în șirul dat se va afișa NU EXISTA.

Restricţii şi precizări[edit | edit source]

  • șirul de caractere va avea maximum 255 de caractere.

Exemplu 1[edit | edit source]

Intrare
   ana   rem      abc    ad01           22222,    
Iesire
Datele de intrare corespund restrictiilor impuse
294 abc ad01
304 ana
324 rem


Exemplu 2[edit | edit source]

Intrare
Loremipsumdolorsitamet,consecteturadipiscingelit.Nullafacilisi.Vestibulumeuismodnequeeumetusrhoncus,neciaculispurussollicitudin.Quisquecondimentum,lacusidsuscipitvestibulum,odiosemegestasnunc,velaliquetpuruseratnecelit.Nullamelementumleoacorcicongue,infringillanisleuismod.Sedaliquet,elit eupellentesqueaccumsanjusitocursuslacus,idhendreritnisl. 
Iesire
Datele de intrare nu corespund restrictiilor impuse


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def main():

   # Citirea șirului de la tastatură
   sir = input().strip()
   # Verifică dacă șirul respectă restricțiile
   if len(sir) > 255:
       print("Datele de intrare nu corespund restrictiilor impuse")
       return
   # Separarea șirului în cuvinte
   cuvinte = sir.split()
   # Crearea unui dicționar pentru a stoca cuvintele și valorile lor ASCII
   valori_ascii = {}
   # Calcularea valorii ASCII pentru fiecare cuvânt și adăugarea acestuia în dicționar
   for cuvant in cuvinte:
       if any(caracter.isalpha() for caracter in cuvant):
           valoare_ascii = sum(ord(caracter) for caracter in cuvant)
           if valoare_ascii not in valori_ascii:
               valori_ascii[valoare_ascii] = []
           valori_ascii[valoare_ascii].append(cuvant)
   # Verificarea dacă există cuvinte în dicționar
   if not valori_ascii:
       print("NU EXISTA")
       return
   print("Datele de intrare corespund restrictiilor impuse")
   # Afișarea valorilor ASCII și a cuvintelor în ordine crescătoare a valorilor ASCII
   for valoare in sorted(valori_ascii):
       print(valoare, ' '.join(valori_ascii[valoare]))


if __name__ == "__main__":

   main()

</syntaxhighlight>

Explicatie[edit | edit source]

ana are valoarea 304, rem are valoarea 324, abc și ad01 au valoarea 294, iar 22222, nu este cuvânt pentru ca nu conține nicio literă; s-au afișat cuvintele în ordine crescătoare a codurilor ASCII.