0880 - Soarece
Cerința
Într-un laborator de biologie, cercetătorii studiază comportamentul unui șoarece care navighează printr-un labirint. Șoarecele poate adăuga mișcări la coada sa de acțiuni sau poate elimina mișcările anterioare pe măsură ce găsește noi căi. Sarcina ta este să implementezi un program care să simuleze aceste operațiuni asupra unei cozi de acțiuni.
Date de intrare
Programul citește de la tastatură:
Un număr întreg n reprezentând numărul de operațiuni. O listă de n operațiuni, fiecare operațiune fiind de forma "ENQUEUE X" (unde X este o mișcare) sau "DEQUEUE".
Date de ieșire
Pe ecran se va afișa coada rezultată după efectuarea tuturor operațiunilor. Dacă o operațiune "DEQUEUE" este efectuată pe o coadă goală, se va afișa mesajul "Eroare: coada goală".
Restricții și precizări
- 1 ⩽ n ⩽ 100
- 'x' este întotdeauna o mișcare reprezentată printr-un șir de caractere.
Exemplu 1
- Intrare
5
ENQUEUE left
ENQUEUE right
DEQUEUE
ENQUEUE up
ENQUEUE down
- Iesire
['right', 'up', 'down']
Exemplu 2
- Intrare
4
ENQUEUE forward
DEQUEUE
DEQUEUE
ENQUEUE backward
- Iesire
Eroare: coada goală ['backward']
Datele de intrare nu corespund restricțiilor impuse.
Rezolvare
<syntaxhighlight lang="python" line> def citeste_date():
try: n = int(input("Introduceți numărul de operațiuni (n): ")) operatiuni = [] for _ in range(n): operatiune = input().strip() operatiuni.append(operatiune) return n, operatiuni except ValueError: return None, None
def valideaza_date(n, operatiuni):
if not (1 <= n <= 100): return False for operatiune in operatiuni: if not (operatiune.startswith("ENQUEUE ") or operatiune == "DEQUEUE"): return False if operatiune.startswith("ENQUEUE ") and len(operatiune.split()) != 2: return False if operatiune.startswith("ENQUEUE ") and not operatiune.split()[1].isalpha(): return False return True
def proceseaza_operatiuni(n, operatiuni):
coada = [] for operatiune in operatiuni: if operatiune.startswith("ENQUEUE "): _, miscare = operatiune.split() coada.append(miscare) elif operatiune == "DEQUEUE": if coada: coada.pop(0) else: print("Eroare: coada goală") return coada
def main():
n, operatiuni = citeste_date()
if n is None or operatiuni is None or not valideaza_date(n, operatiuni): print("Datele de intrare nu corespund restricțiilor impuse.") return
print("Datele de intrare corespund restricțiilor impuse.") rezultat = proceseaza_operatiuni(n, operatiuni) print(rezultat)
if __name__ == "__main__":
main()
</syntaxhighlight>