2736 - Baza de Date
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
<syntaxhighlight lang="python" line>
- 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)
</syntaxhighlight>