2736 - Baza de Date

De la Universitas MediaWiki
Versiunea din 1 noiembrie 2023 18:24, autor: AntalKrisztian (discuție | contribuții) (Pagină nouă: == Cerinţa == Se citește numărul '''n''' și apoi '''n''' articole cu structura: '''prenume nume salariu vârstă funcție număr_de_telefon email'''. Fiecare articol este plasat pe câte o linie, câmpurile sale fiind separate prin câte un spațiu. Câmpurile '''salariu''' și '''vârstă''' conțin numere naturale, celelalte conțin șiruri de caractere. Se citește apoi un număr natural '''p''' cuprins între '''1''' și '''7''' și un caracter '''c''' care poate fi...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

Cerinţa

Se citește numărul n și apoi n articole cu structura: prenume nume salariu vârstă funcție număr_de_telefon email. Fiecare articol este plasat pe câte o linie, câmpurile sale fiind separate prin câte un spațiu. Câmpurile salariu și vârstă conțin numere naturale, celelalte conțin șiruri de caractere.

Se citește apoi un număr natural p cuprins între 1 și 7 și un caracter c care poate fi + sau -.

Se cere ordonarea celor n articole în funcție de p și c, astfel:

  • dacă p=1, ordonarea se face după prenume; dacă p=2, ordonarea se face după nume; dacă p=3, ordonarea se face după salariu; dacă p=4, ordonarea se face după vârstă; dacă p=5, ordonarea se face după funcție; dacă p=6, ordonarea se face după număr_de_telefon; dacă p=7, ordonarea se face după email;
  • dacă c are valoarea +, ordonarea va fi crescătoare, iar dacă c are valoarea -, ordonarea va fi descrescătoare;
  • dacă două articole au aceeași valoare a câmpului în raport cu care se face sortarea, ordinea lor nu se va modifica.

Date de intrare

Programul citește de la tastatură numărul n, apoi cele n articole, fiecare pe câte o linie, câmpurile fiecărui articol fiind separate prin câte un spațiu, apoi p și c cu semnificația din enunț.

Date de ieşire

Programul va afișa pe ecran articolele sortate conform cerinței. Fiecare articol va fi afișat pe câte o linie, câmpurile fiind separate prin câte un spațiu.

Restricții și precizări

  • 1 ⩽ n ⩽ 80
  • câmpurile numerice vor avea valori pe 64 de biți fără semn, iar celelalte vor avea maximum 255 de caractere.

Exemplu

Intrare
3
Len Trexler 100000 55 Spymaster 5554440192 lt@sp.com
Oliver Regina 0 37 Vigilante 1234567890 or@vg.com
Sterling Archer 1000000 43 Agent 8423565491 sa@ag.com
2 +


Ieșire
Sterling Archer 1000000 43 Agent 8423565491 sa@ag.com
Oliver Regina 0 37 Vigilante 1234567890 or@vg.com
Len Trexler 100000 55 Spymaster 5554440192 lt@sp.com

Explicaţie

S-a sortat crescător după nume(2), și s-au afișat.

Rezolvare

# Funcția citește datele de intrare.
def citire():
    n = int(input())  # Citim numărul de angajați
    angajati = []  # Inițializăm lista de angajați
    for _ in range(n):
        angajat = input().split()  # Citim datele unui angajat
        angajat[2] = int(angajat[2])  # Convertim salariul la int
        angajat[3] = int(angajat[3])  # Convertim vârsta la int
        angajati.append(angajat)  # Adăugăm angajatul în listă
    p, c = input().split()  # Citim p și c
    p = int(p)  # Convertim p la int
    return n, angajati, p, c

# Funcția 'sortare' sortează lista de angajați în funcție de criteriile specificate.
def sortare(n, angajati, p, c):
    # Sortăm lista de angajați. Dacă c este '-', sortarea este descrescătoare.
    angajati.sort(key=lambda x: x[p-1], reverse=(c == '-'))

# Funcția 'afisare' afișează lista de angajați.
def afisare(angajati):
    for angajat in angajati:
        print(' '.join(map(str, angajat)))  # Afișăm datele unui angajat

# Citim datele de intrare
n, angajati, p, c = citire()
# Sortăm lista de angajați în funcție de criteriile specificate
sortare(n, angajati, p, c)
afisare(angajati)