Valószínűleg egyszer szembesültél egy barátoddal, aki azt állította, hogy képes olvasni a gondolataidban, a következő trükkel: Gondolj egy 1 és 10 közötti számra; szorozd meg 9-cel; add össze az eredmény számjegyeit (pl. 23 -> 2 + 3 = 5); és vond ki az összegből az 5-öt. Ezen a ponton elérheted a 4-es értéket. Honnan tudom ezt? Ugyanazzal a trükkel, mint a barátod. Hadd mutassam meg a Clojure segítségével. Először is írunk egy függvényt, amely összeadja egy szám szám számjegyeit:
Az értéket karakterlánccá alakítjuk, a map függvény minden egyes számjegy karakterét egész számok listájává alakítja, az apply függvény pedig összeadja az egész számok listáját, és az összeget visszaadja a sum-digits függvény hívójának. Ezzel a függvénnyel fogjuk összeállítani a trükk számításait:
A függvény puzzle a barátod által kért sorrendben végzi el a számításokat. Először megszorozza az általunk gondolt számot 9-cel, majd az eredmény számjegyeit összeadja, végül az összeget kivonja 5-tel. Ezután írunk egy másik függvényt a trükk leleplezéséhez:
A tartomány függvény egy 1-től 10-ig terjedő számsorozatot állít elő, amelyben a 11 nem szerepel (1 2 3 4 5 6 7 8 9 10). A függvénytérkép a listában lévő minden egyes számra alkalmazza a függvénykirakót, és egy másik listát állít elő az eredményekkel. Most pedig hajtsuk végre az unveil függvényt, hogy lássuk az eredményt:
Oh, nézd! Az 1-től 10-ig terjedő tartományban az eredmény mindig 4 lesz. Más szóval, egy minta. A mintázatok nagyon is jelen vannak a szorzásokban, és ha az összeset eltávolítjuk, akkor prímszámokat kapunk, ahogy erre Mark Haddon rámutatott “A kutya különös incidense az éjszakában” című könyvében. Daniel Tammet a “Thinking in Numbers” című könyvében mutat be néhány mintát: How Maths Illuminates Our Lives” című könyvében. Amikor bármilyen páros számot megszorozunk 5-tel, mindig nullára végződő számokat kapunk (pl. 12 x 5 = 60), amikor pedig páratlan számokkal tesszük ezt, mindig 5-re végződő számokat kapunk. A 9 esetében minden alkalommal, amikor 9-et megszorozzuk egy 1 és 10 közötti számmal, és annak számjegyeit összeadjuk, mindig 9-et kapunk.
A sorozatban a 9-ből 5 kivonása csak eltereli a figyelmet a szorzási mintáról, és még javítja is a trükköt. Például: képzeljük el, hogy az ábécé minden betűjéhez tartozik egy megfelelő szám (A – 1, B – 2, C – 3, …). Most vegyük az eredményt (4), és kapjuk meg a hozzá tartozó betűt; gondoljunk egy országra, amely ezzel a betűvel kezdődik; vegyük ennek az országnak a negyedik betűjét, és gondoljunk egy állatra, amely ezzel a betűvel kezdődik. Nagy a valószínűsége, hogy a végső válaszod “Dánia” és “majom” lesz. Mielőtt azt hinnéd, hogy olvasok a gondolataidban, hadd magyarázzam el, mi történt.
Először is, nem sok olyan ország van, amely az ábécé negyedik betűjével, a “D”-vel kezdődik. Dánia, Dzsibuti, Dominika és a Dominikai Köztársaság közül könnyen eszedbe jut Dánia. Dánia negyedik betűje az “M”, és nincs olyan állat, amelyik “M”-mel kezdődik, és híresebb, mint a majom, ami azonnal eszedbe jut.
Nem csak azért, mert a Clojure-t jó tanulni és tanítani, hanem azért is, mert a programozás nem mindig a komoly dolgokról szól. Az, hogy csak annyi kódot tudsz programozni, hogy a dolgok megtörténjenek, serkenti a gondolkodást, a problémamegoldást és a kreativitást a struktúrával, mintákkal, konvenciókkal és stílusokkal szemben. A kódolásnak pihentetőnek kell lennie, nem stresszesnek. Élvezd!