
Am 30. September fiel mir das Pi-Puzzle von getDigital beim Umräumen wieder in die Hände. Das schenkten mir meine Freunde zum 40. Geburtstag. Es kann auch später gewesen sein. Jedenfalls war es nicht das erste Mal, dass ich es in der Hand hielt, um es dann doch nach eingehender Betrachtung ehrfurchtsvoll wieder zurück ins Regal zu legen. Immerhin sind es 1008 Teile, jedes davon ist mit etwa 70 Ziffern der Zahl Pi bedruckt. Die Farben sind fast einheitlich, homogen. Die Ziffern von Pi bilden darauf einen hellgrünen, ebenfalls relativ monotonen Teppich. Damals dachte ich im ersten Moment, sie mögen mich nicht mehr. Doch sie glaubten natürlich an mich, dass ich dem gewachsen bin, als ich es noch nicht glaubte. Diesmal legte ich es nicht zurück ins Regal, sondern auf meinen Basteltisch. Dort wird bekannlich gebastelt, was auf den Tisch kommt.
Hier nochmal: Danke für das tolle Geschenk!


Ich startete mit der Challenge ganz klassisch. Die Kiste und die Tüte mit den Teilen öffnen und die Teile vorsichtig in der Kiste vereinzeln. Ein paar Teile hingen wohl noch seit der Stanzung zusammen und bildeten größere Verbände (Cluster). Das ist schonmal ein guter Anfang und legte die separat. Dann — wie bei jedem anderen Puzzle auch — suchte ich alle Kantenteile heraus, denn der Rand ist Stütze und Orientierung für den Rest. Doch anders als bei Bilderpuzzles sehen hier die Kantenteile auch alle mehr oder weniger gleich aus — sie unterscheiden sich nur durch die aufgedruckten Ziffern.
Bis ich den Schlüssel des Ganzen in der Hand hielt:

Dieses Puzzleteil enthält zwei wichtige Informationen: Die letzten Ziffern des Pi-Puzzles und eine Möglichkeit, die Zeilenlänge zu ermitteln.
Für ein vergangenes Projekt hatte ich von pi-zahl.de die erste Million Stellen von Pi heruntergeladen und alle Zeilenumbrüche entfernt, weil ich das so brauchte. Das ist also meine Datenbasis: pi_oneline.txt
Die kopierte ich in eine neue Datei und suchte ebenfalls im Texteditor nach den letzten Ziffern »8689294«. Die Ziffern danach löschte ich raus. Der Cursor stand an Position 74.901, somit sind genau 74.900 Ziffern auf dem Puzzle: Eine 3, ein Komma und 74898 Nachkommastellen.
Auf die gleiche Weise fand ich das Ende der vorletzten Zeile »3044446« vor der Position 74551 und das der vorletzte Zeile »25589708« vor der Position 74201.
Die letzte Zeile ist also 74901 — 74551 = 350 Ziffern lang. Die vorletzte Zeile ist mit 74551 — 74201 auch 350 Ziffern lang! Gilt das vielleicht für alle anderen Zeilen auch? Ich formatierte alle Zeilen auf 350 Zeichen Länge und erhielt ein perfektes Rechteck (74900 : 350 ist genau 216).
In diesem Ziffern-Rechteck suchte ich nach den Zeilenanfängen und ‑enden, die auf den linken und rechten Kantenteilen zu finden sind und setzte den Rand Stück für Stück zusammen. Zusätzliche Zeilenumbrüche nach der 5. und nach jeder 6. Zeile im Texteditor gaben dabei zusätzliche Orientierung. Auch bei den beiden waagerechten Kanten half der Texteditor sehr.

