La Saint-Valentin coïncide avec Doomsday cette année.Encore.
Le jour du Jugement dernier règle est soignée, voici un extrait JSL pour illustrer une partie de l'idée.
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 partie intéressante de la règle est le schéma mémorable des dates tout au long de l'année (après février, au moins) qui tombent le même jour de la semaine toute l'année.Pour 2015, Doomsday est samedi ; 4/4/2015, 6/6/2015, 8/8/2015, 10/10/2015, 12/12/2015 sont tous les samedis, ainsi que 7/11, 11/7, 5/9 et 9/ 5. DMY ou MDY.Heureusement pour nous, les jours bissextiles se produisent assez tôt dans l'année, sinon la règle serait plus laide.
La fonction mod() est utilisée dans le JSL ci-dessus pour choisir les bons jours en janvier et février en fonction des années bissextiles.Rappelez-vous que 2000 était une année bissextile parce qu'elle était divisible par 400, même si la plupart des années divisibles par 100 ne sont pas des années bissextiles... d'où la limite de la boucle for.
Vous vous interrogez peut-être sur la chaîne de comparaisons == dans le JSL, surtout si vous êtes un programmeur familier avec presque tous les autres langages de programmation.JMP fait vraiment cela.Par exemple (ne mélangez pas < et > ),
1 < 2 < 3 < 4 < 5
1
et
1 < 2 < 4 < 3 < 5
0
Dans le JSL ci-dessus, le résultat de la chaîne de == est affecté à vraiment; la valeur est 1 donc !vraiment test est 0 et le JSL n'imprime jamais une année car ils réussissent tous le test.Si vous ajoutez 1900 ou 2100 à la boucle for, ils s'imprimeront, non pas parce que la règle Doomsday est fausse, mais parce que le JSL ci-dessus ne sélectionne pas les bons jours en janvier et février.
La déclaration finale a également besoin d'un peu d'explication:
Write( {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"}[Jour de la semaine( Date DMY( 4, 4, 2015 ) )] );
Samedi
C'est un appel à la fonction write() ; la liste des jours entre { accolades } est indicée par l'expression entre [ crochets ].DayOfWeek renvoie 1 pour dimanche ... 7 pour samedi quelle que soit la date fournie.Le 4 avril est toujours le Doomsday.
edit 30Sep2017 : réparer la mise en forme