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!
Respostas:
Pitão, 31 bytes
Obrigado a @Dennis e @Jakube pela parte do ano bissexto . A entrada é AAAA, MM, DD em linhas separadas.
Conjunto de teste .
fonte
JavaScript ES6,
8169 bytesSupondo que os meses sejam baseados em 1, caso contrário, eu poderia salvar 2 bytes.
Editar: salvou 12 bytes usando a dica de @ user81655.
fonte
C,
961028961 bytesfonte
Python 3,
152148150 bytesTira datas no formato "MD YYYY".
fonte
print n[m-1]+d
Python 2,
10082 bytesUma porta Python da resposta de @ Neil :
Como na resposta anterior, adicionar 17 bytes (99 bytes no total) produzirá um programa completo:
Resposta anterior:
Como um lambda anônimo:
Pode ser convertido em um lambda nomeado por uma penalidade de 2 bytes. Como alternativa, um programa completo (com entrada no formato
D,M,Y
) pode ser alcançado por 117 bytes:fonte
Python 3, 125 bytes
Uma outra abordagem para esse problema. O código aproveita as prioridades de execução da álgebra booleana do Python e, como
not
é a última operação, a conversão para booleano é automática. Quando a soma é feita, o booleano é tratado como 1 ou 0. O formato de entrada é a sequência "AA MM DDDD". Sistema de entrada inspirado no sistema semelhante de @ SteveEckert .Outra forma como uma função, 91 bytes
Nesse caso, a entrada é de três números inteiros, sendo o mês entre 0 e 11. Isso funcionaria no Python 2 também.
fonte
Excel, 106 bytes
Recebe entrada em três células
A1
= Ano,B1
= Mês,C1
= Dia.1
se LeapYear, mais0
Múltiplo de
30
, ESCOLHA por dias adicionais, mais dias no mêsEvolução:
fonte