Home


Lindwurm-Problem

olgendes Rätsel fand ich in der März 2001 Ausgabe von "Spektrum der Wissenschaft": "  "Lindwürmer" von Pierre Tougne Siggis Zimmerlinde hat Würmer. Lindwürmer. Diese heimtückischen Biester haben viele Köpfe auf langen Hälsen, viele Schwänze, magische Eigenschaften und unstillbaren Appetit. Ein Lindwurm ist in seinem Fresswahn erst gestoppt, wenn alle Schwänze und Hälse verknotet sind.
Der tapfere Siggi kann entweder zwei Hälse zusammenknoten oder einen Hals einzeln verknoten, gleiches gilt für die Schwänze.
*Verknotet er einen einzelnen Hals, so wächst sofort ein neuer nach.
*Verknotet er zwei Hälse miteinander, so geschieht nichts dergleichen.
*Verknotet er zwei Schwänze miteinander, so wächst ein Hals nach.
*Verknotet er einen einzelnen Schwanz, so wachsen sofort zwei neue Schwänze nach. Wie viele Knoten muss Siggi machen, um einen Lindwurm mit h Hälsen und s Schwänzen zu bändigen?" Viel Spaß beim raten! Nachdem ich mich mit dem Problem etwas beschäftigt und ein paar rudimentäre Formeln zusammengebastelt habe, entschied ich mich "Perl" auf das Problem loszulassen. Perl eignet sich für solche Aufgaben hervorragend. Zuerst aber für diejenigen die das Problem online berechnen wollen, folgt die Implementierung in Java-Script:
Anzahl Hälse:     Anzahl Schwänze: 

Summe Knoten = 

Perlskript Lindwurm-Problem:
  #by Christian Brenner

#!/usr/bin/perl -w

$schalter = 1;
while($schalter)
{
$skip = 0;
print "\nBitte Anzahl Haelse eingeben: ";
$H =  <STDIN>; chomp ($H);
print "Bitte Anzahl Schwaenze eingeben: ";
$S = <STDIN>; chomp ($S);
# Unendlichkeitsfall
if (($S == 0) && ($H%2 != 0))
{print "\nAnzahl der Knoten = unendlich"; $skip = 1}
# H-gerade ; S-ungerade
if (($H%2 == 0) && ($S%2 != 0))
{
$Sneu = ($S + 3) - (((($S+3)/2)%2)*2);
$Sknoten = ($Sneu/2)+1+(((($S+1)/2)%2)*2);
}
# H-gerade ; S-gerade
if (($H%2 == 0) && ($S%2 == 0))
{
$Sneu = ($S + 2) - (((($S+3)/2)%2)*2);
$Sknoten = ($Sneu/2)+(((($S+1)/2)%2)*2);
}
# H-ungerade ; S-ungerade
if (($H%2 != 0) && ($S%2 != 0))
{
$Sneu = ($S + 3) - (((($S+1)/2)%2)*2);
$Sknoten = ($Sneu/2)+3-(((($S+1)/2)%2)*2);
}
# H-ungerade ; S-gerade
if (($H%2 != 0) && ($S%2 == 0 && $S != 0))
{
$Sneu = ($S + 2) - (((($S+1)/2)%2)*2);
$Sknoten = ($Sneu/2)+2-(((($S+1)/2)%2)*2);
}
if ($skip == 0)
{
$Gesamtknoten = ($H + $Sneu/2)/2 + $Sknoten;
print ("\nAnzahl der Knoten = ",($Gesamtknoten));
}
print "\n\nNeue Berechnung? [j/n]: ";
$runde = <STDIN>;
chomp($runde);
if ($runde eq "n") { $schalter = 0};
}


Download lindwurm.pl


Home


www.ch-brenner-web.de
eMail: christian@ch-brenner-web.de