В каждой задаче вы можете читать данные либо из файла data.csv, либо со стандартного ввода.
Программа должна вывести результат либо в файл output.txt, либо на стандартный вывод.
Вам предлагаются для обработки различные данные в формате CSV. Данные представляют собой текстовый файл, каждая строка которых содержит некоторое количество данных, разделённых одинаковым символом. Аббревиатура CSV обозначает Comma-Separated Values, однако в качестве разделителя будет использоваться другой символ.
CSV-данные на сайте data.mos.ru записаны в кодировке Windows-1251, но в тестирующей системе этот же файл будет сконвертирован в кодировку UTF-8.
При этом при открытии файла программой в Python на вашем компьютере может понадобится указание кодировки.
Для этого в функцию open
нужно передать параметр encoding. Возможные значения:
encoding="cp1251" или encoding="utf8".
При сдаче задачи в тестирующую систему этот параметр нужно убрать или указать utf8.
Кроме того, если вы используете в программе текстовые строки, записанные на русском языке, то сам файл с программой должен быть сохранён в кодировке UTF-8 (по умолчанию Wing IDE может сохранять файлы в кодировке CP-1251). Для этого в первой строке файла программы на языке Python следует установить кодировку самого файла с программой:
# -*- coding: utf-8 -*-
Изучите файл с экспортом сданных решений в ejudge школьного учебного контеста. Для каждого участника определите количество сданных им задач. Задача считается сданной, если в поле Status записано значение OK. Обратите внимание, что участник может сдать одну задачу несколько раз, тогда эта задача считается только один раз. Задачи нужно идентифицировать по полю Prob.
Выведите список учащихся (поле User_Name), упорядоченный по алфавиту, после имя участника через двоеточие и пробел выведите количество решённых им задач. Необходимо вывести имена всех пользователей, которые встречаются в данном файле, в том числе тех, которые не решили ни одной задачи.
Пример результата работы программы (первые пять строк) для данного файла:
9Б Гречуха Максим: 8 9Б Губинская Вероника: 7 9Б Леонова Вероника: 7 9Б Мустафаев Руслан: 8 9Б Некрасов Алексей: 8
Изучите файл с экспортом сданных решений в ejudge, контест проводится в формате личной олимпиады.
Интересные для вас поля в этом файле:
User_Id — уникальный числовой идентификатор пользователя.
User_Login — уникальный логин пользователя (также можно использовать, как уникальный числовой идентификатор).
User_Inv — у скрытого пользователя в этом поле записан символ "I".
Lang — идентификатор языка программирования.
Score — Количество баллов, полученных за задачу.
Посчитайте общее число участников контеста, а также то, сколько участников использовало тот или иной язык программирования. Будем считать, что участник использует язык программирования, если он сдал хотя бы одно решение, набравшее больше 0 баллов. Скрытых пользователей учитывать не нужно.
Выведите общее число пользователей (Total) в первой строке, считаются только участники, сдавшие хотя бы одну задачу на ненулевой балл.
В последующий строках выведите все использованные языки программирования, после слова Total или названия языка программирования через двоеточие и пробел выведите число участников. Список упорядочите по убыванию числа участников, использующих данный язык программирования, при равных значениях — в лексикографическом порядка названия языка программирования.
Пример результата работы программы для данного файла:
Total: 19 python3: 19 g++: 5
Вам понадобятся также следующие поля:
User_Name — имя пользователя в таблице результатов
Prob — идентификатор задачи (произвольная строка).
По каждой задаче пользователь получает балл, равный максимальному числу баллов из всех сабмитов по этой задаче. Сумма баллов, набранных участником, равна сумме баллов за все задачи.
Для каждого участника посчитайте сумму баллов, которые он набрал по всем задачам. Упорядочите участников по убыванию суммы баллов, при равной сумме баллов — в лексикографическом порядке поля User_Name. Выведите упорядоченный список: сначала имя пользователя, потом через двоеточие и пробел — его баллы.
Решения, имеющие статус Compilation error имеют значение поля Score равное -1, эти решения учитывать не нужно (их балл равен 0).
Eсли все решения участника набрали 0 баллов, то участник тоже участвовал в олимпиаде и его результат тоже нужно выводить.
Имена участников могут совпадать (привет Александрам Некрасовым), идентифицировать участников нужно по логину или id, но выводить нужно имена.
Пример результата работы программы для данного файла:
[9В] Порфирьев Антон: 400 [7Б] Сергиенко Дмитрий: 366 [9В] Павлек Николай: 363 [9Д] Миронов Сергей: 362 [9В] Смирнягин Артем: 359 [7Б] Бурков Илья: 358 [9В] Овчинников Андрей: 356 [9В] Фирсов Федор: 351 [9В] Севастьянова Александра: 331 [7Б] Орехов Савва: 330 [9В] Калабай Михаил: 330 [9В] Кирьяков Сергей: 330 [9В] Осипов Григорий: 330 [9В] Бархварт Максим: 321 [8В] Болгов Михаил: 320 [9В] Ингман Глеб: 320 [9В] Сутый Дмитрий: 320 [9В] Рылин Илья: 318 [8В] Черных Владимир: 308
Изучите файл с экспортом сданных решений в ejudge, контест проводится в формате командной олимпиады.
Интересные для вас поля в этом файле:
Stat_Short — равен OK, если решение прошло все тесты.
Dur — время сдачи в секундах решения от начала тура. Также вместо поля Dur можно использовать поля Dur_Hour и Dur_Min, равных
количеству прошедших с начала тура часов и минут.
По правилам командной олимпиады команды ранжируются по убьванию числа решённых задач. При равном числе решённых задач команды ранжируются по возрастанию штрафного времени. Штрафное время по задаче равно времени, в которой было сдано решение этой задачи на OK, измеряемое в минутах от начала тура, плюс 20 штрафных минут за каждую неудачную попытку сдать решение этой задачи. Например, если команда сделала 2 неудачные попытки по задаче, и после этого сдала решение на OK через 1 час 5 минут 30 секунд после начала тура, то команда получает \(65 + 2\times 20=105\) штрафных минут. Значение поля Dur у удачной попытки будет равно \(1\times 3600 + 5\times 60 + 30=3930\), Dur_Hour будет равно 1, Dur_Min будет равно 5.
Штрафные баллы не начисляются за задачи, которые в итоге не были сданы на OK, а также штрафные баллы не начисляются за решения, отправленные после того, как был получен OK по данной задаче. Также в Москве на школьных соревнованиях не учитываются решения, имеющие статус “Ошибка компиляции”, у них значение поля Stat_Short равно CE.
Выведите таблицу результатов командной олимпиады в формате название команды, затем через двоеточие и пробел — число решённых задач и, через пробел, штрафные баллы. Список должен быть упорядочен по убыванию числа решённых задач, затем по возрастанию штрафного балла, затем по названию команды.
Пример результата работы программы для данного файла:
42: Борис, (Гурциева B', Белова B', Воробьева B'): 9 785 28: Ядреный Хренодер (Смирнов B', Капленков C, Подопросветов C): 9 1023 39: Easy Win (Самбуров B', Оспенников B', Чахвадзе B'): 8 917 34: No money — no honey (Неверова C, Олемская C, Федорова C): 7 496 35: #Альтернатива# (Копаева C, Плюшкин C, Мустафин C): 7 669 26: Новогодний дуб (Винокуров C', Гусев C', Соколов C'): 7 726 31: ОАО «Мозгострах» (Карбушев B', Привалихин B', Труфанов B'): 7 838 36: Нет идей (Фадеева C', Серикова C', Власова C'): 7 857 38: nyan pony (Сидоров B', Зверева B', Николаев B'): 7 863 41: Дружба — это магия (Сахабиев C', Хайруллин C', Поляков C'): 7 1004 30: Трое на кухне (Воронцова B', Савон B', Иглина B'): 6 375 44: Лама (Жуковская C, Цаплин B', Русина C): 6 464 27: 12348 (Начкин C', Алехина C', Якунчева C'): 6 555 37: Чапельник (Чистопольская C, Минеева B', Дженжер C): 6 573 33: Cone Forest (Алфёров C, Шалимова С, Казаков C): 6 587 32: Тётки (с) (Романова C', Ерохина C', Ерохина C'): 6 815 29: python++ (Кириллов C, Амиров C, Аникушин C): 6 1025 43: Двое против всех (Морозов C', Анопренко C'): 5 190 40: PENTAGRAM (Янцевич C, Соломатин C, Амиров C): 4 444
В следующих задачах мы будем изучать интересные сведения, которые можно скачать с сайта data.mos.ru.
Изучите данные о городском Wi-Fi. Для скачивания набора данных используйте кнопку «Экспорт».
Обратите внимание, что все значения полей в этом файле заключены в кавычки, а также, что в файле две строки с заголовками столбцов.
Также изучите архивные наборы данных от 19.02.2023, от 08.12.2021.
Отличия архивных наборов данных от современных.
open
нужно передать параметр encoding="cp1251". При сдаче задачи в тестирующую систему этот параметр нужно убрать.
Ваше приложение должно работать и с актуальной версией данных, и с архивными версиями (после перекодировки в UTF-8), с учётом этих особенностей.
Посчитайте для каждого района Москвы количество точек доступа в этом районе. Упорядочите список по убыванию количества точек доступа, при равном значении — в лексикографическом порядке названия района. Выведите полученный список, отделяя название района от числа точек доступа двоеточием и пробелом.
Начальная часть ответа для набора данных от 24.01.2024 (версия 1.34) выглядит так:
Пресненский район: 505 Тверской район: 494 район Хамовники: 432 Басманный район: 351 район Замоскворечье: 348
В этой задаче нужно обработать набор данных “Победители олимпиад” из раздела “Образование”,
Определите, по каким предметам проводится московская олимпиада. Для каждого предмета выведите его название, и сколько лет проводилась олимпиада по этому предмету (на основании имеющихся данных).
Выведите список предметов в алфавитном порядке, затем через двоеточие и пробел — количество лет проведения.
Начало списка для последнего набора данных (версия 3.9 от 20.09.2023) выглядит так:
Астрономия: 10 Биология: 10 Бюджетная грамотность: 1 Генетика: 2 География: 10
В этой задаче нужно обработать набор данных “Победители олимпиад” из раздела “Образование”,
Помимо актуальной версии данных, вы можете скачать архивные данные от 25.01.2023, от 02.02.2022, от 01.02.2021, от 03.02.2020, от 11.02.2019. Обратите внимание на все особенности архивных наборов данных.
Вам необходимо посчитать для каждой московской школы количество победителей и призёров регионального этапа всероссийской олимпиады школьников в последнем учебном году (региональный этап — это третий этап всероссийской олимпиады). Последний учебный год — это максимальный год, по которому предоставлены данные в данном наборе.
Необходимо вывести список всех школы Москвы в формате: краткое название школы (поле «ShortName»), затем через двоеточие и пробел количество победителей регионального этапа из этой школы, количество призёров регионального этапа, через пробел.
Список упорядочен по убыванию суммарного числа победителей и призёров, затем по убывания числа победителей, затем по возрастанию названия школы (в лексикографическом порядке).
Начало списка для последнего набора данных (версия 3.9 от 20.09.2023) выглядит так:
АНО ОШ ЦПМ: 228 660 ГБОУ «Лицей «Вторая школа» имени В.Ф. Овчинникова»: 72 255 лицей НИУ ВШЭ: 37 238 ГБОУ школа № 57: 55 215 ГБОУ школа № 179: 38 220