Votre fonction ou programme devrait prendre un an comme entrée et retourner (ou imprimer) la date (dans le calendrier grégorien) de cette année Pâques (pas la Pâques orthodoxe orientale). La date renvoyée doit être formatée selon ISO 8601, mais avec une prise en charge pour les années supérieures à 9999 (comme 312013-04-05 ou 20010130 ), et elle doit uniquement fonctionner avec des années supérieures ou égales à 1583 (l'année de la adoption du calendrier grégorien), et des années inférieures ou égales à 5701583 (car c'est à ce moment que la séquence des dates de Pâques commence à se répéter).
Exemples:
e(5701583) = 5701583-04-10
e(2013) = 2013-03-31
e(1583) = 1583-04-10
e(3029) = 30290322
e(1789) = 17890412
e(1725) = 17250401
L'utilisation de fonctions intégrées pour renvoyer la date de Pâques est ennuyeuse et donc interdite. La réponse la plus courte (en caractères) l'emporte.
Ressources:
Réponses:
GolfScript (85 caractères)
Exemple d'utilisation:
Notez que cela utilise un algorithme différent de la plupart des réponses actuelles. Pour être précis, j'ai adapté l'algorithme attribué à Lichtenberg dans la ressource liée par Sean Cheshire dans un commentaire sur la question.
L'algorithme d'origine, en supposant des types sensibles (c.-à-d. Pas les nombres de JavaScript) et avec une adaptation pour donner le mois * 31 + jour (en utilisant un décalage de jour de 0) est
J'ai extrait une sous-expression commune et fait quelques autres optimisations pour réduire à
Cette approche a des opérations arithmétiques légèrement plus nombreuses que l'autre (algorithme à 20 op d'Al Petrofsky), mais elle a des constantes plus petites; GolfScript n'a pas à se soucier des parenthèses supplémentaires car il est basé sur la pile, et puisque chaque valeur intermédiaire dans ma disposition optimisée est utilisée avec précision deux fois, elle correspond bien à la limitation de GolfScript d'un accès facile aux trois premiers éléments de la pile.
la source
Python 2 -
125120119 caractèresC'est la réponse de Fors sans vergogne portée sur Python.
Modifier : dernière ligne modifiée
print"%d-0%d-%02d"%(y,b/31,b%31+1)
pour enregistrer 5 caractères. J'aurais aimé représenter10000
as1e4
, mais cela produirait une virgule flottante nécessitant un appel àint
.Edit2 : Merci à Peter Taylor d'avoir montré comment s'en débarrasser
10000
et sauver 1 personnage.la source
10000
,100*100
vous pouvez mettre la dernière ligne sous la forme de Horner en tant que(y*100+b/31)*100+b%31+1
. La parenthèse de tête vous permet de supprimer l'espace aprèsprint
, et vous pouvez extraire les trois instances de100
dans une variable pour une économie globale de 1 caractère.e(y)
et économiser quelques octetsPHP 154
150 caractères si je passe à YYYYMMDD au lieu de YYYY-MM-DD.
Avec les sauts de ligne:
Utilisation:
php easter.php 1997
Sortie:
1997-03-30
Utilisation:
php easter.php 2001
Sortie:
2001-04-15
la source
<?=$y=$argv[1],"-0",3+$m=($d=56-($c=($y%19*351-~(($a=$y/100|0)*29.32+($b=$a>>2)+13.54)*31.9)/33%29)-~($a-$b+$c-24-$y/.8)%7)>>5,31*$m-$d;
1725-04-1
au lieu de1725-04-01
.dc: 106 caractères
Usage:
Cela devrait pouvoir être raccourci en utilisant «d» et «r» au lieu de toutes les charges et tous les magasins.
la source
C:
151148 caractèresEt le même code, mais mieux formaté:
Il existe affreusement de nombreux algorithmes pour calculer la date de Pâques, mais seuls quelques-uns sont bien adaptés au golf par code.
la source
Javascript
162156145Inspiré par la solution PHP de @ jdstankosky ... Fournit le résultat YYYYMMDD ...
Maintenant réduit à:
Demande maintenant une entrée ... chaîne littérale réduite de "0" à 0 et laissez le travail de frappe lâche à mon avantage! :)
Encore réduit pour prendre en compte ES6 ...
e=y=>y+"0"+((d=56-(c=(y%19*351-31.9*~((b=(a=y/100|0)>>2)+29.32*a+13.54))/33%29|0)-~(a-b+c-24-y/.8)%7)>(f=31)?4:3)+(d-f>0&d-f<10?0:"")+(d>f?d-f:d)
la source
APL 132
Cet algorithme calcule le nombre de jours de Pâques par rapport au début de mars. La date est retournée au format AAAAMMJJ comme autorisé dans la question:
Prendre les cas de test d'origine:
la source
Fortran (GFortran) , 179 octets
Essayez-le en ligne!
Utilise l'algorithme "Pâques grégorienne modifiée" (Al Petrofsky) du deuxième lien de ressource. Étrangement, il échoue pour l'année 5701583 (et, apparemment, seulement pour cette année), prédisant la Pâques comme une semaine plus tôt. Imprime la date au
YYYYYYYMMDD
format, avec quelques espaces en tête si l'année comporte moins de sept chiffres.la source