Пользователи с отзывами во все месяцы

тема: Связывание таблиц · уровень: продвинутый

Условие

В файле data.csv находятся отзывы о мобильном приложении. Один пользователь может оставить несколько отзывов в одном месяце. Поле user_id иногда пропущено: такие строки не относятся ни к одному пользователю и не участвуют в подсчёте.

Для заданного непрерывного интервала месяцев нужно найти число пользователей, оставивших хотя бы один отзыв в каждом месяце интервала. Повторные отзывы одного пользователя в одном месяце не изменяют результат.

Пусть U_m — множество непустых идентификаторов пользователей, оставивших отзыв в месяце m. Для месяцев от a до b включительно требуется вывести значение |U_a ∩ U_(a+1) ∩ ... ∩ U_b|. Если ни один пользователь не подходит, выводится 0.

При равенстве числа отзывов у разных пользователей выбор не производится: все подходящие идентификаторы учитываются по одному разу.

Формат ввода

В первой и единственной строке стандартного ввода записаны два месяца start_month и end_month через пробел в формате YYYY-MM. Интервал включает оба указанных месяца.

Рядом с программой расположен файл data.csv в кодировке UTF-8 с разделителем-запятой. Первая строка файла содержит заголовок. Колонки файла: review_id, user_id, review_month, rating, comment_length.

Формат вывода

Выведите одно целое число — количество пользователей, у которых есть хотя бы один отзыв в каждом месяце заданного интервала.

Дробная часть отсутствует, ответ выводится как целое число.

Ограничения

В файле от 300 до 4000 строк с отзывами, не считая заголовка.

review_id — целое число от 1 до 1000000. user_id — строка длиной от 0 до 20 символов из латинских букв, цифр и дефиса; пустая строка означает пропуск. review_month имеет формат YYYY-MM и лежит в диапазоне от 2026-01 до 2026-12. rating — целое число от 1 до 5. comment_length — целое число от 0 до 5000.

Во входе start_month и end_month лежат в диапазоне от 2026-01 до 2026-12, имеют формат YYYY-MM, причём start_month не позже end_month.

Решить задачу с автопроверкой на Python →

Куда дальше