El dĆa 256 del aƱo se celebra el dĆa de los programadores (13 de septiembre los aƱos normales y 12 de septiembre los bisiestos). El nĆŗmero 256 (2^⁸) fue el elegido porque es el nĆŗmero de distintas combinaciones que pueden representarse con 8 bits, nĆŗmero muy conocido entre los programadores.
Enunciado del ejercicio
Marie inventĆ³ una mĆ”quina del tiempo y quiere probarla viajando en el tiempo para visitar Rusia en el DĆa del Programador (el dĆa 256 del aƱo) durante un aƱo en el rango inclusivo de 1700 a 2700.
De 1700 a 1917, el calendario oficial de Rusia fue el calendario juliano; desde 1919 utilizaron el sistema de calendario gregoriano . La transiciĆ³n del sistema de calendario juliano al gregoriano ocurriĆ³ en 1918, cuando el dĆa siguiente al 31 de enero fue el 14 de febrero. Esto significa que en 1918, el 14 de febrero era el dĆa 32 del aƱo en Rusia.
En ambos sistemas de calendario, febrero es el Ćŗnico mes con una cantidad variable de dĆas; tiene 29 dĆas durante un aƱo bisiesto y 28 dĆas durante los demĆ”s aƱos. En el calendario juliano, los aƱos bisiestos son divisibles por 4; en el calendario gregoriano, los aƱos bisiestos son cualquiera de los siguientes:
Divisible por 400.
Divisible por 4 y no divisible por 100.
Dado un aƱo, y, encuentre la fecha del dĆa 256 de ese aƱo de acuerdo con el calendario oficial ruso durante ese aƱo. Luego imprĆmalo en el formato dd.mm.yyyy
, donde ddes el dĆa de dos dĆgitos, mmes el mes de dos dĆgitos y yyyy es y.
Por ejemplo, el dado el aƱo = 1984. 1984 es divisible por 4, por lo que es un aƱo bisiesto. El dĆa 256 de un aƱo bisiesto despuĆ©s de 1918 es el 12 de septiembre, por lo que la respuesta es 12-09-1984.
FunciĆ³n descriptiva
Complete la funciĆ³n dayOfProgrammer. DeberĆa devolver una cadena que represente la fecha del dĆa 256 del aƱo indicado.
dayOfProgrammer tiene los siguientes parƔmetros:
aƱo: un entero
Formato de entrada
Un solo entero que denota el aƱo.
Restricciones
1700 < year < 2700
Formato de salida
Imprima la fecha completa del dĆa del programador durante el aƱo en el formato dd.mm.yyyy
, donde dd es el dĆa de dos dĆgitos, mm es el mes de dos dĆgitos y yyyy es el aƱo.
Entrada de muestra 0
2017
Salida de muestra 0
13.09.2017
ExplicaciĆ³n 0
En el aƱo = 2017, enero tiene 31 dĆas, febrero tiene 28 dĆas, marzo tiene 31 dĆas, abril tiene 30 dĆas, mayo tiene 31 dĆas, junio tiene 30 dĆas, julio tiene 31 dĆas y agosto tiene 31 dĆas. Cuando sumamos el nĆŗmero total de dĆas en los primeros ocho meses, obtenemos 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 = 243. El dĆa del programador es el dĆa 256, entonces calcula 256 - 243 = 13 para determinar que cae el dĆa 13 del noveno mes (septiembre). Luego imprimimos la fecha completa en el formato especificado, que es 13.09.2017.
Entrada de muestra 1
2016
Salida de muestra 1
12.09.2016
ExplicaciĆ³n 1
AƱo = 2016 es un aƱo bisiesto, por lo que febrero tiene 29 dĆas, pero todos los demĆ”s meses tienen el mismo nĆŗmero de dĆas que en 2017. Cuando sumamos el nĆŗmero total de dĆas en los primeros ocho meses, obtenemos 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 = 244. El dĆa del programador es el dĆa 256, entonces calcule 256 - 244 = 12 para determinar que cae en el dĆa 12 del noveno mes (septiembre). Luego imprimimos la fecha completa en el formato especificado, que es 12.09.2016.
Entrada de muestra 2
1800
Salida de muestra 2
12.09.1800
ExplicaciĆ³n 2
Dado que 1800 es un aƱo bisiesto segĆŗn el calendario juliano. El dĆa es el 12 de septiembre.
SoluciĆ³n
PHP
function dayOfProgrammer($year) {
// Write your code here
if($year == 1918){
return ('26.09.'.$year);
}
else if($year >= 1700 && $year <= 1917){
return ($year % 4 == 0 ? '12.09.'.$year : '13.09.'.$year);
}else if($year > 1918 && $year <= 2700){
return (date('L', mktime(0, 0, 0, 1, 1, $year)) ? '12.09.'.$year : '13.09.'.$year);
}
}
ExplicaciĆ³n
Si el aƱo es igual a 1918 debido a la transiciĆ³n que hubo en Rusia en cuanto al uso del calendario Juliano al calendario Gregoriano, el 14 de febrero fue el dĆa 32 del aƱo, por lo tanto ese aƱo 1918 el dĆa del programador, el dĆa 256 del aƱo fue el 26 de septiembre.
El ejercicio explica que en el calendario juliano que estuvo en Rusia antes de 1918 las condiciones para que un aƱo bisiesto son diferentes a las del calendario gregoriano, por lo tanto se debe hacer la condiciĆ³n de cuando el aƱo era menor o igual a 1917, o mayor a 1918 para evaluar de diferente manera el aƱo bisiesto.
La funciĆ³n date('L', mktime(0, 0, 0, 1, 1, $year)
en PHP devuelve un valor booleano (falso o verdadero) si el aƱo es bisiesto o no. Function date PHP - StackOverflow answer