Ti sarà capitato una volta che un amico, che sosteneva di poterti leggere nel pensiero, ti facesse il seguente trucco: pensa a un numero tra 1 e 10; moltiplicalo per 9; somma le cifre del risultato (es. 23 -> 2 + 3 = 5); e sottrai 5 dalla somma. A questo punto potresti aver raggiunto il valore 4. Come faccio a saperlo? Usando lo stesso trucco del tuo amico. Lasciate che ve lo mostri usando Clojure. Per prima cosa, scriveremo una funzione che somma le cifre di un numero:
Il valore viene trasformato in una stringa, la funzione map trasforma ogni carattere della cifra in una lista di interi e la funzione apply somma la lista di interi, restituendo il totale a chi chiama la funzione sum-digits. Useremo questa funzione per comporre i calcoli del trucco:
La funzione puzzle esegue i calcoli nella sequenza che il vostro amico vi ha chiesto di fare. Prima, moltiplica il numero che abbiamo pensato per 9, poi somma le cifre del risultato e infine sottrae il totale per 5. Successivamente, scriveremo un’altra funzione per svelare il trucco:
La funzione range produce una sequenza di numeri che partono da 1 a 10 dove 11 non è incluso (1 2 3 4 5 6 7 8 9 10). La funzione mappa applica la funzione puzzle ad ogni numero della lista e produce un’altra lista con i risultati. Ora, eseguite la funzione unveil per vedere il risultato:
Oh, guardate! Per l’intervallo da 1 a 10, il risultato sarà sempre 4. In altre parole, uno schema. Gli schemi sono molto presenti nelle moltiplicazioni e quando si rimuovono tutti si hanno i numeri primi, come indicato da Mark Haddon nel suo libro “The Curious Incident of the Dog in the Night-Time”. Daniel Tammet esemplifica alcuni modelli nel suo libro “Thinking in Numbers: How Maths Illuminates Our Lives”. Quando moltiplichiamo qualsiasi numero pari per 5 otteniamo sempre numeri che finiscono in zero (per esempio 12 x 5 = 60) e quando lo facciamo con numeri dispari otteniamo sempre numeri che finiscono in 5. Nel caso di 9, ogni volta che moltiplichiamo 9 per un numero tra 1 e 10 e sommiamo le sue cifre otteniamo sempre 9.
Nella sequenza, sottrarre 5 da 9 non farà altro che distrarre la vostra attenzione dallo schema di moltiplicazione e addirittura migliorare il trucco. Per esempio: immaginate che ogni lettera dell’alfabeto abbia un numero corrispondente (A – 1, B – 2, C – 3, …). Ora, prendi il risultato (4) e ottieni la sua rispettiva lettera; pensa a un paese che inizia con questa lettera; prendi la quarta lettera di questo paese e pensa a un animale che inizia con questa lettera. C’è un’alta probabilità che la tua risposta finale sia “Danimarca” e “scimmia”. Prima che pensiate che vi stia leggendo nel pensiero, lasciate che vi spieghi cosa è appena successo.
In primo luogo, non ci sono molti paesi che iniziano con la “D”, la quarta lettera dell’alfabeto. Tra Danimarca, Gibuti, Dominica e Repubblica Dominicana, ricorderete facilmente la Danimarca. La quarta lettera della Danimarca è “M” e nessun animale che inizia con “M” è più famoso della scimmia, che viene subito in mente.
Mi sto divertendo a programmare in Clojure, non solo perché Clojure è divertente da imparare e insegnare, ma perché la programmazione non riguarda sempre cose serie. Essere in grado di programmare solo abbastanza codice per far accadere le cose stimola il pensiero, il problem solving e la creatività rispetto alla struttura, ai modelli, alle convenzioni e agli stili. Codificare dovrebbe essere rilassante, non stressante. Godetevelo!