El día de San Valentín coincide con el Día del Juicio Final este año.De nuevo.
El Día del Juicio Final La regla es ordenada, aquí hay un fragmento de JSL para ilustrar parte de la idea.
For( year = 1901, year <= 2099, year++, // 1900 was not a leap year and 2100 won't be
really =
Day Of Week( Date DMY( if(mod(year,4),3,4), 1, year ) ) == // 3rd day of January, 3 years out of 4
Day Of Week( Date DMY( if(mod(year,4),28,29), 2, year ) ) == // last day of February (29 on leap years)
Day Of Week( Date DMY( 14, 3, year ) ) == // PI-day
Day Of Week( Date DMY( 4, 4, year ) ) == // even months, same day, after February
Day Of Week( Date DMY( 6, 6, year ) ) == //
Day Of Week( Date DMY( 8, 8, year ) ) == //
Day Of Week( Date DMY( 10, 10, year ) ) == //
Day Of Week( Date DMY( 12, 12, year ) ) == //
Day Of Week( Date DMY( 7, 11, year ) ) == // familiar store name in US
Day Of Week( Date DMY( 11, 7, year ) ) == //
Day Of Week( Date DMY( 9, 5, year ) ) == // 9-to-5 working hours
Day Of Week( Date DMY( 5, 9, year ) ) == //
Day Of Week( Date DMY( 4, 7, year ) ) == // US Independence Day
Day Of Week( Date DMY( 26, 12, year ) ); // boxing day
If( !really, Show( year ) );
);
Write( "done\!n" );
Write( {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday"}[Day Of Week( Date DMY( 4, 4, 2015 ) )] );
La parte interesante de la regla es el patrón memorable de fechas a lo largo del año (después de febrero, al menos) que caen en el mismo día de la semana durante todo el año.Para 2015, el día del juicio final es el sábado ; 4/4/2015, 6/6/2015, 8/8/2015, 10/10/2015, 12/12/2015 son todos los sábados, al igual que 7/11, 11/7, 5/9 y 9/ 5. DMA o MDA.Afortunadamente para nosotros, los días bisiestos ocurren bastante temprano en el año o la regla sería más fea.
La función mod() se usa en el JSL anterior para elegir los días correctos en enero y febrero según los años bisiestos.Recuerde que 2000 fue un año bisiesto porque era divisible por 400, aunque la mayoría de los años divisibles por 100 no son años bisiestos... de ahí el límite del ciclo for.
Quizás se esté preguntando acerca de la cadena de comparaciones == en el JSL, especialmente si es un programador familiarizado con casi cualquier otro lenguaje de programación.JMP realmente hace eso.Por ejemplo (no mezcle y combine < y > ),
1 < 2 < 3 < 4 < 5
1
y
1 < 2 < 4 < 3 < 5
0
En el JSL anterior, el resultado de la cadena de == se asigna a en realidad; el valor es 1 entonces el !en realidad test es 0 y JSL nunca imprime un año porque todos pasan la prueba.Si agrega 1900 o 2100 al ciclo for, se imprimirán, no porque la regla del fin del mundo sea incorrecta, sino porque el JSL anterior no elige los días correctos en enero y febrero.
La declaración final también necesita un poco de explicación:
Write( {"Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"}[Día de la semana( Fecha DMY(4, 4, 2015))]);
Sábado
Esa es una llamada a la función write(); la lista de días entre {corchetes} está subíndice con la expresión entre [corchetes].DayOfWeek devuelve 1 para el domingo ... 7 para el sábado para cualquier fecha que se proporcione.El 4 de abril siempre es el Día del Juicio Final.
editar 30 de septiembre de 2017: reparar el formato