El calendario Mel se usa en el mundo ficticio de Kaldia. Su objetivo es convertir las fechas en el calendario Mel.
Este calendario tiene 13 meses de 28 días cada uno, más 1 o 2 días adicionales después del último mes. Un año que es divisible por 4 pero no por 100, o divisible por 400 tiene 366 días, y otros años tienen 365 (es decir, nuestras reglas de año bisiesto, pero con años en el calendario Mel).
Debe usar las abreviaturas de los nombres de mes y día :
meses: dia vio lis gil ful dyu mel ral zan pal mik fav ruj
días: dia vio lis gil ful dyu mel ral zan pal mik fav ruj ser rav tan lin rez jil din ket len lax nen pin mat kun mir
Los días adicionales fuera de cualquier mes tienen el nombre del mes myuxet
(sin abreviatura aquí), y los nombres de los días son axet
y teems
, respectivamente.
0 dia dia
es 1988/11/30.
Puede tomar la fecha de entrada como una cadena o una tupla (año, mes, día); alternativamente, para funciones, el parámetro puede estar en el tipo de fecha de su biblioteca estándar. La salida debe ser una cadena separada por espacios.
Casos de prueba
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
Debería poder manejar las fechas desde 1 AD hasta 9999 AD por lo menos.
Implementación de referencia en Perl 6
Las lagunas estándar están prohibidas.
axet
yteems
al final del año, estaba confundido hasta que miré el enlace-213 Ral Ket
?Respuestas:
Perl 6 , 174 bytes
Pruébalo en línea!
Genere una lista de todas las fechas válidas y luego indexe el día del año en esa lista.
Explicación
fuente
Rubí ,
199195193 bytesOof, solo
232729 bytes guardados sobre el código Perl de muestra ...-4 bytes de @NickKennedy.
-2 bytes de @Neil.
Pruébalo en línea!
fuente
y<364
en lugar dem<13
y luego inlining el último uso dem
. Pruébalo en línea!Japt
-S
, 148 bytesGuardado 4 bytes gracias a @Shaggy. + Mucho más bytes debido a correcciones de errores. Toma meses como números indexados a 0.
Japt tiene manejo de fecha incorporado, pero no es muy bueno. En serio, ¿34 bytes para inicializar una fecha, luego restar días de ella y luego calcular qué día del año es?
Intentalo
fuente
-S
". Puede guardar 2 bytes reemplazando ambas ocurrencias de13
conD
. Echaré otro vistazo por la mañana (cuando no esté en el pub, en mi teléfono) para ver si puedo ver algún otro ahorro, pero+1
mientras tanto puedo vencer a Jelly por un margen significativo.sT
; hay un atajo para eso;)Jalea ,
181164 bytesPruébalo en línea!
Jelly no tiene un manejo de fecha incorporado, por lo que esto recurre a la funcionalidad dentro del módulo de tiempo de Python.
Explicación
fuente
diact viol lisk...
) está escrita extrañamente para comprimir mejor?C # (compilador interactivo de Visual C #) , 247 bytes
Pruébalo en línea!
fuente
JavaScript (ES6),
297269252249245 bytesToma la entrada como un objeto de fecha de JavaScript en UTC (sería 1 byte menos como un número de marca de tiempo de JavaScript). Editar: Guardado
37 bytes gracias a @Arnauld.Pruébalo en línea! si el fragmento aún no funciona para usted por alguna razón.
fuente
30 dyu undefined
esto en Firefox.Date.UTC
tiene la misma longitud quenew Date
!Haskell ,
387373372 bytesPruébalo en línea!
Toma la entrada como un
Day
objeto.¡Fue muy divertido escribirlo! La idea básica es construir una lista de fechas e indexarla para obtener el resultado. La función
a
lleva un año y genera todas las fechas de ese año en orden cronológico. La función sef
expande ala
concatenarlos juntos durante años sucesivos a partir de 0. El truco es que para las fechas anteriores a la época tenemos que recorrer hacia atrás a partir del año -1, por lo que pasamos los valores -1, -2 ... y revertimos cada lista individualmente antes de concatenarlos juntos. Finalmente, en funciónf
calculamos el número de días entre la época y nuestra fecha (convirtiéndola deInteger
aInt
) e indexamos en nuestra lista, teniendo cuidado de arreglar nuestro índice si es negativo.EDITAR: golfed hacia abajo (-14)
EDIT 2: golfed la lista de nombres de día / mes (-1)
fuente