1751 - Icsuri

De la Universitas MediaWiki

Cerința

Într-un regat îndepărtat, există un joc popular printre copii numit "X-uri Magice". În acest joc, copiii desenează două matrici pătratice și încearcă să găsească toate valorile comune dintre cele două matrici. Fiecare matrice este formată din numere întregi, iar scopul este de a găsi toate numerele comune (valori identice) din cele două matrici și să le ordoneze într-o listă crescătoare.

Date de intrare

Programul citește de la tastatură două matrici pătratice de numere întregi.

Date de ieșire

Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse." În următorul rând se va afișa pe ecran lista cu valorile comune ale celor două matrici. Dacă nu există valori comune, se va afișa o listă goală.

În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund restricțiilor impuse."

Restricții și precizări

  • 1 ⩽ n (dimensiune matrice) ⩽ 1000

Exemplu 1

Intrare

3
1 2 3
4 5 6
7 8 9

3
7 2 3
4 0 6
7 8 1

Iesire

Datele de intrare corespund restricțiilor impuse. [1, 2, 3, 4, 6, 7, 8]

Rezolvare

def citeste_matrice_patratica():
    try:
        n = int(input("Introduceți dimensiunea matricii pătratice (n): "))
        matrice = []
        for _ in range(n):
            rand = list(map(int, input().split()))
            if len(rand) != n:
                return None
            matrice.append(rand)
        return matrice
    except ValueError:
        return None

def valideaza_date(matrice1, matrice2):
    if matrice1 and matrice2:
        if len(matrice1) == len(matrice2) and len(matrice1) <= 1000:
            if all(len(rand) == len(matrice1) for rand in matrice1) and all(len(rand) == len(matrice2) for rand in matrice2):
                if all(-10**9 <= elem <= 10**9 for rand in matrice1 for elem in rand) and all(-10**9 <= elem <= 10**9 for rand in matrice2 for elem in rand):
                    return True
    return False

def intersectie_matrici(matrice1, matrice2):
    set1 = {elem for rand in matrice1 for elem in rand}
    set2 = {elem for rand in matrice2 for elem in rand}
    intersectie = list(set1 & set2)
    intersectie.sort()
    return intersectie

def main():
    print("Introduceți prima matrice pătratică:")
    matrice1 = citeste_matrice_patratica()
    print("Introduceți a doua matrice pătratică:")
    matrice2 = citeste_matrice_patratica()
    
    if matrice1 is None or matrice2 is None:
        print("Datele de intrare nu corespund restricțiilor impuse.")
        return
    
    if valideaza_date(matrice1, matrice2):
        print("Datele de intrare corespund restricțiilor impuse.")
        rezultat = intersectie_matrici(matrice1, matrice2)
        print(rezultat)
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")

if __name__ == "__main__":
    main()