0884 - Paznici
Cerința
La o companie de securitate, paznicii trebuie să se alinieze pentru a-și primi instrucțiunile de patrulare. Fiecare paznic se adaugă în coadă pe măsură ce sosește sau poate părăsi coada dacă a primit deja instrucțiunile. Sarcina ta este să implementezi un program care să simuleze aceste operațiuni asupra unei cozi de paznici.
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 numele unui paznic) 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 un nume de paznic reprezentat printr-un șir de caractere
Exemplu 1
- Intrare
5
ENQUEUE John
ENQUEUE Mike
DEQUEUE
ENQUEUE Anna
ENQUEUE Lisa
- Iesire
['Mike', 'Anna', 'Lisa']
Exemplu 2
- Intrare
4
ENQUEUE George
DEQUEUE
DEQUEUE
ENQUEUE Paul
- Iesire
Eroare: coada goală ['Paul']
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 "): _, nume = operatiune.split() coada.append(nume) 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>