U bent waarschijnlijk ooit geconfronteerd met een vriend, die beweerde uw gedachten te kunnen lezen, door de volgende truc uit te halen: denk aan een getal tussen 1 en 10; vermenigvuldig het met 9; tel de cijfers van het resultaat bij elkaar op (b.v. 23 -> 2 + 3 = 5); en trek 5 af van de som. Op dit punt hebt u misschien de waarde 4 bereikt. Hoe weet ik dat? Door dezelfde truc van je vriend te gebruiken. Ik zal het je laten zien met Clojure. Eerst gaan we een functie schrijven die de cijfers van een getal optelt:
De waarde wordt omgezet in een string, de map-functie zet elk cijferkarakter om in een lijst van gehele getallen en de functie apply telt de lijst van gehele getallen op, waarbij het totaal wordt teruggegeven aan de aanroeper van de functie sum-digits. We gaan deze functie gebruiken om de berekeningen van de truc samen te stellen:
De functie puzzel voert de berekeningen uit in de volgorde die uw vriend u heeft gevraagd te doen. Eerst vermenigvuldigt het het getal dat we dachten met 9, vervolgens telt het de cijfers van het resultaat op en tenslotte trekt het het totaal af met 5. Vervolgens gaan we een andere functie schrijven om de truc te onthullen:
De functie bereik produceert een reeks getallen beginnend met 1 tot 10 waarbij 11 niet is inbegrepen (1 2 3 4 5 6 7 8 9 10). De functie map past de functie puzzel toe op elk getal in de lijst en produceert een andere lijst met de resultaten. Voer nu de functie onthullen uit om het resultaat te zien:
Oh, kijk! Voor het bereik van 1 tot 10 is het resultaat altijd 4. Met andere woorden, een patroon. Patronen zijn zeer aanwezig in vermenigvuldigingen en als je ze allemaal weghaalt heb je priemgetallen, zoals Mark Haddon aangeeft in zijn boek “The Curious Incident of the Dog in the Night-Time”. Daniel Tammet illustreert enkele patronen in zijn boek “Thinking in Numbers: How Maths Illuminates Our Lives”. Wanneer we een even getal vermenigvuldigen met 5 krijgen we altijd getallen die eindigen op nul (bv. 12 x 5 = 60) en wanneer we dat doen met oneven getallen krijgen we altijd getallen die eindigen op 5. In het geval van 9, telkens wanneer we 9 vermenigvuldigen met een getal tussen 1 en 10 en we de cijfers optellen krijgen we altijd 9.
In de reeks zal het aftrekken van 5 van 9 alleen maar je aandacht afleiden van het vermenigvuldigingspatroon en de truc zelfs verbeteren. Bijvoorbeeld: stel je voor dat elke letter van het alfabet een corresponderend getal heeft (A – 1, B – 2, C – 3, …). Neem nu de uitkomst (4) en verkrijg de bijbehorende letter; denk aan een land dat met deze letter begint; neem de vierde letter van dit land en denk aan een dier dat met deze letter begint. Er is een grote kans dat uw uiteindelijke antwoord “Denemarken” en “aap” zal zijn. Voordat je denkt dat ik je gedachten lees, laat me uitleggen wat er zojuist gebeurd is.
Ten eerste, er zijn niet veel landen die beginnen met “D”, de vierde letter van het alfabet. Van Denemarken, Djibouti, Dominica en de Dominicaanse Republiek, zult u zich Denemarken snel herinneren. De vierde letter van Denemarken is “M” en geen dier dat begint met “M” is beroemder dan de aap, die onmiddellijk in je gedachten komt.
Ik heb plezier in het programmeren in Clojure, niet alleen omdat Clojure leuk is om te leren en te onderwijzen, maar omdat programmeren niet altijd over serieuze zaken gaat. In staat zijn om net genoeg code te programmeren om dingen te laten gebeuren stimuleert het denken, het oplossen van problemen en creativiteit boven structuur, patronen, conventies en stijlen. Coderen hoort ontspannend te zijn, niet stressvol. Geniet ervan!