0880 - Soarece

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

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>