Sie wurden wahrscheinlich einmal von einem Freund, der behauptete, Ihre Gedanken lesen zu können, mit folgendem Trick konfrontiert: Denken Sie an eine Zahl zwischen 1 und 10; multiplizieren Sie sie mit 9; addieren Sie die Ziffern des Ergebnisses (z. B. 23 -> 2 + 3 = 5); und ziehen Sie 5 von der Summe ab. An dieser Stelle haben Sie vielleicht den Wert 4 erreicht. Woher weiß ich das? Mit demselben Trick wie Ihr Freund. Ich zeige es Ihnen anhand von Clojure. Zuerst werden wir eine Funktion schreiben, die die Ziffern einer Zahl summiert:
Der Wert wird in eine Zeichenkette umgewandelt, die Funktion map wandelt jedes Ziffernzeichen in eine Liste von Ganzzahlen um und die Funktion apply summiert die Liste der Ganzzahlen und gibt die Summe an den Aufrufer der Funktion sum-digits zurück. Wir werden diese Funktion verwenden, um die Berechnungen des Tricks zusammenzustellen:
Die Funktion puzzle führt die Berechnungen in der Reihenfolge aus, um die Ihr Freund Sie gebeten hat. Zuerst multipliziert sie die gedachte Zahl mit 9, dann summiert sie die Ziffern des Ergebnisses und schließlich subtrahiert sie die Summe mit 5. Als Nächstes schreiben wir eine weitere Funktion, um den Trick zu enthüllen:
Die Funktion range erzeugt eine Folge von Zahlen von 1 bis 10, wobei 11 nicht enthalten ist (1 2 3 4 5 6 7 8 9 10). Die Funktion map wendet die Funktion puzzle auf jede Zahl in der Liste an und erzeugt eine weitere Liste mit den Ergebnissen. Führen Sie nun die Funktion unveil aus, um das Ergebnis zu sehen:
Oh, schau mal! Für den Bereich von 1 bis 10 wird das Ergebnis immer 4 sein. Mit anderen Worten: ein Muster. Muster kommen bei Multiplikationen häufig vor, und wenn man alle entfernt, erhält man Primzahlen, wie Mark Haddon in seinem Buch “The Curious Incident of the Dog in the Night-Time” zeigt. Daniel Tammet veranschaulicht einige Muster in seinem Buch “Thinking in Numbers: How Maths Illuminates Our Lives”. Wenn wir eine gerade Zahl mit 5 multiplizieren, erhalten wir immer Zahlen, die auf Null enden (z. B. 12 x 5 = 60), und wenn wir dies mit ungeraden Zahlen tun, erhalten wir immer Zahlen, die auf 5 enden. Im Fall von 9 erhalten wir jedes Mal, wenn wir 9 mit einer Zahl zwischen 1 und 10 multiplizieren und ihre Ziffern summieren, immer 9.
In der Folge lenkt das Subtrahieren von 5 von 9 nur von dem Multiplikationsmuster ab und verbessert den Trick sogar noch. Ein Beispiel: Stellen Sie sich vor, dass zu jedem Buchstaben des Alphabets eine entsprechende Zahl gehört (A – 1, B – 2, C – 3, …). Nehmen Sie nun das Ergebnis (4) und den entsprechenden Buchstaben; denken Sie an ein Land, das mit diesem Buchstaben beginnt; nehmen Sie den vierten Buchstaben dieses Landes und denken Sie an ein Tier, das mit diesem Buchstaben beginnt. Die Wahrscheinlichkeit ist groß, dass Ihre endgültige Antwort “Dänemark” und “Affe” sein wird. Bevor du denkst, ich lese deine Gedanken, lass mich erklären, was gerade passiert ist.
Erstens gibt es nicht viele Länder, die mit “D”, dem vierten Buchstaben des Alphabets, beginnen. Unter Dänemark, Dschibuti, Dominica und der Dominikanischen Republik fällt dir sicher Dänemark ein. Der vierte Buchstabe Dänemarks ist “M”, und kein Tier, das mit “M” beginnt, ist berühmter als der Affe, der einem sofort in den Sinn kommt.
Ich habe Spaß daran, in Clojure zu programmieren, nicht nur, weil es Spaß macht, Clojure zu lernen und zu lehren, sondern weil es beim Programmieren nicht immer um ernste Dinge geht. In der Lage zu sein, gerade so viel Code zu programmieren, dass etwas passiert, regt das Denken, die Problemlösung und die Kreativität mehr an als Strukturen, Muster, Konventionen und Stile. Programmieren soll entspannend sein, nicht stressig. Genießen Sie es!