Parece que ainda não temos este, então vamos lá:
O desafio
Escreva um programa ou função que tome uma data como entrada e emita o número do dia do ano. Você não pode usar nenhum built-in para isso!
Regras
- Como de costume, você pode escrever um programa completo ou uma função.
- O formato da entrada é com você, mas deve conter um ano, um mês e um dia. Deixe claro qual a sua solução usa!
- Não são permitidos embutidos relacionados à data! Você tem que fazer o trabalho sozinho. Construções que não estão relacionadas às operações da data estão corretas.
- A base para o cálculo é o calendário gregoriano.
- Você tem que levar em consideração os anos bissextos.
- Você só precisa lidar com anos no intervalo [1, 9999]
- As brechas padrão são proibidas.
- Menor contagem de bytes ganha!
Casos de teste
O formato de entrada aqui é AAAA / MM / DD
2016/07/05 -> 187
2000/03/28 -> 88
0666/06/06 -> 157
6789/10/11 -> 284
0004/04/04 -> 95
1337/07/13 -> 194
Feliz codificação!