3003 - Intersectie

De la Universitas MediaWiki
Versiunea din 28 mai 2024 12:44, autor: Benzar Ioan (discuție | contribuții) (Pagină nouă: == Cerința == Se dau doi vectori de numere întregi. Să se determine vectorul care conține elementele comune celor doi vectori, sortat în ordine crescătoare. == Date de intrare == Programul citește de la tastatură doi vectori 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 vectorul cu elementele comune celor doi vectori, sortat în ordine crescătoar...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

Cerința

Se dau doi vectori de numere întregi. Să se determine vectorul care conține elementele comune celor doi vectori, sortat în ordine crescătoare.

Date de intrare

Programul citește de la tastatură doi vectori 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 vectorul cu elementele comune celor doi vectori, sortat în ordine crescătoare. Dacă nu există elemente comune, se va afișa un vector gol.

Î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

  • Vectorii pot conține până la 100.000 de elemente fiecare.
  • 1 ⩽ numar_elemente_vector1, numar_elemente_vector2 ⩽ 100000

Exemplu 1

Intrare

1 2 3 4 5
3 4 5 6 7

Iesire

Datele de intrare corespund restricțiilor impuse. [3, 4, 5]

Exemplu 2

Intrare

1 1 2 2
3 3 4 4

Iesire

Datele de intrare corespund restricțiilor impuse. []

Rezolvare

def citeste_vectori():
    try:
        vector_1 = list(map(int, input("Introduceți elementele primului vector: ").split()))
        vector_2 = list(map(int, input("Introduceți elementele celui de-al doilea vector: ").split()))
        return vector_1, vector_2
    except ValueError:
        return None, None


def valideaza_date(vector_1, vector_2):
    if len(vector_1) <= 100000 and len(vector_2) <= 100000:
        if all(-10 ** 9 <= elem <= 10 ** 9 for elem in vector_1) and all(
                -10 ** 9 <= elem <= 10 ** 9 for elem in vector_2):
            return True
    return False


def intersectie_sortata(vector_1, vector_2):
    set_1 = set(vector_1)
    set_2 = set(vector_2)
    intersectie = sorted(set_1 & set_2)
    return intersectie


def main():
    vector_1, vector_2 = citeste_vectori()

    if vector_1 is None or vector_2 is None:
        print("Datele de intrare nu corespund restricțiilor impuse.")
        return

    if valideaza_date(vector_1, vector_2):
        print("Datele de intrare corespund restricțiilor impuse.")
        rezultat = intersectie_sortata(vector_1, vector_2)
        print(rezultat)
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")


if __name__ == "__main__":
    main()