2681 - Invers Max: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerința == 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ă neschi...
 
No edit summary
 
(4 intermediate revisions by the same user not shown)
Line 18: Line 18:
== Exemplu 2 ==
== Exemplu 2 ==
; Intrare
; Intrare
: 14567898765 esdrtyfugihk esdfghuikjnbvcvbhjhg  x3456789098765434567&&&&&&&&&&&&%%%%%%%%%%%%% %%^%%%/############@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
: 14567898765 esdrtyfugihk esdfghuikjnbvcvbhjhg  x3456789098765434567&&&&&&&&&&&&%%%%%%%%%%%%% %%^%%%/############@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ fds vcxssdcv  @@@@@@@@@@@@@v rdedf @@%$dvbgfrdcvc%^&&&&&&&&&&&&&&&&&&& 212345678987654323456787654345678765434567865432345cvb 67865432345  6543456  765434567654323456765432  34567u8iuygfcvb njkjhgfvcxsdrfthnbvcxdrtyhbvf gfghjkhbvcxc vdchdvfvf f
  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ fds vcxssdcv  @@@@@@@@@@@@@v rdedf @@%$dvbgfrdcvc%^&&&&&&&&&&&&&&&&&&& 212345678987654323456787654345678765434567865432345cvb  
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.
<br>
<br>
== 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>