Prawdopodobnie spotkałeś się kiedyś z przyjacielem, który twierdził, że potrafi czytać w twoich myślach, wykonując następującą sztuczkę: Pomyśl o liczbie pomiędzy 1 a 10; pomnóż ją przez 9; zsumuj cyfry wyniku (np. 23 -> 2 + 3 = 5); i odejmij 5 od sumy. W tym momencie być może osiągnąłeś wartość 4. Skąd mam to wiedzieć? Używając tej samej sztuczki, którą zastosował twój przyjaciel. Pozwól, że pokażę ci to używając Clojure. Najpierw napiszemy funkcję sumującą cyfry liczby:
Wartość jest przekształcana na łańcuch znaków, funkcja map przekształca każdy znak cyfry na listę liczb całkowitych, a funkcja apply sumuje listę liczb całkowitych, zwracając sumę do wywołującego funkcję sum-digits. Użyjemy tej funkcji do skomponowania obliczeń sztuczki:
Funkcja puzzle wykonuje obliczenia w takiej kolejności, o jaką poprosił Cię kolega. Najpierw mnoży liczbę, o której myśleliśmy przez 9, następnie sumuje cyfry wyniku, a na koniec odejmuje sumę przez 5. Następnie napiszemy kolejną funkcję, która odsłoni sztuczkę:
Funkcja zakres tworzy ciąg liczb od 1 do 10, w którym nie ma 11 (1 2 3 4 5 6 7 8 9 10). Funkcja mapa stosuje funkcję puzzle do każdej liczby na liście i tworzy kolejną listę z wynikami. Teraz wykonaj funkcję unveil, aby zobaczyć wynik:
Och, spójrz! Dla zakresu od 1 do 10, wynikiem zawsze będzie 4. Innymi słowy, jest to wzór. Wzory są bardzo obecne w mnożeniu, a gdy usuniemy wszystkie z nich, mamy liczby pierwsze, na co zwrócił uwagę Mark Haddon w książce “The Curious Incident of the Dog in the Night-Time”. Daniel Tammet w swojej książce “Thinking in Numbers: How Maths Illuminates Our Lives”. Kiedy mnożymy dowolną liczbę parzystą przez 5, zawsze otrzymujemy liczby kończące się na zero (np. 12 x 5 = 60), a kiedy robimy to z liczbami nieparzystymi, zawsze otrzymujemy liczby kończące się na 5. W przypadku 9, za każdym razem, kiedy mnożymy 9 przez liczbę z przedziału od 1 do 10 i sumujemy jej cyfry, zawsze otrzymujemy 9.
W tej sekwencji odjęcie 5 od 9 tylko odwróci twoją uwagę od wzoru mnożenia, a nawet poprawi sztuczkę. Na przykład: wyobraź sobie, że każda litera alfabetu ma odpowiadającą jej liczbę (A – 1, B – 2, C – 3, …). Teraz weź wynik (4) i otrzymaj odpowiadającą mu literę; pomyśl o kraju, który zaczyna się na tę literę; weź czwartą literę tego kraju i pomyśl o zwierzęciu, które zaczyna się na tę literę. Istnieje duże prawdopodobieństwo, że twoją ostateczną odpowiedzią będzie “Dania” i “małpa”. Zanim pomyślisz, że czytam w twoich myślach, pozwól mi wyjaśnić, co właśnie się stało.
Po pierwsze, nie ma wielu krajów, które zaczynają się od “D”, czwartej litery alfabetu. Wśród Danii, Dżibuti, Dominiki i Dominikany, łatwo zapamiętasz Danię. Czwartą literą Danii jest “M” i żadne zwierzę, które zaczyna się na “M” nie jest bardziej znane niż małpa, która natychmiast przychodzi na myśl.
Bawię się programowaniem w Clojure, nie tylko dlatego, że Clojure jest zabawne do nauki i nauczania, ale dlatego, że programowanie nie zawsze dotyczy poważnych rzeczy. Możliwość zaprogramowania tylko tyle kodu, żeby coś się stało, stymuluje myślenie, rozwiązywanie problemów i kreatywność ponad strukturą, wzorcami, konwencjami i stylami. Kodowanie ma być relaksujące, a nie stresujące. Ciesz się tym!