2681 - Invers Max: Difference between revisions

From Bitnami MediaWiki
No edit summary
 
(3 intermediate revisions by the same user not shown)
Line 18: Line 18:
== Exemplu 2 ==
== Exemplu 2 ==
; Intrare
; Intrare
: 14567898765 esdrtyfugihk esdfghuikjnbvcvbhjhg  x3456789098765434567&&&&&&&&&&&&%%%%%%%%%%%%% %%^%%%/############@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ fds vcxssdcv  @@@@@@@@@@@@@v rdedf @@%$dvbgfrdcvc%^&&&&&&&&&&&&&&&&&&& 212345678987654323456787654345678765434567865432345cvb  
: 14567898765 esdrtyfugihk esdfghuikjnbvcvbhjhg  x3456789098765434567&&&&&&&&&&&&%%%%%%%%%%%%% %%^%%%/############@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ fds vcxssdcv  @@@@@@@@@@@@@v rdedf @@%$dvbgfrdcvc%^&&&&&&&&&&&&&&&&&&& 212345678987654323456787654345678765434567865432345cvb 67865432345  6543456  765434567654323456765432  34567u8iuygfcvb njkjhgfvcxsdrfthnbvcxdrtyhbvf gfghjkhbvcxc vdchdvfvf f
67865432345  6543456  765434567654323456765432  34567u8iuygfcvb njkjhgfvcxsdrfthnbvcxdrtyhbvf gfghjkhbvcxc vdchdvfvf f
; Ieșire
; Ieșire
: Datele de intrare nu corespund restricțiilor impuse.
: Datele de intrare nu corespund restricțiilor impuse.
Line 25: Line 24:


== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line="1">
# 2681 InversMax
 
def validare(cuvinte):          # functia de verificare a datelor de intrare
    if len(cuvinte) > 255:
        raise ValueError
    # daca datele de intrare nu corespund, ridicam eroarea ValueError
    print("Datele de intrare corespund restrictiilor impuse")
    return True
 
 
def inversmax(cuvinte):        # functia de rezolvare
    cuvinte = cuvinte.split()  # impartim propozitia intr o lista de cuvinte
    maxim = -1                  # aflam lungimea maxima
 
    for cuvant in cuvinte:
        contine_litera = False
        for litera in cuvant:
            if ('a' <= litera <= 'z') or ('A' <= litera <= 'Z'):
                contine_litera = True
                break
        # pentru a fi cuvant, trebuie sa contina litera, daca lungimea e si mai mare ca maximul, updatam maximul
        if contine_litera is True and maxim < len(cuvant):
            maxim = len(cuvant)
 
    for cuvant in cuvinte:
        contine_litera = False
        for litera in cuvant:
            if ('a' <= litera <= 'z') or ('A' <= litera <= 'Z'):
                contine_litera = True
                break
        # daca e cuvant si de lungime maxima, il afisam invers
        if contine_litera is True and maxim == len(cuvant):
            print(cuvant[::-1], end=" ")
        else:  # altfel afisam asa cum e
            print(cuvant, end=" ")
 
 
if __name__ == '__main__':
 
    # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam
    try:
        text = input(f"Introduceti textul ")        # citirea textului
        validare(text)                              # apelul functiei de validare
        inversmax(text)                            # apelul functiei de rezolvare
 
    except ValueError:
        print("Datele de intrare nu corespund restrictiilor impuse")
    except IndexError:
        print("Datele de intrare nu corespund restrictiilor impuse")
       
</syntaxhighlight>

Latest revision as of 19:49, 2 May 2023

Cerința[edit | edit source]

Se citește un șir de caractere reprezentând o propoziție care conține litere mari și mici ale alfabetului englez, spații, cifre și alte simboluri. În cele ce urmează, considerăm cuvânt orice secvență delimitată de spații ce conține cel puțin o literă.

Se se afișeze șirul citit astfel încât cuvintele de lungime maximă să fie înlocuite cu inversul (oglinditul) lor, restul cuvintelor și aranjarea lor în propoziție să rămână neschimbate.

Date de intrare[edit | edit source]

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

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: " Datele de intrare corespund restrictiilor impuse", apoi pe un rand nou va afișa șirul transformat în conformitate cu cerința. În caz contrar, se va afișa mesajul:" Datele de intrare nu corespund restrictiilor impuse".

Restricții și precizări[edit | edit source]

șirul dat va conține maximum 255 de caractere

Exemplu 1[edit | edit source]

Intrare
Mara 23a4 1234 %&a* %&*( are mere
Ieșire
Datele introduse corespund restricțiilor impuse.
araM 4a32 1234 *a&% %&*( are erem


Exemplu 2[edit | edit source]

Intrare
14567898765 esdrtyfugihk esdfghuikjnbvcvbhjhg x3456789098765434567&&&&&&&&&&&&%%%%%%%%%%%%% %%^%%%/############@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ fds vcxssdcv @@@@@@@@@@@@@v rdedf @@%$dvbgfrdcvc%^&&&&&&&&&&&&&&&&&&& 212345678987654323456787654345678765434567865432345cvb 67865432345 6543456 765434567654323456765432 34567u8iuygfcvb njkjhgfvcxsdrfthnbvcxdrtyhbvf gfghjkhbvcxc vdchdvfvf f
Ieșire
Datele de intrare nu corespund restricțiilor impuse.


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1">

  1. 2681 InversMax

def validare(cuvinte): # functia de verificare a datelor de intrare

   if len(cuvinte) > 255:
       raise ValueError
   # daca datele de intrare nu corespund, ridicam eroarea ValueError
   print("Datele de intrare corespund restrictiilor impuse")
   return True


def inversmax(cuvinte): # functia de rezolvare

   cuvinte = cuvinte.split()   # impartim propozitia intr o lista de cuvinte
   maxim = -1                  # aflam lungimea maxima
   for cuvant in cuvinte:
       contine_litera = False
       for litera in cuvant:
           if ('a' <= litera <= 'z') or ('A' <= litera <= 'Z'):
               contine_litera = True
               break
       # pentru a fi cuvant, trebuie sa contina litera, daca lungimea e si mai mare ca maximul, updatam maximul
       if contine_litera is True and maxim < len(cuvant):
           maxim = len(cuvant)
   for cuvant in cuvinte:
       contine_litera = False
       for litera in cuvant:
           if ('a' <= litera <= 'z') or ('A' <= litera <= 'Z'):
               contine_litera = True
               break
       # daca e cuvant si de lungime maxima, il afisam invers
       if contine_litera is True and maxim == len(cuvant):
           print(cuvant[::-1], end=" ")
       else:   # altfel afisam asa cum e
           print(cuvant, end=" ")


if __name__ == '__main__':

   # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam
   try:
       text = input(f"Introduceti textul ")        # citirea textului
       validare(text)                              # apelul functiei de validare
       inversmax(text)                             # apelul functiei de rezolvare
   except ValueError:
       print("Datele de intrare nu corespund restrictiilor impuse")
   except IndexError:
       print("Datele de intrare nu corespund restrictiilor impuse")
       

</syntaxhighlight>