Su función o programa debe tomar un año como entrada y devolver (o imprimir) la fecha (en el calendario gregoriano) de la Pascua de ese año (no la Pascua ortodoxa oriental). La fecha de devolución debe estar formateada de acuerdo con ISO 8601, pero con soporte para años superiores a 9999 (como 312013-04-05 o 20010130 ), y solo necesita trabajar con años mayores o iguales a 1583 (el año del adopción del calendario gregoriano), y años menores o iguales a 5701583 (ya que es cuando la secuencia de fechas de Pascua comienza a repetirse).
Ejemplos:
e(5701583) = 5701583-04-10
e(2013) = 2013-03-31
e(1583) = 1583-04-10
e(3029) = 30290322
e(1789) = 17890412
e(1725) = 17250401
El uso de funciones integradas para devolver la fecha de pascua es aburrido y, por lo tanto, no está permitido. La respuesta más corta (en caracteres) gana.
Recursos:
Respuestas:
GolfScript (85 caracteres)
Uso de la muestra:
Tenga en cuenta que esto utiliza un algoritmo diferente a la mayoría de las respuestas actuales. Para ser específicos, he adaptado el algoritmo atribuido a Lichtenberg en el recurso vinculado por Sean Cheshire en un comentario sobre la pregunta.
El algoritmo original, suponiendo tipos sensibles (es decir, no los números de JavaScript) y con una adaptación para dar mes * 31 + día (usando el desplazamiento de día de 0)
Extraje una subexpresión común e hice algunas otras optimizaciones para reducir a
Este enfoque tiene un poco más de operaciones aritméticas que el otro (algoritmo de 20 operaciones de Al Petrofsky), pero tiene constantes más pequeñas; GolfScript no necesita preocuparse por los paréntesis adicionales porque está basado en la pila, y dado que cada valor intermedio en mi diseño optimizado se usa con precisión dos veces, encaja perfectamente con la limitación de GolfScript de acceso fácil a los tres elementos principales de la pila.
fuente
Python 2 -
125120119 caracteresEsta es la respuesta de Fors descaradamente portada a Python.
Editar : se modificó la última línea
print"%d-0%d-%02d"%(y,b/31,b%31+1)
para guardar 5 caracteres. Me hubiera encantado representar10000
como1e4
, pero eso produciría un punto flotante que requeriría una llamadaint
.Edit2 : Gracias a Peter Taylor por mostrar cómo deshacerse de eso
10000
y guardar 1 personaje.fuente
10000
hasta100*100
que puede poner la última línea en forma de Horner como(y*100+b/31)*100+b%31+1
. El paréntesis inicial le permite eliminar el espacio despuésprint
, y puede extraer las tres instancias de100
una variable para un ahorro general de 1 carácter.e(y)
y guardar algunos bytesPHP 154
150 caracteres si cambio a AAAAMMDD en lugar de AAAA-MM-DD.
Con saltos de línea:
Uso:
php easter.php 1997
Salida:
1997-03-30
Uso:
php easter.php 2001
Salida:
2001-04-15
fuente
<?=$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
lugar de1725-04-01
.dc: 106 caracteres
Uso:
Esto debería poder acortarse usando 'd' y 'r' en lugar de todas las cargas y almacenes.
fuente
C:
151148caracteresY el mismo código, pero mejor formateado:
Hay terriblemente muchos algoritmos para calcular la fecha de Pascua, pero solo unos pocos son adecuados para el golf de código.
fuente
Javascript
162156145Inspirado en la solución PHP de @ jdstankosky ... Proporciona el resultado AAAAMMDD ...
Ahora reducido a:
Ahora pide entradas ... ¡redujo la cadena literal de "0" a 0 y dejé que la escritura suelta funcione a mi favor! :)
Reducido aún más para tener en cuenta 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)
fuente
APL 132
Este algoritmo calcula el número de días de Pascua en relación con el comienzo de marzo. La fecha se devuelve en el formato AAAAMMDD según lo permitido en la pregunta:
Tomando los casos de prueba originales:
fuente
Fortran (GFortran) , 179 bytes
Pruébalo en línea!
Utiliza el algoritmo de "Pascua Gregoriana Enmendada" (Al Petrofsky) del segundo enlace de recursos. Curiosamente, falla para el año 5701583 (y, aparentemente, solo para este año), prediciendo la Pascua como una semana antes. Imprime la fecha en
YYYYYYYMMDD
formato, con algunos espacios iniciales si el año tiene menos de siete dígitos.fuente