Der Valentinstag fällt dieses Jahr mit dem Doomsday zusammen.Nochmal.
Der Weltuntergang Regel ist ordentlich, hier ist ein JSL-Snippet, um einen Teil der Idee zu veranschaulichen.
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 ) )] );
Der coole Teil der Regel ist das denkwürdige Muster von Daten während des ganzen Jahres (zumindest nach Februar), die das ganze Jahr über auf denselben Wochentag fallen.Für 2015 ist der Tag des Jüngsten Gerichts Samstag ; 4.4.2015, 6.6.2015, 8.8.2015, 10.10.2015, 12.12.2015 sind alle Samstage, ebenso 7.11., 11.7., 5.9. und 9./ 5. DMY oder MDY.Glücklicherweise passieren Schalttage ziemlich früh im Jahr, sonst wäre die Regel hässlicher.
Die Funktion mod() wird in der obigen JSL verwendet, um die richtigen Tage im Januar und Februar abhängig von den Schaltjahren auszuwählen.Denken Sie daran, dass 2000 ein Schaltjahr war, weil es durch 400 teilbar war, obwohl die meisten durch 100 teilbaren Jahre keine Schaltjahre sind ... daher die Grenze der for-Schleife.
Sie wundern sich vielleicht über die Kette von ==-Vergleichen in JSL, besonders wenn Sie ein Programmierer sind, der mit fast jeder anderen Programmiersprache vertraut ist.JMP macht das wirklich.Zum Beispiel (nicht mix'n'match < Und > ),
1 < 2 < 3 < 4 < 5
1
Und
1 < 2 < 4 < 3 < 5
0
In der obigen JSL wird das Ergebnis der Kette von == zugewiesen Wirklich; Der Wert ist 1, also die !Wirklich test ist 0 und die JSL druckt nie ein Jahr, weil sie alle den Test bestehen.Wenn Sie 1900 oder 2100 zur for-Schleife hinzufügen, werden sie ausgegeben, nicht weil die Doomsday-Regel falsch ist, sondern weil die obige JSL nicht die richtigen Tage im Januar und Februar auswählt.
Auch die letzte Aussage bedarf einer kleinen Erklärung:
Write( {"Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"}[Wochentag( Datum DMY( 4, 4, 2015 ) )] );
Samstag
Das ist ein Aufruf der Funktion write(); die Liste der Tage in {geschweifte Klammern} wird durch den Ausdruck in [eckigen Klammern] tiefgestellt.DayOfWeek gibt 1 für Sonntag ... 7 für Samstag für das angegebene Datum zurück.Der 4. April ist immer der Tag des Jüngsten Gerichts.
Bearbeiten 30. September 2017: Formatierung reparieren