On dirait que nous n'avons pas encore celui-ci, alors c'est parti:
Le défi
Écrivez un programme ou une fonction qui prend une date en entrée et affiche le numéro du jour de l'année. Vous ne pouvez pas utiliser de modules intégrés pour cela!
Règles
- Comme d'habitude, vous pouvez écrire un programme complet ou une fonction.
- Le format de l'entrée dépend de vous, mais il doit contenir un an, un mois et un jour. Précisez laquelle utilise votre solution!
- Aucune construction liée à la date n'est autorisée! Tu dois faire le travail par toi-même. Les valeurs intégrées qui ne sont pas liées aux opérations de date sont correctes.
- La base du calcultion est le calendrier grégorien.
- Vous devez tenir compte des années bissextiles.
- Il vous suffit de gérer des années dans la plage [1, 9999]
- Les failles standard sont interdites.
- Le nombre d'octets le plus bas gagne!
Cas de test
Le format d'entrée ici est AAAA / MM / JJ
2016/07/05 -> 187
2000/03/28 -> 88
0666/06/06 -> 157
6789/10/11 -> 284
0004/04/04 -> 95
1337/07/13 -> 194
Codage heureux!
Réponses:
Pyth, 31 octets
Merci à @Dennis et @Jakube pour la partie année bissextile . L'entrée est AAAA, MM, JJ sur des lignes séparées.
Suite de tests .
la source
JavaScript ES6,
8169 octetsEn supposant que les mois sont basés sur 1, sinon je pourrais économiser 2 octets.
Edit: 12 octets enregistrés en utilisant le conseil de @ user81655.
la source
C,
961028961 octetsla source
Python 3,
152148150 octetsPrend des dates au format "MD YYYY".
la source
print n[m-1]+d
Python 2,
10082 octetsUn port Python de la réponse de @ Neil :
Comme pour la réponse précédente, l'ajout de 17 octets (99 octets au total) donnera un programme complet:
Réponse précédente:
En tant que lambda anonyme:
Peut être converti en lambda nommé pour une pénalité de 2 octets. Alternativement, un programme complet (prenant des entrées au format
D,M,Y
) peut être réalisé pour 117 octets:la source
Python 3, 125 octets
Une autre approche de ce problème. Le code tire parti des priorités d'exécution de l'algèbre booléenne de Python et comme
not
c'est la dernière opération, la conversion en booléen est automatique. Lorsque la sommation est effectuée, le booléen est traité comme 1 ou 0. Le format d'entrée est une chaîne "YY MM DDDD". Système d'entrée inspiré de celui similaire de @ SteveEckert .Une autre forme en fonction, 91 octets
Dans ce cas, l'entrée est de trois entiers, le mois étant compris entre 0 et 11. Cela fonctionnerait également dans Python 2.
la source
Excel, 106 octets
Prend la saisie dans trois cellules
A1
= Année,B1
= Mois,C1
= Jour.1
si LeapYear, sinon0
Multiple de
30
, CHOISIR pour des jours supplémentaires, plus les jours du moisÉvolution:
la source