O calendário Mel é usado no mundo fictício de Kaldia. Seu objetivo é converter datas no calendário Mel.
Este calendário tem 13 meses de 28 dias cada, mais 1 ou 2 dias extras após o último mês. Um ano que é divisível por 4, mas não por 100, ou divisível por 400 tem 366 dias, e outros anos têm 365 (ou seja, o ano bissexto rege, mas com anos no calendário Mel).
Você deve usar as abreviações do nome do mês e do dia :
meses: dia vio lis gil ful dyu mel ral zan pal mik fav ruj
dias: dia vio lis gil dyu mel ral zan pal mik fav ruj ser rav tan lin rez jil din ket len lax nen pin mat kun mir
Os dias extras fora de qualquer mês têm o nome do mês de myuxet
(sem abreviação aqui) e os nomes dos dias são axet
e teems
, respectivamente.
0 dia dia
é 30/11/1988.
Você pode considerar a data de entrada como uma string ou uma tupla (ano, mês, dia); Como alternativa, para funções, o parâmetro pode estar no tipo de data da sua biblioteca padrão. A saída deve ser uma cadeia de caracteres separada por espaço.
Casos de teste
1776-07-04 => -213 ral ket
1859-12-15 => -129 dia rav
1917-04-14 => -72 ful nen
1981-02-04 => -8 lis mik
1988-11-30 => 0 dia dia
1988-12-01 => 0 dia vio
1988-12-28 => 0 vio dia
2017-01-01 => 28 vio ful
2019-04-22 => 30 dyu lis
2019-11-30 => 30 myuxet axet
2019-12-01 => 31 dia dia
2021-11-29 => 32 myuxet axet
2021-11-30 => 32 myuxet teems
2089-11-30 => 101 dia dia
2389-11-30 => 400 myuxet teems
Você deve poder lidar com datas de 1 a 9999 dC, pelo menos.
Implementação de referência no Perl 6
As brechas padrão são proibidas.
axet
eteems
estão no final do ano, eu estava confuso até que eu olhei para o link-213 Ral Ket
?Respostas:
Perl 6 , 174 bytes
Experimente online!
Gere uma lista de todas as datas válidas e indexe o dia do ano nessa lista.
Explicação
fonte
Rubi ,
199195193 bytesOof, apenas
232729 bytes salvos no código Perl de amostra ...-4 bytes de @NickKennedy.
-2 bytes de @Neil.
Experimente online!
fonte
y<364
vez dem<13
e, em seguida, inline o último uso dem
. Experimente online!Japonês
-S
, 148 bytesGuardado 4 bytes graças a @Shaggy. + Muito mais bytes devido a correções de bugs. Leva meses como números indexados em 0.
Japt possui manipulação de datas embutida, mas não é muito boa. Sério, 34 bytes para inicializar uma data, depois subtrair dias dela e calcular qual dia do ano é?
Tente
fonte
-S
". Você pode salvar 2 bytes substituindo as duas ocorrências de13
porD
. Vou dar uma outra olhada de manhã (quando não estou no pub, no meu telefone) para ver se consigo ver outras economias, mas,+1
enquanto isso, ganho Jelly por uma margem significativa.sT
; existe um atalho para isso;)Geléia ,
181164 bytesExperimente online!
O Jelly não possui manipulação de data integrada, portanto, isso recai na funcionalidade do módulo de tempo do Python.
Explicação
fonte
diact viol lisk...
) é escrita estranhamente para comprimir melhor?C # (compilador interativo do Visual C #) , 247 bytes
Experimente online!
fonte
JavaScript (ES6),
297269252249245 bytesRecebe a entrada como um objeto de data JavaScript no UTC (seria 1 byte a menos como um número de carimbo de data / hora do JavaScript). Edit: Salvo
37 bytes graças a @Arnauld.Experimente online! se o snippet ainda não estiver funcionando para você por algum motivo.
fonte
30 dyu undefined
com isso no Firefox.Date.UTC
tem o mesmo comprimento quenew Date
!Haskell ,
387373372 bytesExperimente online!
Recebe entrada como um
Day
objeto.Foi muito divertido escrever! A idéia básica é criar uma lista de datas e indexá-la para o resultado. A função
a
leva um ano e gera todas as datas naquele ano em ordem cronológica. A função sef
expande aoa
concatená-los juntos por anos sucessivos a partir de 0. O truque é que, para datas anteriores à época, precisamos retroceder a partir do ano -1, para passarmos os valores -1, -2 ... e reverter cada lista individualmente antes de concatená-los juntos. Finalmente, em funçãof
, calculamos o número de dias entre a época e nossa data (convertendo-a deInteger
paraInt
) e indexamos em nossa lista, tomando o cuidado de corrigir nosso índice, se for negativo.EDIT: reduziu (-14)
EDIT 2: jogou golfe na lista de nomes de dia / mês (-1)
fonte