Ați fost probabil confruntat odată cu un prieten, care pretindea că vă poate citi gândurile, făcând următorul truc: Gândiți-vă la un număr între 1 și 10; înmulțiți-l cu 9; adunați cifrele rezultatului (de exemplu, 23 -> 2 + 3 = 5); și scădeți 5 din sumă. În acest moment este posibil să fi ajuns la valoarea 4. De unde știu asta? Folosind același truc al prietenului tău. Permiteți-mi să vă arăt folosind Clojure. În primul rând, vom scrie o funcție care însumează cifrele unui număr:
Valoarea este transformată într-un șir de caractere, funcția map transformă fiecare caracter al cifrei într-o listă de numere întregi, iar funcția apply însumează lista de numere întregi, returnând totalul celui care a apelat funcția sum-digits. Vom folosi această funcție pentru a compune calculele trucului:
Funcția puzzle efectuează calculele în secvența pe care prietenul tău ți-a cerut să le faci. Mai întâi înmulțește numărul la care ne-am gândit cu 9, apoi însumează cifrele rezultatului și în final scade totalul cu 5. În continuare, vom scrie o altă funcție pentru a dezvălui trucul:
Funcția range produce o secvență de numere începând de la 1 la 10 în care nu este inclus 11 (1 2 3 4 5 6 7 8 9 10). Funcția map aplică funcția puzzle la fiecare număr din listă și produce o altă listă cu rezultatele. Acum, executați funcția unveil pentru a vedea rezultatul:
Oh, uite! Pentru intervalul de la 1 la 10, rezultatul va fi întotdeauna 4. Cu alte cuvinte, un model. Modelele sunt foarte prezente în înmulțiri, iar când le eliminați pe toate aveți numere prime, așa cum a arătat Mark Haddon în cartea sa “The Curious Incident of the Dog in the Night-Time”. Daniel Tammet exemplifică câteva tipare în cartea sa “Thinking in Numbers: How Maths Illuminates Our Lives” (Cum ne luminează matematica viața). Când înmulțim orice număr par cu 5 obținem întotdeauna numere care se termină în zero (de exemplu, 12 x 5 = 60), iar când facem acest lucru cu numere impare obținem întotdeauna numere care se termină în 5. În cazul lui 9, de fiecare dată când multiplicăm 9 cu un număr cuprins între 1 și 10 și adunăm cifrele sale, obținem întotdeauna 9.
În secvență, scăderea lui 5 din 9 nu va face decât să vă distragă atenția de la modelul înmulțirii și chiar să îmbunătățească trucul. De exemplu: imaginați-vă că fiecare literă a alfabetului are un număr corespunzător (A – 1, B – 2, C – 3, …). Acum, luați rezultatul (4) și obțineți litera respectivă; gândiți-vă la o țară care începe cu această literă; luați a patra literă a acestei țări și gândiți-vă la un animal care începe cu această literă. Există o mare probabilitate ca răspunsul final să fie “Danemarca” și “maimuță”. Înainte de a crede că vă citesc gândurile, lăsați-mă să vă explic ce tocmai s-a întâmplat.
În primul rând, nu există multe țări care încep cu “D”, a patra literă a alfabetului. Printre Danemarca, Djibouti, Dominica și Republica Dominicană, vă veți aminti cu ușurință de Danemarca. A patra literă a Danemarcei este “M” și niciun animal care începe cu “M” nu este mai faimos decât maimuța, care îți vine imediat în minte.
Mă distrez programând în Clojure, nu doar pentru că Clojure este distractiv de învățat și de predat, ci și pentru că programarea nu este întotdeauna despre lucruri serioase. A fi capabil să programezi doar suficient cod pentru a face lucrurile să se întâmple stimulează gândirea, rezolvarea problemelor și creativitatea peste structură, modele, convenții și stiluri. Codificarea ar trebui să fie relaxantă, nu stresantă. Bucurați-vă de ea!