Il giorno di San Valentino quest'anno coincide con il giorno del giudizio.Ancora.
IL Giorno del giudizio la regola è chiara, ecco uno snippet JSL per illustrare parte dell'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 interessante della regola è lo schema memorabile delle date durante tutto l'anno (almeno dopo febbraio) che cadono nello stesso giorno della settimana per tutto l'anno.Per il 2015, Doomsday è sabato ; 4/4/2015, 6/6/2015, 8/8/2015, 10/10/2015, 12/12/2015 sono tutti sabati, così come 7/11, 11/7, 5/9 e 9/ 5. DMY o MDY.Fortunatamente per noi i giorni bisestili accadono abbastanza presto nell'anno o la regola sarebbe più brutta.
La funzione mod() viene utilizzata nel JSL sopra per scegliere i giorni giusti in gennaio e febbraio a seconda degli anni bisestili.Ricorda che il 2000 era un anno bisestile perché era divisibile per 400, anche se la maggior parte degli anni divisibili per 100 non sono bisestili... quindi il limite del ciclo for.
Potresti chiederti della catena di confronti == nel JSL, specialmente se sei un programmatore che ha familiarità con quasi tutti gli altri linguaggi di programmazione.JMP lo fa davvero.Ad esempio (non mischiare e abbinare < E > ),
1 <2
<4 <5
1
E
1 <2 <4
<5
0
Nel JSL sopra, il risultato della catena di == è assegnato a Veramente; il valore è 1 quindi il !Veramente test è 0 e JSL non stampa mai un anno perché tutti superano il test.Se aggiungi 1900 o 2100 al ciclo for, verranno stampati, non perché la regola Doomsday sia sbagliata, ma perché il JSL sopra non sceglie i giorni giusti a gennaio e febbraio.
Anche la frase finale ha bisogno di una piccola spiegazione:
Write( {"Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"}[Giorno della settimana( Data GMA( 4, 4, 2015 ) )] );
Sabato
Questa è una chiamata alla funzione write(); l'elenco dei giorni tra {parentesi graffe} è preceduto dall'espressione tra [parentesi quadre].DayOfWeek restituisce 1 per domenica ... 7 per sabato per qualsiasi data fornita.Il 4 aprile è sempre il giorno del giudizio.
modifica 30 settembre 2017: riparazione della formattazione