Ranking zawodników
Treść zadania
Wczytaj wyniki zawodów: dla każdego zawodnika jego imię, liczbę zdobytych punktów i czas (w sekundach). Ułóż ranking według następujących zasad:
- więcej punktów — wyższe miejsce (punkty malejąco),
- przy równej liczbie punktów: krótszy czas — wyższe miejsce (czas rosnąco),
- przy równych punktach i czasie zawodnicy dzielą miejsce, a w rankingu wypisujemy ich alfabetycznie według imienia (imię rosnąco).
Zawodnicy, którzy mają te same punkty i ten sam czas, zajmują to samo miejsce, a kolejne miejsca są pomijane — tak jak w sporcie: np. 1, 2, 2, 4. Miejsce zawodnika to $1 +$ liczba zawodników, którzy mają od niego lepszy wynik.
Dane wejściowe
- 1. linia: liczba zawodników $N$
- kolejne $N$ linii:
imię punkty czas— imię (jedno słowo), punkty i czas (liczby całkowite $\ge 0$), oddzielone spacjami
Dane wyjściowe
$N$ linii w kolejności rankingu, każda w postaci:
<miejsce>. <imię> <punkty> <czas>
Ograniczenia
- $1 \le N \le 100$
- Imiona są różne.
Uwagi
- Kilka kryteriów naraz zapiszesz jako krotkę zwracaną przez funkcję
key— Python porównuje krotki element po elemencie: najpierw pierwsze elementy, a przy remisie kolejne. - Żeby posortować liczby malejąco w kluczu, który poza tym sortuje rosnąco, wystarczy je zanegować:
sorted(zawodnicy, key=lambda z: (-z[1], z[2], z[0]))(dla krotek(imię, punkty, czas)). - Po posortowaniu miejsce zawodnika jest równe miejscu poprzednika, jeśli ma on te same punkty i czas, a w przeciwnym razie — jego pozycji w rankingu (licząc od 1).
Przykład
5 Ola 90 300 Adam 95 320 Ewa 90 300 Kuba 90 280 Zosia 70 250
1. Adam 95 320 2. Kuba 90 280 3. Ewa 90 300 3. Ola 90 300 5. Zosia 70 250
Ewa i Ola mają te same punkty i ten sam czas, więc dzielą 3. miejsce (wypisujemy je alfabetycznie), a następna zawodniczka zajmuje miejsce 5.
Potrzebujesz teorii?
Zasady obowiązujące w rozdziale 22
Zadania w tym rozdziale pokazują, jak sortować w praktyce: napisy, słowa, pary, obiekty — często według własnego kryterium. Tutaj wolno (a nawet warto) korzystać z wbudowanych narzędzi Pythona: sorted(), list.sort() i parametru key=.
Konwencje wspólne:
- Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
- Jeśli wejściem jest napis — wczytaj całą linię (łącznie ze spacjami).
- Jeśli wejściem jest lista — najpierw podana jest liczba elementów $N$, a potem elementy (w jednej linii albo w kolejnych liniach — zależnie od zadania).
- Napisy porównujemy tak jak Python, czyli według kodów znaków Unicode: wielkie litery są „mniejsze” od małych (
'Z' < 'a'), a polskie litery są „większe” od wszystkich liter alfabetu łacińskiego ('z' < 'ą'). - Sortowanie w Pythonie (
sorted(),list.sort()) jest stabilne: elementy równe według kryterium sortowania zachowują kolejność z wejścia. Korzystają z tego zadania, w których mogą wystąpić remisy. - Program nie wypisuje komunikatów typu „Podaj liczbę:”.
Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.
Przywrócono Twój zapisany kod.
Python uruchomi się w przeglądarce przy pierwszym teście.
Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.
Testy
Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.
Test 1
Nie uruchomiono1 Solo 0 0
1. Solo 0 0
Test 2
Nie uruchomiono3 C 10 100 B 10 100 A 10 100
1. A 10 100 1. B 10 100 1. C 10 100
Test 3
Nie uruchomiono4 Zenon 50 200 Ania 50 200 bartek 50 199 Cyryl 60 500
1. Cyryl 60 500 2. bartek 50 199 3. Ania 50 200 3. Zenon 50 200
Test 4
Nie uruchomiono6 P1 5 10 P2 7 10 P3 5 9 P4 7 10 P5 5 10 P6 1 1
1. P2 7 10 1. P4 7 10 3. P3 5 9 4. P1 5 10 4. P5 5 10 6. P6 1 1
Test 5
Nie uruchomiono3 marek 10 50 Marek 10 50 łukasz 10 50
1. Marek 10 50 1. marek 10 50 1. łukasz 10 50