Un alibi (quasi?) perfetto con una macro Word [ + una chicca Excel ]
Questa ipotesi audace trae ispirazione da un noto caso giudiziario attuale, ove i periti, informatici, hanno scagionato l’indagato avendo constatato che un documento al quale stava lavorando risultava ripetutamente salvato nel periodo in cui il crimine fu perpetrato.
La mia opinione è che tale perizia costituisca un alibi inoppugnabile... E tuttavia, lavorando di fantasia, ipotizzo una possibilità alternativa, beninteso da parte di una mente diabolica-ma-non-troppo. Dicendo “ma-non-troppo” ho in mente l’ideatore di un delitto perfetto o quasi basato sulla macro VBA seguente, incorporata nel documento .doc in questione:
Sub Alibi()
' k = 1 'Usato per debug
While True
MsgBox "Passaggio numero " & k 'Usato per debug
' k = k + 1 'Usato per debug
With Selection.Find
.Text = "Rossini"
.Replacement.Text = "####"
.Execute Replace:=wdReplaceAll
End With
' Pausa... (soluzione rudimentale)
' For i = 1 To 200000000
' Next
Attesa t:=Rnd * 50 ' In fase debug: 10 o 5
With Selection.Find
.Text = "####"
.Replacement.Text = "Rossini"
.Execute Replace:=wdReplaceAll
End With
ThisDocument.Save
Wend
End Sub
Sub Attesa(t As Double)
Dim QuestiSec As Double
QuestiSec = Timer
While Timer < QuestiSec + t
Wend
End Sub
Tale macro per ipotesi lavora in un documento che inizia come segue:
Tesi con alibi
By Gioacchino Rossini
ecc. ecc.
Inizialmente ho previsto 4 passaggi (con indice k), ciascuno composto di due fasi che prevedono la sostituzione di “Rossini” con 4 cancelletti e, rispettivamente, il ripristino di “Rossini”, quindi il salvataggio del file (di fatto immutato, ma – si badi bene – non credo che ciò non lasci traccia). Ogni ciclo di indice k termina con una pausa rozzamente emulata con un i che varia da 1 a 200000000.
Successivamente ho sostituito il (rozzo) ciclo di indice k con un loop senza fine While True... Wend inserendo un ritardo di durata casuale che sfrutta la routine Attesa a sua volta basata sul codice Timer. In tal modo si evita che i periti si insospettiscano constatando salvataggi a periodi fissi.
La macro non merita altri commenti se non quelli inseriti, comunque funziona. L’ipotetico criminale per sfruttarla dovrebbe:
1. Lanciarla prima di uscire;
2. Compiere la nefandezza (non cruenta, si spera!);
3. Tornare a casa;
4. Bloccare la macro con Ctrl+Break;
5. Eliminarla (!!!);
6. Proseguire con modifiche e salvataggi manuali per un tempo adeguato.
Un amico cui ho sottoposto la cosa mi ha obiettato che forse cancellando la macro, ne resterebbe traccia, chiedendomi se c'e un modo per far girare la macro su chiavetta USB.
Ecco cosa gli ho risposto:
Sulla seconda ipotesi non ho al momento elementi (ci penserò); comunque, ripeto, la macro fa parte del documento ma si trova nell'Editor Visual Basic, inoltre non penso che le tracce sul disco contengano le versioni integrali precedenti ma solo, appunto, tracce sintetiche del documento (che ovviamente è salvato come .doc in conformità all'ultimo salvataggio effettuato). Se ora, al ritorno dal delitto il delinquente non solo elimina la macro nell'Editor VBA ma compie ripetuti salvataggi a mano del documento, è perlomeno difficile che periti non dotati di qualità extrasensoriali possano recuperare il codice criminale...
Se qualcuno s’intende di tracce si faccia vivo.
La chicca per Excel (un modellino didattico)
Tutti o quasi conoscono la serie dei conigli immortali dell’estroso matematico pisano Fibonacci, perciò mi limito a ricordare che partendo con una coppia di ... conigli, pardon!, numeri 1 e 1 ogni successivo numero si ricava sommando i due precedenti. Ottenerla con formule su un foglio elettronico è un gioco da ragazzi.
Forse però non tutti sanno che dividendo ciascun membro della serie per il successivo si ottiene un’approssimazione sempre più precisa della sezione aura, un numero “magico” che a sua volta ricorre in molti campi (v. Wikipedia) espresso dalla formula che do senz’altro in stile excelliano:
=(RADQ(5)-1)/2
In soldoni, limitandosi alle cifre significative che Excel fornisce, trattasi di
0,618033988749895
Nel modellino didattico che propongo si scelgano due celle a piacere ma diciamo in cima alle colonne D ed E denominandole SezioneAura e, rispettivamente, Epsilon. Va da sé che la prima conterrà la formula o il valore omonimi, mentre nella seconda ospiterà un numero molto piccolo, diciamo 0,00000000001 (stiamo sempre, per forza di cose, nei limiti imposti da Excel).
Ciò fatto, inseriamo nelle colonne A, B e C formulette opportune, ottenendo risultati del genere seguente:
|
|
A |
B |
C |
|
1 |
1 |
|
|
|
2 |
1 |
|
|
|
3 |
2 |
0,5 |
FALSO |
|
4 |
3 |
0,666666667 |
FALSO |
|
5 |
5 |
0,6 |
FALSO |
|
6 |
8 |
0,625 |
FALSO |
|
7 |
13 |
0,615384615 |
FALSO |
|
8 |
21 |
0,619047619 |
FALSO |
|
9 |
34 |
0,617647059 |
FALSO |
|
10 |
55 |
0,618181818 |
FALSO |
|
11 |
89 |
0,617977528 |
FALSO |
|
12 |
144 |
0,618055556 |
FALSO |
|
13 |
233 |
0,618025751 |
FALSO |
|
14 |
377 |
0,618037135 |
FALSO |
|
15 |
610 |
0,618032787 |
FALSO |
|
16 |
987 |
0,618034448 |
FALSO |
|
17 |
1597 |
0,618033813 |
FALSO |
|
18 |
2584 |
0,618034056 |
FALSO |
|
19 |
4181 |
0,618033963 |
FALSO |
|
20 |
6765 |
0,618033999 |
FALSO |
|
21 |
10946 |
0,618033985 |
FALSO |
|
22 |
17711 |
0,61803399 |
FALSO |
|
23 |
28657 |
0,618033988 |
FALSO |
|
24 |
46368 |
0,618033989 |
FALSO |
Le formule nelle prime due colonne, ovviamente da introdurre a partire dalla riga 3 sono a questo punto scontate, comunque fornisco la prima coppia, che va more solito ricopiata verso il basso:
A3: =A1+A2
B3: =A2/A3
E la formula che parte in C3? I più accorti se ne saranno... accorti da soli. Ad ogni buon conto mi voglio rovinare, offrendo le prime tre:
C3: =ASS(B3-SezioneAura) <=Epsilon
C4: =ASS(B4-SezioneAura) <=Epsilon
C5: =ASS(B5-SezioneAura) <=Epsilon
Palesemente, danno una sfilza di valori logici FALSO nelle prime 27 celle, ma a partire dalla 28.ma comincia a spuntare il sospirato VERO:
|
|
A |
B |
C |
|
24 |
46368 |
0,618033989 |
FALSO |
|
25 |
75025 |
0,618033989 |
FALSO |
|
26 |
121393 |
0,618033989 |
FALSO |
|
27 |
196418 |
0,618033989 |
FALSO |
|
28 |
317811 |
0,618033989 |
VERO |
|
29 |
514229 |
0,618033989 |
VERO |
|
30 |
832040 |
0,618033989 |
VERO |
Formattazione condizionale
Sicuramente tutti avranno notato gli sfondi colorati che evidenziano viepiù l’agognato raggiungimento dell’approssimazione della dorata sezione. Sono stati ottenuti sfruttando la formattazione indicata nel titolo. Lascio per esercizio l’impostazione de formato condizionato di colonna C, mentre descrivo i passi per ottenere quella in colonna B.
1. Selezionare l’intero intervallo, diciamo C3:C40 (ex abundantia);
2. Attivare il comando Formattazione condizionali;
3. Opzione Nuova regola poi Utilizza una formula;
4. Nella susseguente casella ad hoc inserire la seguente formula:
=ASS($B3-$D$2)<=$E$2
5. Meditare, gente...
?>
?>