Pythonmania.de
Script different! Mein Icon

Navigation:

 Startseite
 Python bei O'Reilly
 Python & Tkinter
 Tkinter (deutsch)
 Tkinter (english)
 ftp mit Python
 Dialogboxen
 Kapitän
 Warum Python?
 Erste Schritte
 Grafische Ausgabe
 Das Modul W
 Easy Dialogs
 Mac File Dialogs
 Apfelmännchen
 Piddle & MacOS X
 Dancing Python
 User-Agenten
 XML-RPC
 Blogger API
 Anti-Spam-Script
 Template-Engine
 Python & XML
 Python Cookbook
 Impressum
 Schockwellenreiter

Python Logo

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


Mein Icon © Copyright 2000 - 2002: Jörg Kantel.
Last update: 13.10.2002; 21:25:22 Uhr.
This site is edited with Radio UserLand, the first personal Web Application server for Windows and Macintosh.  Let iCab smile  Site Meter