2959 - minecraft: Diferență între versiuni

De la Universitas MediaWiki
Linia 14: Linia 14:
== Exemplu 1 ==
== Exemplu 1 ==
;Intrare
;Intrare
5
5 <br>
PUSH Dirt
PUSH Dirt<br>
PUSH Stone
PUSH Stone<br>
POP
POP<br>
PUSH Wood
PUSH Wood<br>
PUSH Iron
PUSH Iron


;Iesire
;Iesire
['Dirt', 'Wood', 'Iron']
['Dirt', 'Wood', 'Iron']


== Rezolvare ==
== Rezolvare ==

Versiunea de la data 2 iunie 2024 17:42

Cerința

În lumea Minecraft, jucătorii își organizează inventarul folosind stive pentru a stoca diferite blocuri și obiecte. Ei pot adăuga blocuri la stivă sau pot scoate blocuri din stivă în funcție de nevoile lor de construcție. Sarcina ta este să implementezi un program care să simuleze aceste operațiuni asupra unei stive de blocuri.

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 "PUSH X" (unde X este un tip de bloc) sau "POP".

Date de ieșire

Pe ecran se va afișa stiva rezultată după efectuarea tuturor operațiunilor. Dacă o operațiune "POP" este efectuată pe o stivă goală, se va afișa mesajul "Eroare: stivă goală".

Restricții și precizări

  • 1 ⩽ n ⩽ 100
  • 'x' este întotdeauna un tip de bloc reprezentat printr-un șir de caractere.

Exemplu 1

Intrare

5
PUSH Dirt
PUSH Stone
POP
PUSH Wood
PUSH Iron

Iesire

['Dirt', 'Wood', 'Iron']

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("PUSH ") or operatiune == "POP"):
            return False
        if operatiune.startswith("PUSH ") and len(operatiune.split()) != 2:
            return False
        if operatiune.startswith("PUSH ") and not operatiune.split()[1].isalpha():
            return False
    return True

def proceseaza_operatiuni(n, operatiuni):
    stiva = []
    for operatiune in operatiuni:
        if operatiune.startswith("PUSH "):
            _, bloc = operatiune.split()
            stiva.append(bloc)
        elif operatiune == "POP":
            if stiva:
                stiva.pop()
            else:
                print("Eroare: stivă goală")
    return stiva

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