2088 - decodif
Se consideră următorul model (pattern): n[string] care este echivalent cu șirul (string)(string)...(string) (string repetat de de n ori). Pornind de la acest model orice șir de caractere poate fi codificat.
Exemple :
Șir codificat
1[a] 2[ab] 2[a2[b]] 3[b2[ca]]
Șir decodificat
a abab abbabb bcacabcacabcaca
Cerința[edit | edit source]
Fiind dat un șir de caractere corect codificat să se afișeze decodificarea acestuia.
Date de intrare[edit | edit source]
Programul citește de la tastatură un șir de caractere S corect codificat.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran un șir de caractere ce va reprezenta decodificarea șirului S.
Restricții și precizări[edit | edit source]
- 3 ≤ lungimea șirului S ≤ 1000
- lungimea șirului decodificat ≤ 100000
- șirul S va conține doar caractere literă mică ale alfabetului englez
Exemplul 1:[edit | edit source]
- Intrare
3[a1[b2[c]]]
- Ieșire
Datele de intrare corespund restrictiilor impuse abccabccabcc
- Intrare
3[a2[c]]2[x3[y]]
- Ieșire
Datele de intrare corespund restrictiilor impuse accaccaccxyyyxyyy
Exemplul 2:[edit | edit source]
- Intrare
2024
- Ieșire
Datele de intrare nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1" start="1">
def validare(sir): # functia de validare a datelor de intrare
if len(sir) < 3 or len(sir) > 1000: raise ValueError if not sir.islower(): raise ValueError print("Datele de intrare corespund restrictiilor impuse\n")
def decode_string(sir): # functia de rezolvare
stack = "", 1 num = "" for ch in sir: if ch.isdigit(): num += ch elif ch == '[': stack.append(["", int(num)]) num = "" elif ch == ']': st, k = stack.pop() stack[-1][0] += st*k else: stack[-1][0] += ch return stack[0][0]
if __name__ == '__main__':
try: s = input("Introduceți șirul codificat: ").strip() validare(s) result = decode_string(s) print(result) except ValueError: print("Datele de intrare nu corespund restrictiilor impuse\n") except IndexError: print("Datele de intrare nu corespund restrictiilor impuse\n")
</syntaxhighlight>