Donc, maintenant que nous sommes en 2015, et un tas de réponses du puzzle de l'année dernière commencent maintenant à produire une sortie invalide , il est temps de poser une question concernant le numéro 2015.
Sauf ... pourquoi? N'aimeriez-vous pas que vos réponses basées sur la date au problème de l'an dernier restent valables? Pourquoi ne changeons-nous pas notre calendrier pour que ce ne soit jamais 2015 et que nous continuions simplement à vivre en 2014, pour toujours et à jamais?
Définissons une nouvelle notation de date, appelée notation Eternal 2014 , comme suit:
- Pour les dates 2014 et antérieures, les dates seront les mêmes que dans le calendrier grégorien proleptique .
- Pour les dates des années 2015 et suivantes, l'année restera 2014 et le mois sera le nombre qu'il serait si le même cycle de mois en 2014 devait se poursuivre indéfiniment au cours du mois 12. Il en
2015-02-08
serait de même2014-14-08
et le2020-12-31
serait2014-85-02
. Notez que les jours bissextiles ne sont pas pris en compte car 2014 n'est pas une année bissextile.
Votre tâche consiste à créer un programme ou une fonction qui prendra en entrée une date astronomique julienne et renverra une chaîne avec la date correspondant à cette date julienne en notation Eternal 2014, au format YYYY-MM-DD
ou DD/MM/YYYY
.
Vous pouvez supposer que le jour julien entré sera toujours un entier du 1721426
(1er janvier 1) au 2914695
(23 janvier 3268) inclus. Les années peuvent contenir des zéros non significatifs pour remplir à 4 chiffres ou non, mais les mois et les jours doivent toujours avoir des zéros non significatifs pour remplir à deux chiffres (et les années ne peuvent pas contenir de zéros non significatifs pour remplir à n'importe quel nombre de chiffres autres que 4).
Voici quelques exemples d'entrées et leurs sorties, dans tous les formats acceptables:
> 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
Vous ne pouvez utiliser aucune bibliothèque de traitement de date intégrée dans votre langue. Tous les calculs doivent être effectués de manière algorithmique dans le code source du programme lui-même.
Le programme le plus court (en octets) pour y parvenir dans n'importe quelle langue gagne.
Réponses:
Python 2, 166 octets
Cela passe tous les jours du 1er janvier 1 (1721426) à la date donnée, en incrémentant le jour, le mois et l'année en cours au fur et à mesure. Le dernier cas de test prend environ une seconde sur mon ordinateur.
La sortie est imprimée dans le deuxième format:
la source
Autruche 0.5.0 , 197 octets
Non golfé (ha):
Je suis ... vraiment juste épuisé de tout le bonheur du Nouvel An et pas. C'est pourquoi je n'ai pas beaucoup joué au golf. Je pourrai ou non revenir pour l'améliorer plus tard.
Algorithme de https://en.wikipedia.org/wiki/Julian_day#Gregorian_calendar_from_Julian_day_number
la source
PHP (278)
Exécutez sur la ligne de commande en utilisant
php -R '<code>'
. (Le drapeau compte pour un caractère.)Version plus lisible (exécutez en utilisant le nom de fichier et sans
-R
):la source
C (sorte de ... gcc le permet) 183
Beaucoup d'avertissements pour non-standardité et probablement incroyablement non portable, mais cela fonctionne sur ma machine aujourd'hui.
Il utilise le même algorithme que la réponse Python 2 par @grc
La sortie après la compilation est
la source