sabato 8 giugno 2013

Doomsday+2


È del 2011 un'ulteriore "semplificazione" della formula $$y=\left(x+\left\lfloor\frac{x}{4}\right\rfloor\right)\bmod7$$ ad opera di Chamberlain Fong e Michael K. Walters (vedi qui e, soprattutto, qui). Si tratta di $$y=-\left(\frac{x+11\cdot (x\,{\rm mod}\,2)}{2}+11\cdot\left(\frac{x+11\cdot(x\,{\rm mod}\,2)}{2}{\rm mod}\,2\right)\right){\rm mod}\,7\;.$$
Cos'è 'sta roba? Vi chiederete.



Beh, a dispetto della sua apparente imperscrutabilità, questa versione offre alcuni vantaggi: essa permette di calcolare il valore dello spostamento $y$ con una semplice sequenza di passi che richiedono operazioni aritmetiche molto semplici. Vediamone una parafrasi dettagliata:
  • se $x$ è pari, dividi per due; se è dispari, aggiungi 11 e dividi per due;
  • se il risultato ottenuto è pari lascialo invariato, se è dispari aggiungi 11;
  • calcola il resto della divisione per 7;
  • sottrai da 7 quanto ottenuto.

Ad esempio (cfr. con i precedenti post), con $x=71$ iniziamo aggiungendo 11 e dividendo per 2, ottenendo 41, dispari. Aggiungiamo nuovamente 11, ottenendo 52; il resto di 52:7 è 3; sottraiamo 3 da 7, ottenendo 4. Analogamente, da $x=7$ otteniamo 18, dividiamo per 2 ottenendo 9, aggiungiamo 11, il resto di 20:7 è 6, che sottratto da 7 dà 1. Facile, no?

venerdì 7 giugno 2013

Doomsday+1


Apparentemente, dividere per quattro o per sette un numero di taglia moderata non è un'operazione del tutto agevole. Per questo motivo, nel 1973 Conway propose di rimpiazzare la formula$$ y=\left( x + \left\lfloor \frac{x}{4} \right\rfloor \right) \bmod 7 $$ con l'equivalente$$ y=\left( \left\lfloor \frac{x}{12} \right\rfloor + x \bmod 12 + \left\lfloor \frac{x \bmod 12}{4} \right\rfloor \right) \bmod 7 \quad,$$ che richiede la manipolazione di numeri più piccoli. In effetti, i primi due termini della somma sono quoziente e resto della divisione euclidea $x:12$, e il terzo si ricava facilmente dal secondo. Ad esempio (cfr. con il post di ieri), per $x=71=5\cdot12+11$ occorre calcolare $$ \left(5+11+\left\lfloor\frac{11}{4}\right\rfloor\right) \bmod 7 = \underbrace{\left(5+11+2\right) \bmod 7}_{18\,{\rm mod}\,7} =4 $$ e per $x=7=0\cdot12+7$ $$\left(0+7+\left\lfloor\frac{7}{4}\right\rfloor\right) \bmod 7 = \underbrace{(0+7+1)\bmod 7 }_{8\,{\rm mod}\,7}= 1 \;. $$ 

giovedì 6 giugno 2013

Oggi è doomsday


(essenzialmente, un altro post ispirato dal geniale John Conway).

L'altra sera, commentando le performances di un astro nascente del mentalismo (nonché mio ex-allievo), il discorso è caduto sulla sua capacità di azzeccare quasi istantaneamente il giorno della settimana relativo ad una qualsiasi data. In effetti, la facoltà potrebbe sembrare quasi paranormale (e magari un po' lo è, vista la sua velocità nell'eseguire i calcoli, anche se forse il suo metodo si basa su una serie di date memorizzate in precenza), ma in realtà l'esercizio è alla portata di chiunque abbia un minimo di scioltezza nel calcolo mentale.
Il procedimento descritto da Conway negli anni '70 (ma ispirato da altri autori, ad esempio Lewis Carroll) si basa sull'osservazione che alcune date facili da memorizzare (l'ultimo giorno di febbraio, la sequenza 4.4/6.6/8.8/10.10/12.12, le coppie 5.9/9.5 e 7.11/11.7, il 3 gennaio negli anni comuni e il 4 gennaio nei bisestili) cadono sempre nello stesso giorno della settimana. Identificato tale giorno, che Conway battezza con il pittoresco nome di doomsday, non è quindi difficile situare nella settimana una data qualsiasi. Ad esempio, dal momento che il doomsday per l'anno 1971 cade di domenica (vedremo poi perché), procedendo a ritroso dall'8 agosto è facile affermare che il sottoscritto nacque di lunedì (2 agosto).
Il problema si riduce quindi alla determinazione del doomsday per un dato anno; osservando che le date corrispondenti avanzano di un giorno all'interno della settimana ogni anno comune (perché $365=52 \cdot 7+1$) e di due giorni ogni anno bisestile (perché $366=52 \cdot 7+2$) non è difficile convincersi del fatto che la formula
$$ y=\left( x + \left\lfloor \frac{x}{4} \right\rfloor \right) \bmod 7 $$ (dove $\lfloor n \rfloor$ è la parte intera di $n$, cioè la sua approssimazione per difetto, e $n \bmod 7$ è il resto della divisione $n:7$) rappresenta lo spostamento dei doomsdays all'interno della settimana dopo che sono trascorsi $x$ anni. Aggiungendo tale spostamento al doomsday del primo anno del secolo (che Conway chiama anchor day), con $x$ pari al numero di anni trascorsi all'interno del secolo è poi facile ricavare il doomsday per l'anno $x$. Ad esempio, per l'anno 1971 poniamo $x=71$ e calcoliamo $$ \left( 71 + \left\lfloor \frac{71}{4} \right\rfloor \right) \bmod 7 = \left( 71 + 17 \right) \bmod 7 = 88 \bmod 7 = 4 \;. $$ Per il XX secolo (1900-1999) l'anchor day è mercoledì; pertanto il doomsday 1971 cade di "mercoledì più quattro", cioè di domenica. Gli anchor days sono facilmente memorizzabili, ripetendosi ogni quattro secoli (dal momento che il calendario gregoriano ha un ciclo di 400 anni): partendo dal 1900, sono mercoledì-martedì-domenica-venerdì (in breve MeMaDoVe).
Calcoliamo, a mo' di esempio conclusivo, il giorno di nascita di un certo Leonhard Euler (15 aprile 1707): la parte intera di 7:4 è 1, aggiungendolo a 7 otteniamo 8, che diviso per 7 dà resto 1; l'anchor day per il '700 è domenica (MeMaDoVe partendo dal '500), quindi il doomsday 1707 cade di lunedì; il 4 aprile (4.4) è un doomsday, aggiungendo 11=7+4 giorni possiamo quindi affermare che Eulero nacque di venerdì.