0135 - Sablon

From Bitnami MediaWiki

Cerința[edit | edit source]

Un șir de caractere s este șablon pentru un șir de caractere x dacă are aceeași lungime cu x și este alcătuit numai din caractere ale mulțimii {*, #, ?}, iar pe fiecare poziție din s în care apare * în x apare vocală, pe fiecare poziție din s în care apare # în x apare consoană, iar pe fiecare poziție din s în care apare ? în x putem avea orice caracter. Scrieți un program care citește de tastatură două șiruri de cel mult 30 caractere de aceeași lungime care conțin doar litere mici ale alfabetului englez și construiește în memorie și apoi afișează pe ecran un cel mai bun șablon comun al lor, adică șablonul comun cu număr minim de caractere ?.

Date de intrare[edit | edit source]

Programul citeşte de la tastatură cele două șiruri, pe acelaşi rând, separate printr-un spaţiu.

Date de ieșire[edit | edit source]

Programul afişează pe ecran cel mai bun șablon comun.

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

  • se consideră vocale caracterele din mulțimea {a, e, i, o, u};

Exemplul 1[edit | edit source]

Intrare
diamant pierdut
Ieșire
Datele de intrare corespund restricțiilor impuse.
#**#??#

Exemplul 2[edit | edit source]

Intrare
tttttt mmmmm
Ieșire
Datele de intrare nu corespund restricțiilor impuse.

Rezolvare[edit | edit source]

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

  1. 0135 - Sablon

def compare_strings(a, b):

   result = 
   for i in range(len(a)):
       if (a[i] in ['a', 'e', 'i', 'o', 'u']) and (b[i] in ['a', 'e', 'i', 'o', 'u']):
           result += '*' # daca ambele caractere sunt vocale, adaugam un asterisc
       elif (a[i] in ['a', 'e', 'i', 'o', 'u']) and (b[i] not in ['a', 'e', 'i', 'o', 'u']):
           result += '?' #daca primul caracter este vocala, iar al doilea nu este, adaugam un semn de intrebare
       elif (a[i] not in ['a', 'e', 'i', 'o', 'u']) and (b[i] in ['a', 'e', 'i', 'o', 'u']):
           result += '?' #daca primul caracter nu este vocala, iar al doilea este vocala, adaugam un semn de intrebare
       else:
           result += '#' #daca ambele caractere nu sunt vocale, adaugam un diez
   return result

if __name__ == '__main__':

   a, b = input().split()
   #verificarea restrictiilor
   if len(a) <= 30 and len(b) <= 30 and any(char in ['a', 'e', 'i', 'o', 'u'] for char in a + b):
       print("Datele de intrare corespund restricțiilor impuse.")
       result = compare_strings(a, b)
       print(result)
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.") 


</syntaxhighlight>