0880 - Soarece

De la Universitas MediaWiki
Versiunea din 2 iunie 2024 18:10, autor: Benzar Ioan (discuție | contribuții) (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...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

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

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()