Корректные даты в дневнике тренировок

тема: Пропуски, дубликаты, выбросы · уровень: средний

Условие

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

Запись дневника сопоставляется с бегуном по идентификатору runner_id. Если идентификатор из записи отсутствует в таблице бегунов, такая запись считается пропуском связи и отбрасывается.

Дата корректна, если она имеет вид YYYY-MM-DD и задаёт существующую дату григорианского календаря. Год состоит из четырёх цифр, месяц и день состоят из двух цифр. Год является високосным, если он делится на 400 или делится на 4 и не делится на 100. Записи с некорректной датой, включая значение NA, отбрасываются. Требуется вывести число оставшихся записей, то есть число строк второй таблицы, для которых одновременно существует бегун с таким runner_id и дата корректна.

Равенств при вычислении ответа не возникает, так как ответом является количество записей.

Формат ввода

В первой строке даны два целых числа n и m — число бегунов и число записей дневника.

В следующих n строках находятся данные таблицы бегунов: два поля runner_id и name, разделённые пробелом.

В следующих m строках находятся данные таблицы дневника: три поля runner_id, date и distance, разделённые пробелом. Поле date является строкой без пробелов. Значение NA означает, что дата отсутствует.

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

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

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

Ограничения

1 ≤ n, 1 ≤ m, n + m ≤ 2000.

1 ≤ runner_id ≤ 10^9.

Идентификаторы бегунов в первой таблице различны.

Длина name составляет от 1 до 20 символов латинского алфавита.

Длина date составляет от 1 до 10 символов. Если дата не равна NA, она состоит только из цифр и символов -.

0 ≤ distance ≤ 200.

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

Куда дальше