Isso é inspirado em uma das perguntas de Downgoat no Sandbox, onde sugeri que ele incluísse o dia 31 de abril como dia do Pi para pessoas que usam o formato dia / mês, apenas para que ele me informasse que não há 31 de abril!
Dada uma sequência de datas no formato mês / dia que pode ser inválida, imprima a data correta usando rollover. (Primeiro rollover do mês e depois rollover do dia).
Exemplos:
"15/43" - é o 43º dia do 15º mês. Primeiro, rolamos o mês para o próximo ano e terminamos com 3 (março). Agora, como março tem apenas 31 dias, passamos os dias extras para abril, e produzimos a data real como "4/12" (12 de abril).
"3/16" - esta é uma data válida (16 de março). Devolva como está.
"12/64" - Ah, tantas boas lembranças de 64 de dezembro ... Dezembro tem 31 dias, janeiro tem 31 dias, então o que eu realmente quero dizer é "2/2" (2 de fevereiro).
"19/99" - Primeiro, os 19 se tornam 7 (julho). Julho tem 31 dias, agosto tem 31 dias, setembro tem 30 dias, portanto a saída é "10/7" (7 de outubro).
"1/99999" - um ano tem 365 dias. 99999 (mod 365) = 354. Os 354 dias do ano são "12/20" .
"9999999/10" - aparentemente, 9999999 (mod 12) = 3, então isso é "3/10" (10 de março).
Critério:
O mês de entrada é um número inteiro> 0. O dia de entrada é um número inteiro> 0. O ano nunca precisa ser especificado, portanto, não há anos bissextos para lidar.
Atualizar:
Como acho que simplificaria demais o desafio, funções de calendário, como as da classe Java Calendar , são proibidas. As funções de análise / formatação de data ainda são permitidas.
1/99999
deve render,12/19
eu acho.Respostas:
LabVIEW, 32 primitivas do LabVIEW
fonte
C #,
269223Edit : Corrigido para trabalhar em casos como 24/1, 36/1, etc. e jogava golfe um pouco. Obrigado pelos comentários, existem vários lugares que salvei um pouco!
Ungolfed:
fonte
24/1
.Console.Write
mais do quereturn
, e em C # eu usariachar[]
como substitutostring
, mas é a mesma quantidade de caracteres e torna a divisão/
mais problemática. Mas, sua anotação no Dicionário me levou a uma versão muito melhor!R,
208182 bytesAdquira o mês dividindo por 12 e, em seguida, faça um loop, removendo o número de dias do mês atual até obter um número negativo., Inverse a última etapa e imprima.
Em várias linhas (é necessário usar um arquivo e originar):
fonte
PHP> = 5.5, 181 bytes
O PHP quase suporta rollover apenas com instruções de análise e formatação de datas. Por exemplo:
No entanto, uma vez que qualquer número fica maior que 100, o PHP rejeita a análise e retorna um erro (provavelmente por algum motivo arbitrário). Portanto, a teoria com esta resposta é voltar ao local onde o PHP irá analisá-lo e enviá-lo para
date_create_from_format()
.Ungolfed:
Experimente online
fonte
$argv
ou STDIN.$t
para$argv[1]
e agora ele lê da entrada da linha de comando.JavaScript (ES6), 106 bytes
Explicação
Teste
Mostrar snippet de código
fonte
Resposta não concorrente - Bash + coreutils, 55
"As funções de análise / formatação de data ainda são permitidas" - presumo que isso signifique
date
utilitário é permitido.A entrada é lida na linha de comando, por exemplo:
Isso não é concorrente porque o comando date se expande para algo assim, que está adicionando vários dias:
fonte
date.add(875)
incrementar a data em 875 dias. Isso é principalmente o que eu estava procurando.date
comando totalmente expandido aqui édate -d1-3-1+42day +%-m/%-d
, então está fazendo exatamente isso. Eu acho que essa é uma resposta não competitiva, então :(