Pythonmania

Script Different!

Suchen in:
Suche:
In Partnerschaft mit Amazon.de
Startseite | Schockwellenreiter | Impressum
Anzeigen


Wie alt ist der Kapitän

Wer von uns ist nicht als Kind mit folgender »Denksportaufgabe« reingelegt worden?

Ein Schiff ist 99 Meter lang, hat drei Masten und 157 Quadratmeter Segelfläche; an Bord befinden sich 36 Mann Besatzung, darunter 11 Chinesen und ein Puertoricaner, ferner zwei Hunde, fünf Katzen und ein Papagei. Wie alt ist der Kapitän?

Diese angebliche Denksprtaufgabe wurde von Georg Polya aus Zürich in ein echtes Rätsel verwandelt:

Die Länge eines Schiffes in Metern ist eine ganze Zahl, der Kapitän hat Söhne und Töchter und er ist älter als die Anzahl seiner Kinder, aber noch nicht 100 Jahre alt. Wie alt ist der Kapitän, wieviele Kinder hat er und wie lang ist sein Schiff, wenn das Produkt dieser drei Zahlen 32118 beträgt?

Dies ist eine sogenannte »diophantische« Aufgabe, das sind Aufgaben der Art

Finde ganze Zahlen x, y, z mit x*y*z = n

n ist in unserem Fall 32118. Mathematiker lösen die Aufgabe, indem sie die Zahl 32118 in ihre Primfaktoren 2, 3, 53, 101 zerlegen und dann daraus die sechs Tripel (6, 53, 101), (3, 101, 106), (3, 53, 202), (2, 101, 159), (2, 53, 303) und (2, 3, 5353) bilden. Nur eines davon entspricht allen Nebenbedingungen unseres Rätsels. Der Kapitän ist also 53 Jahre alt.

Diophantische Aufgaben können auch leicht vom Computer gelöst werden. Der geht allerdings meist viel primitiver vor, er weiß nichts von Primfaktoren, ja nicht einmal etwas von Primzahlen. Er löst das Problem einfach durch Ausprobieren - natürlich immer schön der Reihe nach.

Im Falle des Kapitän-Rätsels lassen wir den Computer einfach von vier Kindern an durchzählen, dann für das Kapitänsalter von Kinderanzahl + 1 bis 100. Dabei prüfen wir, ob die Division von

32118 geteilt durch Kinderanzahl mal Kapitänsalter

eine ganze Zahl ergibt (d.h. ob der Rest gleich Null ist). In einem Pythonskript sieht das dann so aus:

for kinderanzahl in range(4, 12):
  for kapitaensalter in range(kinderanzahl + 1, 100):
    if (32118 % (kinderanzahl * kapitaensalter) == 0):
      schiffslaenge = 32118 / 
                    (kinderanzahl * kapitaensalter)
      print "%i Kinder, der Kapitän ist 
            %i Jahre alt und das Schiff %i Meter lang."
            % (kinderanzahl, kapitaensalter, schiffslaenge)

Wenn wir das Skript starten, erhalten wir, ehe wir atmen können, folgende Antwort:

6 Kinder, der Kapitän ist 53 Jahre alt 
und das Schiff 101 Meter lang.

Literatur:

Rüdeger Baumann: Spiel, Idee und Strategie programmiert in Pascal, Würzburg (Vogel-Buchverlag) 1983






Werbung: