0850 - Repetitii

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se consideră un șir de caractere format numai din litere mici ale alfabetului englez. Dacă șirul conține subșiruri consecutive care se repetă, el poate fi scris condensat. De exemplu, șirul mamateteter poate fi scris (ma)2(te)3r – subșirul care se repetă se scrie între paranteze rotunde, urmat de numărul de apariții.

Dându-se un șir în forma condensată, să se determine șirul în forma inițială.

Date de intrare[edit | edit source]

Programul citește de la tastatură șirul s, în forma condensată.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran șirul t, în forma inițială.

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

  • lungimea șirurilor s și t nu depășește 255 caractere
  • șirul condensat nu va conține paranteze în alte paranteze

Exemplu 1[edit | edit source]

Intrare
(ma)2(te)3r
Iesire
Datele de intrare corespund restrictiilor impuse
mamateteter


Exemplu 2[edit | edit source]

Intrare
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Iesire
Datele de intrare nu corespund restrictiilor impuse


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> import re


def expand_string(s):

   # Funcția expandează un șir de caractere condensat în forma sa inițială.
   # Folosim o expresie regulată pentru a găsi toate subșirurile de forma (x)n
   matches = re.findall(r'\((.*?)\)(\d+)', s)
   for match in matches:
       # Înlocuim fiecare subșir (x)n cu x repetat de n ori
       s = s.replace(f'({match[0]}){match[1]}', match[0] * int(match[1]))
   return s


def main():

   # Citim șirul de la tastatură
   s = input().strip()
   # Verificăm dacă șirul respectă restricțiile
   if len(s) > 255:
       print("Datele de intrare nu corespund restrictiilor impuse")
       return
   print("Datele de intrare corespund restrictiilor impuse")
   # Expandăm șirul și îl afișăm
   print(expand_string(s))


if __name__ == "__main__":

   main()


</syntaxhighlight>