|
|
Line 1: |
Line 1: |
| == 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 +
| |
| <br>
| |
| ; 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>
| |