Doch für das Innere komme ich mit dem Texteditor nicht weiter. Der große Zahlenblock müsste wie ein rechteckiges »Kuchenblech« in 36 Zeilen und 28 Spalten aufgeteilt werden. Das ist mit dem Texteditor sehr müßig. Der nächste logische Schritt war dann Programmieren.
Für sowas ist für mich PHP die Sprache der Wahl. Zuerst sind die Zeilen dran. Die Funktion chunk_split() war da mein erster Gedanke. Sie teilt einen String (Zeichenfolge) in gleich lange Stücke auf. Zum Beispiel »dasisteinlangertext« wird bei Länge 4 zum Array [»dasi«, »stei«, »nlan«, »gert«, »ext« ]. Ich muss aber 350 Zeichen in 28 Teile (Anzahl der Puzzleteile nebeneinander) teilen. 350 : 28 ergibt 12,5 Zeichen pro Teil. Also abwechselnd 12 und 13. Dazu kommt noch, dass die Randteile grundsätzlich weniger Ziffern und Zeilen enthalten. Ich entwickelte einen Algorithmus, welcher mit Fließkommazahlen durch den String wandert und das alles berücksichtigt. Eine weitere Schleife, auch mit Fließkomma-Offset und ‑Schrittweite fasst die aufgeteilten Zeilen in Blöcke zusammen.
Die erste Version sah nach der gelungenen Aufteilung des rechteckigen Zahlenblocks in Puzzle-»Schäfchen« so aus:
Das führte dazu, dass ich an dem Abend alle gefundenen Cluster an ihre Position setzen konnte und danach einzelne weitere Puzzleteile. Bei jedem habe ich 5–6 Ziffern aus der Mitte eingegeben und der Browser hat da hin gescrollt, wo er fündig wurde. Eine Skala rund um das Puzzle half mir bei der Orientierung.

Mit dem System war es allerdings nur möglich, eine Ziffernfolge zu suchen. Da ich die Ziffern des Puzzles schon in einem zweidimensionalen Array aus kleineren Blöcken aufgeteilt hatte, war der Weg frei, innerhalb dieser aufgeteilten Struktur zu suchen und für jede Fundstelle die entsprechenden Blöcke gleich mit Position im Puzzle (Zeile | Spalte) anzuzeigen. Das habe ich am dritten Tag (2.10.) genau so umgesetzt und beim weiteren Füllen des Puzzles optimiert.
Hier kann man nun die Ziffern mehrerer Puzzleteile mit Komma getrennt eingeben und erhält für jedes Puzzleteil die Zeile | Spalte, wo es hin soll. Das machte echt Spaß, denn mit den gefundenen Werten für die Aufteilung stimmten die Positionen immer.
Eine funktionierende Live-Version gibt es unter https://projekte.svenspages.de/pi-puzzle-helper/ und den Quelltext habe ich hier auf Github veröffentlicht. Leider kann man das Puzzle nicht mehr kaufen. Vielleicht wird das Puzzle ja wieder aufgelegt, da es ja jetzt eine Suchmaschine dafür gibt? 🙂

Die letzten Puzzleteile habe ich dann am 4. Tag wieder auf die klassische Puzzle-Art eingesetzt. Also nach den »Nasen« schauen, nach der Farbe, nach den Kanten. Und am 5. Tag früh um drei war ich fertig.



Ich bin mir nicht sicher, ob es jemand auf die klassische Weise gelöst hat, ob man es so lösen muss. Es ist kein Bilderpuzzle, sondern ein rechteckiger Block aus 74900 Dezimalstellen. Ich kenne auch nach dem Puzzle Pi nur auf 15 Nachkommastellen genau. Das reicht aber aus, um die meisten Taschenrechner damit vollzuschreiben — oder hier die Grenze zwischen dem ersten und dem rechts daneben zu queren.
Es hat sehr viel Spaß gemacht — sowohl das puzzeln als auch das programmieren. Wann schreibt bzw. braucht man schon mal eine Suchmaschine für ein Puzzle?
74.900 Dezimalstellen von Pi auf einmal zu sehen ist schon beeindruckend. Der Rekord liegt aktuell bei 202,112,290,000,000 Nachkommastellen (Stand: 28.06.2024). 202 Billionen. Das ist 2.698.428.438 mal mehr. An kurzer Kante aneinander gereiht wäre das dann ein 50 cm breiter und 1.888.900 km langer Streifen. Das ist mehr als zweimal zum Mond und zurück.
Oder als Quadrat mit 30,732 km Kantenlänge (43.903 Zeilen * 61.494 Puzzles + 1 Zeile * 25.554 Puzzles) ausgelegt würde über meiner Heimatstadt ausgelegt so aussehen:

Es wäre schön, wenn man nicht nur die ersten 2,1 Milliarden (was ziemlich genau ein tausenstel Prozent des aktuellen Rekords ist, aber man kann sich wenigstens Postkarten aus dem Ergebnis machen), sondern all diese bisher errechneten Dezimalstellen online nach Ziffernfolgen durchsuchen könnte. Vielleicht gibt es da doch noch interessante Gesetzmäßigkeiten aufzudecken…