Então, agora que é 2015, e várias respostas do quebra-cabeça do ano passado estão começando a produzir resultados inválidos , é hora de fazer uma pergunta sobre o número 2015.
Exceto ... por quê? Você não gostaria que suas respostas baseadas em datas para o problema do ano passado permanecessem válidas? Por que não mudamos nosso calendário para que nunca seja 2015 e simplesmente continuamos vivendo em 2014, para todo o sempre?
Vamos definir uma nova notação de data, denominada notação Eterna 2014 , da seguinte maneira:
- Para as datas de 2014 e anteriores, as datas serão as mesmas do calendário gregoriano proléptico .
- Para as datas dos anos de 2015 em diante, o ano permanecerá em 2014 e o mês será o número que seria se o mesmo ciclo do mês em 2014 continuasse para sempre após o mês 12. Assim
2015-02-08
seria2014-14-08
e2020-12-31
seria2014-85-02
. Observe que os dias bissextos não são contabilizados porque 2014 não é um ano bissexto.
Sua tarefa é criar um programa ou função que terá como data astronômica juliana como entrada e retornará uma string com a data correspondente a essa data juliana na notação Eterna 2014, em um YYYY-MM-DD
ou outro DD/MM/YYYY
formato.
Você pode supor que o dia juliano inserido sempre será um número inteiro de 1721426
(1 de janeiro de 1) a 2914695
(23 de janeiro de 3268), inclusive. Os anos podem conter zeros à esquerda para preencher com 4 dígitos ou não, mas os meses e os dias devem sempre ter zeros à esquerda para preencher com dois dígitos (e os anos não podem conter zeros à esquerda para preencher com qualquer número de dígitos além de 4).
Aqui estão alguns exemplos de entradas e saídas, em todos os formatos aceitáveis:
> 1721426
1-01-01
01/01/1
0001-01-01
01/01/0001
> 2086302
999-12-31
31/12/999
0999-12-31
31/12/0999
> 2456659
2014-01-01
01/01/2014
> 2456789
2014-05-11
11/05/2014
> 2457024
2014-13-01
01/13/2014
> 2457389
2014-25-01
01/25/2014
> 2469134
2014-411-07
07/411/2014
> 2567890
2014-3657-29
29/3657/2014
> 2914695
2014-15059-23
23/15059/2014
Você não pode usar nenhuma biblioteca interna de processamento de datas no seu idioma. Todos os cálculos devem ser feitos algoritmicamente dentro do próprio código fonte do programa.
O programa mais curto (em bytes) para conseguir isso em qualquer idioma vence.
Respostas:
Python 2, 166 bytes
Isso alterna todos os dias de 1º de janeiro de 1 (1721426) até a data especificada, incrementando o dia, o mês e o ano atuais. O último caso de teste leva cerca de um segundo no meu computador.
A saída é impressa no segundo formato:
fonte
Avestruz 0.5.0 , 197 bytes
Ungolfed (ha):
Estou ... realmente exausta de toda a felicidade do Ano Novo e o que não. É por isso que não tenho jogado muito isso. Eu posso ou não voltar para melhorar depois.
Algoritmo de https://en.wikipedia.org/wiki/Julian_day#Gregorian_calendar_from_Julian_day_number
fonte
PHP (278)
Execute na linha de comando usando
php -R '<code>'
. (A bandeira conta como um caractere.)Versão mais legível (execute usando o nome do arquivo e sem
-R
):fonte
C (tipo de ... gcc permite) 183
Muitos avisos de não padronização e provavelmente incrivelmente não portáveis, mas hoje funciona na minha máquina.
Ele usa o mesmo algoritmo da resposta Python 2 de @grc
A saída após a compilação é
fonte