Date: Dê você o Match

author: Edson Alves, mojificado por Bruno Ribeiro

Preâmbulo

As expectativas legais e culturais para a representação de datas e horários variam entre os países, sendo importante estar ciente das formas de datas totalmente numéricas utilizadas em um país específico para saber qual data é pretendida.

Os escritores tradicionalmente escrevem datas abreviadas de acordo com o costume local, criando equivalentes totalmente numéricos para os formatos dia-mês, como "29 de março de 2024" (29/03/24, 29/03/2024, 29/3/2024, 29-03-2024, 29.03.2024, etc), e formatos mês-dia, como "29 de março de 2024" (03/29/24 ou 03/29/2024). Isso pode resultar em datas que são impossíveis de entender corretamente sem conhecer o contexto. Por exemplo, dependendo do estilo de ordenação, a data abreviada "01/11/06" pode ser interpretada como "1 de novembro de 2006" para DMY, "11 de janeiro de 2006" para MDY e "6 de novembro de 2001" para YMD.

Dentre os diferentes formatos para datas está o formato DD/MM/YYYY, majoritariamente utilizado no Brasil, onde o dia e o mês são representados por exatamente dois dígitos decimais e o ano por quatro dígitos. Mesmo impondo restrições aos possíveis valores como, por exemplo, 1DD311 \leq DD \leq 31, 1MM121 \leq MM \leq 12 e 1900YYYY20241900 \leq YYYY \leq 2024, ainda é possível representar datas inválidas. Por exemplo, 31/06/2023 e 29/02/2022 são datas inválidas, pois junho tem apenas 30 dias e 2022 não foi um ano bissexto, respectivamente.

Sua missão é dado um arquivo que pode conter datas no formato apresentado, escreva uma expressão regular (RegEx) em um arquivo .grepe a qual identifique quais delas são, de fato, datas válidas.

Arquivo

O arquivo .grepe será o equivalente a execução do seguinte comando no terminal em ambiente Unix:

$ grep -o -E 'regex' input

No qual regex é a expressão regular que resolve o problema e input é o arquivo com os casos a serem testados. Portanto, o arquivo deve conter única e exclusivamente apenas uma linha, a qual deve apresentar a expressão regular regex para o problema proposto.

Entrada

A entrada é composta por um único caso de teste, contendo NN (N>0N > 0) linhas. As linhas podem DD (D0D \geq 0) possíveis datas a serem analisadas.

Saída

Seu programa deverá imprimir as EE (E0E \geq 0) datas corretas de cada caso de teste.

Exemplos

Exemplo de entrada

14/06/2023 31/06/2023
29/02/2000
29/02/2022

12/34/5678
abcd 12345 ? FIM

Saída para o exemplo acima

14/06/2023
29/02/2000

Author: author: Edson Alves, mojificado por Bruno Ribeiro