0884 - Paznici

From Bitnami MediaWiki
Revision as of 18:17, 2 June 2024 by Benzar Ioan (talk | contribs) (Pagină nouă: == 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...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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>