Entonces, ahora que es 2015, y un montón de respuestas del rompecabezas del año pasado ahora están comenzando a producir resultados no válidos , es hora de una pregunta sobre el número 2015.
Excepto ... ¿por qué? ¿No le gustaría que sus respuestas basadas en fechas al problema del año pasado fueran válidas? ¿Por qué no cambiamos nuestro calendario para que nunca sea 2015, y simplemente seguimos viviendo en 2014, para siempre jamás?
Definamos una nueva notación de fecha, llamada notación Eterna 2014 , de la siguiente manera:
- Para las fechas 2014 y anteriores, las fechas serán las mismas que en el calendario gregoriano proleptico .
- Para las fechas en los años 2015 y en adelante, el año se mantendrá en 2014, y el mes será el número que sería si el mismo ciclo mensual en 2014 continuara para siempre después del mes 12. Así
2015-02-08
sería2014-14-08
, y2020-12-31
sería2014-85-02
. Tenga en cuenta que los días bisiestos no se contabilizan porque 2014 no es un año bisiesto.
Su tarea es construir un programa o función que tomará una fecha astronómica juliana como entrada y devolverá una cadena con la fecha correspondiente a esa fecha juliana en notación Eterna 2014, en formato YYYY-MM-DD
o DD/MM/YYYY
.
Puede suponer que el día juliano ingresado siempre será un número entero desde 1721426
(1 de enero, 1) hasta 2914695
(23 de enero de 3268) inclusive. Los años pueden contener ceros iniciales para rellenar con 4 dígitos o no, pero los meses y días siempre deben tener ceros iniciales para rellenar con dos dígitos (y los años pueden no contener ceros iniciales para rellenar con cualquier número de dígitos que no sean 4).
Aquí hay algunos ejemplos de entradas y sus salidas, en todos los formatos aceptables:
> 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
No puede utilizar ninguna biblioteca de procesamiento de fechas incorporada en su idioma. Todos los cálculos deben hacerse algorítmicamente dentro del propio código fuente del programa.
El programa más corto (en bytes) para lograr esto en cualquier idioma gana.
Respuestas:
Python 2, 166 bytes
Esto recorre todos los días desde el 1 de enero, 1 (1721426) hasta la fecha dada, incrementando el día, mes y año actuales a medida que avanza. El último caso de prueba tarda aproximadamente un segundo en mi computadora.
La salida se imprime en el segundo formato:
fuente
Avestruz 0.5.0 , 197 bytes
Sin golf (ha):
Estoy ... realmente agotado de toda la felicidad del Año Nuevo y lo que no. Por eso no he jugado mucho al golf. Puedo o no volver para mejorarlo más tarde.
Algoritmo de https://en.wikipedia.org/wiki/Julian_day#Gregorian_calendar_from_Julian_day_number
fuente
PHP (278)
Ejecutar en línea de comando usando
php -R '<code>'
. (La bandera cuenta como un personaje).Versión más legible (ejecutar con nombre de archivo y sin
-R
):fuente
C (algo así como ... gcc lo permite) 183
Muchas advertencias por falta de estandarización y probablemente increíblemente inportable, pero hoy funciona en mi máquina.
Utiliza el mismo algoritmo que la respuesta de Python 2 de @grc
El resultado después de compilar es
fuente