Особові справи — 2
Перегляд у форматі PDFІнформація про кожного з учнів школи має вигляд: прізвище, ім'я, клас, дата народження.
В залежності від ситуації, їх буває потрібно сортувати у різних порядках. Повний перелік стандартних порядків такий:
surname– за прізвищем, ігноруючи ім'я;fullname– за прізвищем, а при однаковості прізвищ – за іменем;birthyear– за роком народження, ігноруючи дату всередині року, від менших дат (старших учнів) до більших дат (молодших учнів);birthdate– за датою народження, включаючи рік, від менших дат (старших учнів) до більших дат (молодших учнів);birthday– за днем народження, тобто вважаючи рівними однакові день і місяць різних років, від 01.01 до 31.12 (у календарному смислі, в форматідд.мм);grade– за класом як номером року навчання, від 1 до 11, ігноруючи букву;class– спочатку за класом як номером року навчання, а при однаковості – за буквою класу відAдоZ.
Причому, інколи буває потрібно застосовувати декілька порядків: спочатку один, при рівності за першим – другий, і т. д.
Наприклад, birthyear grade surname означає, що спочатку треба вивести всіх школярів, наприклад, 1998 р. н.,
потім усіх 1999 р. н., потім усіх 2000 р. н., і так далі, причому серед школярів одного й того ж року народження
проводити сортування за класами (як роками навчання, ігноруючи букву), а вже тих, у кого однакові і рік народження,
і клас без урахування букви, розташувати в алфавітному порядку за прізвищами.
Вхідні дані
У першому рядку записаний необхідний порядок сортування, як одне або декілька зі слів
surname, fullname, birthyear, birthdate, birthday, grade, class.
Хоча б одне слово обов'язково присутнє; якщо слів декілька, то вони розділені одинарними пробілами;
одне й те ж слово не може згадуватися більше одного разу.
У другому рядку записана кількість учнів ~N~ (~2\leqslant N \leqslant 12345~).
Далі йдуть ~N~ груп по 4 рядки кожна:
(1) прізвище – починається з великої латинської літери, далі послідовність латинських букв, дефісів, апострофів;
(2) ім'я – починається з великої латинської літери, далі послідовність латинських букв, дефісів, апострофів і пробілів;
(3) дата народження (дд.мм.рр, тобто і день, і місяць, і рік завжди задані рівно двома цифрами);
(4) клас – число від 1 до 11 і одна велика латинська літера, без пробілу між ними.
Всі дати народження правильні (не буває, наприклад, 30.02) і належать діапазону років від 1990 до 2030. Тобто, наприклад, ~97<02~, бо насправді це 1997 і 2002. Здебільшого, учні старших класів мають раніші дати народження, ніж учні молодших, але можливі виключення.
Більшість (не менше 99,9%) прізвищ та імен мають довжину до 20 символів, але щодо решти 0,1% гарантовано лише те, що їх сумарна довжина не перевищує мільйон символів. Прізвища та імена гарантовано закінчуються або літерою, або апострофом (але не дефісом і не пробілом).
Прізвища з прізвищами та імена з іменами слід порівнювати стандартним для мов програмування регістрозалежним лексикографічним порівнянням рядків (навіть у випадку наявності дефісів, пробілів, тощо).
Результати
Вивести ~N~ рядків, у кожному з яких записані дані про одного з учнів, у форматі: клас, кома, пробіл, прізвище, кома, пробіл, ім'я, кома, пробіл, дата народження.
Клас, прізвище, ім'я і дата народження мають бути байт-у-байт такими ж, як у вхідних даних.
Рядки мають бути впорядкованими у відповідності до описаних в першому рядку вхідних даних порядком сортування.
У всіх випадках, коли застосування вказаних порядків до вказаним даних залишає можливість різних правильних відповідей –
виводьте будь-яку одну з правильних відповідей. Наприклад, якщо при вже згаданому порядку birthyear grade surname в деякому класі (році навчання) є однопрізвищники одного року народження – їх можна вивести в будь-якому порядку, але треба вивести кожного рівно один раз.
Приклади
Вхід
birthyear grade surname
8
Gonsales
Anna Maria
5A
01.05.03
Ivanov
Kyrylo
11A
12.01.97
Ivanov
Ivan
3D
20.01.05
Ivanov
Andrii
11B
23.12.97
Petrenko
Nataliia
11B
23.08.97
Andrijchenko
Kateryna
11B
07.02.98
Shevchenko
Denys
10A
07.05.98
Smirnov-Kovalenko
Yehor
9A
13.11.98
Результат
11A, Ivanov, Kyrylo, 12.01.97
11B, Ivanov, Andrii, 23.12.97
11B, Petrenko, Nataliia, 23.08.97
9A, Smirnov-Kovalenko, Yehor, 13.11.98
10A, Shevchenko, Denys, 07.05.98
11B, Andrijchenko, Kateryna, 07.02.98
5A, Gonsales, Anna Maria, 01.05.03
3D, Ivanov, Ivan, 20.01.05
Примітки
Відповідь, у якій
Ivanov AndriiтаIvanov Kyryloпереставлені місцями, також є правильною. Інших, крім цих двох, правильних відповідей для цих вхідних даних не існує.Мова C# дотримується трохи іншого, чим більшість мов програмування, уявлення про стандартне регістрозалежне лексикографічне порівняння рядків. І тести вже зроблені під уявлення, стандартне для інших мов. Тому, мовою C# замість очевидного фрагмента
p1.surName.CompareTo(p2.surName)слід писатиString.Compare(p1.surName, p2.surName, StringComparison.Ordinal), та аналогічно в решті випадків, де це важливо.
Коментарі