Würfelnetze

Aufgabe:

In der Stunde "Einführung Prismen und Pyramiden" wurde folgende Aufgabe zu Würfelnetzen gestellt:
Aus einem A4-Blatt (20cmx29cm) sollen die Würfelnetze für fünf gleich große Würfel gefertigt werden.
Wie würdest du das Blatt aufteilen? Fertige eine Zeichnung auf einem A4-Blatt an!
Wie groß ist die Kantenlänge der Würfel?
Wie viel Prozent des Blattes sind letztendlich Abfall?


Die Vorgehensweise zur Lösung des Problems ist hier beschrieben.
Das Problem welches dabei auftrat war, ob es möglich ist fünf Würfelnetze in einem Format von 7x5 anzuordnen. Da viele Versuche eine solche Anordnung zu finden fehl schlugen, habe ich mich entschlossen ein Programm zu schreiben, das alle Möglichkeiten durchprobiert.
Eine grobe Abschätzung zeigt bereits, dass die Anzahl dieser Kombinationen riesig ist, denn

  1. es gibt insgesamt 11 unterschiedliche Würfelnetze,
  2. jedes kann im Prinzip an eine beliebige Position in der Anordnung 7x5 gelegt werden, das ergibt ca 12 unterschiedliche Möglichkeiten,
  3. jedes kann gleichzeitig gedreht und geklappt eingelegt werden, wodurch im Prinzip 8 weitere Möglichkeiten pro Netz entstehen.

Da an eine bereits belegte Stelle kein weiteres Netz gelegt werden kann, wollen wir nur ein Viertel der Möglichkeiten betrachten. Also ganz grob geschätzt entstehen (0,25*12*11*8)5=2645=1,3 Billionen Möglichkeiten. Das Programm muss also optimiert sein, denn sonst wird auch ein moderner Desktop-PC in absehbarer Zeit nicht mit dem Problem fertig.

Ich will nun kurz vorstellen, wie ich das Programm entworfen habe, wie es funktioniert und zu welchem Ergebnis es kommt.
Das Programm ist in Perl [1] geschrieben, dabei handelt es sich um eine Scriptsprache, d.h. der Programmcode wird in einer Textdatei abgelegt und kann sofort ausgeführt werden. Da ich hauptsächlich mit Linux arbeite lag das nahe, denn perl ist im Prinzip auf allen Linux-Systemen verfügbar und die Syntax ist einfacher als in der shell. Außerdem ist perl auch in MacOS enthalten und auch für Windowsuser [2] kostenlos erhätlich.

Dem Programm liegen folgende Überlegungen zugrunde:
1. Wir haben ein Spielfeld von 5x7 Quadraten in denen die Netze abgelegt werden müssen.
2. Es gibt insgesamt nur 11 unterschiedliche Würfelnetze.

alle Würfelnetze

Variationen des Würfelnetzes Nummer43. Jedes der Würfelnetze kann in 8 unterschiedlichen Lagen in dem Feld abgelegt werden. Das Bild zeigt das Würfelnetz Nummer 4 und die durch Rotation und Spiegelung entstehenden Variationen dieses Netzes, die sich alle unterscheiden. Dadurch gibt es 88 verschiedene Figuren von denen jedoch einige doppelt vorkommen und nicht extra beachtet werden müssen. Es bleiben nach dieser Reduzierung nur noch 64 unterschiedliche Figuren übrig, die ich von 0..63 durchnummeriert habe.

Würfelnetzvariationen

4. Das Programm beginnt nun z.B. mit dem Netz 0 und positioniert es an allen möglichen Stellen im Spielfeld und erzeugt dann alle Möglichkeiten, vier weitere Netze in dem Feld abzulegen. Wenn das selbe dann mit Netz 1 gemacht wird, muss das Netz 0 nicht mehr beachtet werden usw. usf. Dadurch reduziert sich die Anzahl der Programmdurchläufe erheblich und es treten keine doppelten Tests auf.

Hier nun der Quellcode des Perlscriptes:
Inhalt der Datei wuerfelnetze.perl
#!/usr/bin/perl -w

######################################################################################
# Perlscript zur Erzeugung von Wuerfelnetzvariationen in einem Spielfeld im 5x7Format#
# Hintergrund ist eine mathematische Aufgabenstellung zur Optimierung von Wuerfel-   #
# netzen.                                                                            #
# Die Aufgabenstellung mit Erlaeuterungen zur Loesung sind unter                     #
# http://www.schlaefendorf.de/schule/mathematik/kl7/lb5/Wuerfelnetze-Aufgabe2L.pdf   #
# zu finden.                                                                         #
# Autor: Frank Schlaefendorf erstellt am: 25.05.2010  letze Aenderung: 06.06.2010    #
######################################################################################

#use strict;
# Array zum abspeichern der Spielfelder
@felder=();
# Array zum abspeichern der x-koordinaten der Wuerfelnetze
@xfigur=();
# Array zum abspeichern der y-koordinaten der Wuerfelnetze
@yfigur=();
# Array zum abpeichern der Netzinformationen in jedem Spielfeld
@netzinfo=();
# Netzinformationen fuer das Spielfeld 0
# aktuelle x-Setzposition im Spielfeld 0
$netzinfo[0][0]=-1;
# aktuelle y-Setzposition im Spielfeld 0
$netzinfo[0][1]=-1;
# aktuelle Netznummer im Spielfeld 0
$netzinfo[0][2]=0;
# Zaehler fuer die insgesamt ausgefuehrten Testschritte
$schrittzahl=0;
# Zaehler fuer die insgesamt ausgegebenen Spielfelder
$printzaehler=0;
# Zaehler fuer die insgesamt gefundenen Loesungen
$loesungszaehler=0;

######################################################################################
# Initialisierung von 6 Spielfeldern 0..5 in denen das 5x7 Spielareal angelegt wird. #
# Die freien Spielfelder werden mit dem Wert 0 belegt.                               #
# In den Feldern rechts und unterhalb des Spielfeldes wird ein Rand der Breite 4 mit #
# dem Wert -1 belegt. dieser Rand dient der Kollisionsrkennung fuer die Netze.       #
# Der Aufruf dieser Unterfunktion erfordert keine Parameter. Die Felder werden im    #
# globalen Array felder angelegt.                                                    #
# init_felder                                                                        #
######################################################################################

sub init_felder { 
 my $x=0;
 my $y=0;
 my $n=0;
 # 6 Felder werden eingerichtet.
 # Die Randzone enthaelt den Wert -1 
 ###############
 #####yyyyyyyyy#
 #####012345678#
 #x0 #.....++++#
 #x1 #.....++++#
 #x2 #.....++++#
 #x3 #.....++++#
 #x4 #.....++++#
 #x5 #.....++++#
 #x6 #.....++++#
 #x7 #+++++++++#
 #x8 #+++++++++#
 #x9 #+++++++++#
 #x10#+++++++++#
 ###############
 
 for($n=0;$n<=5;$n++){
  for($x=0;$x<7;$x++){
   for($y=0;$y<5;$y++){
    $felder[$n][$x][$y]=0;
   }
   for($y=5;$y<9;$y++){
    $felder[$n][$x][$y]=-1;
   }
  }
  for($x=7;$x<11;$x++){
   for($y=0;$y<9;$y++){
    $felder[$n][$x][$y]=-1;
   }
  }
 }
}

###############################################################################
# Kopierfunktion                                                              #
# Diese Funktion kopiert den Inhalt des Feldes A in das Feld B, wobei A und B #
# Nummern von 0 bis 5 sind und die Feldnummer angeben. Der alte Inhalt in     #
# Feld B wird ueberschrieben.                                                 #
# Der Aufruf der Funktion erfordert also zwei Parameter                       #
# copy_felder(A,B);                                                           #
###############################################################################
sub copy_felder {
 my $x=0;
 my $y=0;
 my $feldnr1=$_[0];
 my $feldnr2=$_[1];
 for($x=0;$x<7;$x++){
  for($y=0;$y<5;$y++){
   $felder[$feldnr2][$x][$y]=$felder[$feldnr1][$x][$y];
  }
 }
}

###############################################################################
# Testfunktion                                                                #
# Diese Funktion testet, ob das Netz Nummer N im Feld Nummer F an der         #
# Position X , Y ohne Kollision mit einem anderen Netz oder dem Rand abgelegt #
# werden kann.                                                                #
# Wenn das moeglich ist, wird der Wert 0 zurueckgegeben. Bei einer Kollision  #
# mit dem rechten Rand wird der Wert -1 und bei Kollision mit dem unteren     #
# Rand der Wert -2 zurueckgegeben. Kollidiert das Netz N mit einem bereits    #
# abgelegten Netz, so wird ein Wert groeszer 0 (die Ebenennummer) zurueck     #
# gegeben.                                                                    #
# Die Parameter N , F , X und Y werden beim Aufruf erwartet.                  #
# can_set_wnetz(N,F,X,Y);                                                     #
###############################################################################

sub can_set_wnetz {
 my $x=0;
 my $y=0;
 my $wert=0;
 my $pnummer=0;
 my $wnetz=$_[0];
 my $feldnummer=$_[1];
 my $posx=$_[2];
 my $posy=$_[3];
 for($pnummer=0;$pnummer<6;$pnummer++){
  $x=$posx+$xfigur[$wnetz][$pnummer];
  $y=$posy+$yfigur[$wnetz][$pnummer];
  $wert=$felder[$feldnummer][$x][$y];
  if($wert == -1){
   if($pnummer == 1){
    return -2;
   }else{
    return -1;
   }
  }elsif($wert > 0){
   return 1;
  }
 }
 return 0;
}

################################################################################
# Setzfunktion                                                                 #
# Diese Funktion setzt das Netz Nummer N im Feld Nummer F an der Position X,Y  #
# ab. Dabei wird das Netz in dem Feld mit einer Ordnungsnummer M, die groeszer #
# als 0 sein muss, abgespeichert. Die Funktion fuehrt keine Kollisions-        #
# erkennung durch, diese muss vorhr erfolgen.                                  #
# Die Parameter N , F , X ,Y und M werden beim Aufruf erwartet.                #
# set_wnetz(N,F,X,Y,M);                                                        #
################################################################################

sub set_wnetz {
 my $x=0;
 my $y=0;
 my $pnummer=0;
 my $wnetz=$_[0];
 my $feldnummer=$_[1];
 my $posx=$_[2];
 my $posy=$_[3];
 my $wnummer=$_[4];
 for($pnummer=0;$pnummer<6;$pnummer++){
  $x=$xfigur[$wnetz][$pnummer]+$posx;
  $y=$yfigur[$wnetz][$pnummer]+$posy;
  $felder[$feldnummer][$x][$y]=$wnummer;
 }
 return 1;
}

#######################################################################
# Hauptprogramm                                                       #
# Es werden alle moeglichen Anordnungen von Wuerfelnetzen ausprobiert.#
# Wenn mindestens 4 Wuerfelnetze gesetzt werden konnten, wird das     #
# Netz mit ein paar Zusatzinformationen ausgegeben.                   #
# Als Parameter erwartet die Funktion die Nummer des ersten Spiel-    #
# feldes, also 0                                                      #
# mainproc(0);                                                        #
#######################################################################

sub mainproc {
 my $x=0;
 my $y=0;
 my $z=0;
 my $wert=0;
 my $wnetz=0;
 my $permut=0;
 my $feldnummer=$_[0];
 my $nfeldnummer=$feldnummer+1;
 if($feldnummer<5){
  OVER: for($wnetz=$netzinfo[$feldnummer][2];$wnetz<64;$wnetz++){
   OUTER: for($x=0;$x<7;$x++){
    INNER: for($y=0;$y<5;$y++){
     $netzinfo[$nfeldnummer][0]=$x;
     $netzinfo[$nfeldnummer][1]=$y;
     $netzinfo[$nfeldnummer][2]=$wnetz;
     for($z=$nfeldnummer+1;$z<6;$z++){
      $netzinfo[$z][0]=-1;
      $netzinfo[$z][1]=-1;
      $netzinfo[$z][2]=-1;
     }
     $schrittzahl++;
     $wert=can_set_wnetz($wnetz,$feldnummer,$x,$y);
     if($wert == 0){
      copy_felder($feldnummer,$nfeldnummer);
      set_wnetz($wnetz,$nfeldnummer,$x,$y,$nfeldnummer);
      if($nfeldnummer>=4){print_feld($nfeldnummer)};
      mainproc($nfeldnummer);
     }
     next OUTER if($wert == -1);
     next OVER if($wert == -2);
    }
   }
  }
 }else{
  $loesungszaehler++;
  print "############################################################\n";
  print "############################################################\n";
  print "####################### L O E S U N G ######################\n";
  print "############################################################\n";
  print "############################################################\n";
  print_feld($feldnummer);
  print "############################################################\n";
  print "############################################################\n";
 }
}

######################################################
# Ausgabefunktion                                    #
# Es wird das Spielfeld mit der Nummer N ausgegeben. #
# print_feld(N);                                     #
######################################################

sub print_feld {
 my $nummer=$_[0];
 my $x=0;
 my $y=0;
 $printzaehler++;
 print "\n";
 print "Netz Nr:".$printzaehler."\n";
 print "Schritt:".$schrittzahl." Anzahl gefundener L&ouml;sungen=".$loesungszaehler."\n";
 for($x=0;$x<7;$x++){
  for($y=0;$y<5;$y++){
   if($felder[$nummer][$x][$y] == 0){
    print ".";
   }else{
    print $felder[$nummer][$x][$y];
   }
  }
  if($x>0 && $x<6){
   print "   ".$x." x=".$netzinfo[$x][0]." y=".$netzinfo[$x][1]." Netz=".$netzinfo[$x][2]."\n";
  }else{
   print "\n";
  }
 }
}

sub init_figuren {
 ###############################################################################################
 # Initialisierungsroutine fuer die Figurenspeicher, in denen die Form der 11 Wuerfelnetze     #
 # gespeichert ist.                                                                            #
 # $xfigur[Wuerfelnetznummer][Punktnummer]= x-koordinate des Wuerfelnetzpunktes im Wuerfelnetz #
 # $yfigur[Wuerfelnetznummer][Punktnummer]= y-koordinate des Wuerfelnetzpunktes im Wuerfelnetz #
 # Von den 88 moeglichen Netzformen wurden Doppelungen entfern, sodass 64 Wuerfelnetzformen    #
 # uebrig bleiben. Aus Gruenden der Rechengeschwindigkeit sind alle Netze so weit wie moeglich #
 # nach links oben ausgerichtet. Fuer eine ,moeglichst fruehzeitige Randkollisionserkennung    #
 # ist in der Definitionstabelle das am weitesten rechts liegende Wuerfelnetzfeld eingetragen. #
 # Der zweite Eintrg enthaelt das am weitesten unten liegende Feld.                            #
 ###############################################################################################

 # Wuerfelnetz 0
 #########
 #  yyyyy#
 #  01234#
 #x0*....#
 #x1****.#
 #x2*....#
 #x3.....#
 #x4.....#
 #########
 $xfigur[0][0]=1; $yfigur[0][0]=3;
 $xfigur[0][1]=2; $yfigur[0][1]=0;
 $xfigur[0][2]=1; $yfigur[0][2]=1;
 $xfigur[0][3]=1; $yfigur[0][3]=2;
 $xfigur[0][4]=0; $yfigur[0][4]=0;
 $xfigur[0][5]=1; $yfigur[0][5]=0;
  
 # Wuerfelnetz 1
 #########
 #  yyyyy#
 #  01234#
 #x0***..#
 #x1.*...#
 #x2.*...#
 #x3.*...#
 #x4.....#
 #########
 $xfigur[1][0]=0; $yfigur[1][0]=2;
 $xfigur[1][1]=3; $yfigur[1][1]=1;
 $xfigur[1][2]=0; $yfigur[1][2]=0;
 $xfigur[1][3]=1; $yfigur[1][3]=1;
 $xfigur[1][4]=2; $yfigur[1][4]=1;
 $xfigur[1][5]=0; $yfigur[1][5]=1;
  
 # Wuerfelnetz 2
 #########
 #  yyyyy#
 #  01234#
 #x0...*.#
 #x1****.#
 #x2...*.#
 #x3.....#
 #x4.....#
 #########
 $xfigur[2][0]=2; $yfigur[2][0]=3;
 $xfigur[2][1]=1; $yfigur[2][1]=0;
 $xfigur[2][2]=1; $yfigur[2][2]=1;
 $xfigur[2][3]=1; $yfigur[2][3]=2;
 $xfigur[2][4]=1; $yfigur[2][4]=3;
 $xfigur[2][5]=0; $yfigur[2][5]=3;
  
 # Wuerfelnetz 3
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1.*...#
 #x2.*...#
 #x3***..#
 #x4.....#
 #########
 $xfigur[3][0]=3; $yfigur[3][0]=2;
 $xfigur[3][1]=0; $yfigur[3][1]=1;
 $xfigur[3][2]=3; $yfigur[3][2]=0;
 $xfigur[3][3]=1; $yfigur[3][3]=1;
 $xfigur[3][4]=2; $yfigur[3][4]=1;
 $xfigur[3][5]=3; $yfigur[3][5]=1;
  
 # Wuerfelnetz 4
 #########
 #  yyyyy#
 #  01234#
 #x0*....#
 #x1****.#
 #x2.*...#
 #x3.....#
 #x4.....#
 #########
 $xfigur[4][0]=1; $yfigur[4][0]=3;
 $xfigur[4][1]=2; $yfigur[4][1]=1;
 $xfigur[4][2]=1; $yfigur[4][2]=1;
 $xfigur[4][3]=1; $yfigur[4][3]=2;
 $xfigur[4][4]=0; $yfigur[4][4]=0;
 $xfigur[4][5]=1; $yfigur[4][5]=0;
  
 # Wuerfelnetz 5
 #########
 #  yyyyy#
 #  01234#
 #x0.**..#
 #x1**...#
 #x2.*...#
 #x3.*...#
 #x4.....#
 #########
 $xfigur[5][0]=0; $yfigur[5][0]=2;
 $xfigur[5][1]=3; $yfigur[5][1]=1;
 $xfigur[5][2]=1; $yfigur[5][2]=0;
 $xfigur[5][3]=1; $yfigur[5][3]=1;
 $xfigur[5][4]=2; $yfigur[5][4]=1;
 $xfigur[5][5]=0; $yfigur[5][5]=1;
  
 # Wuerfelnetz 6
 #########
 #  yyyyy#
 #  01234#
 #x0..*..#
 #x1****.#
 #x2...*.#
 #x3.....#
 #x4.....#
 #########
 $xfigur[6][0]=2; $yfigur[6][0]=3;
 $xfigur[6][1]=1; $yfigur[6][1]=0;
 $xfigur[6][2]=1; $yfigur[6][2]=1;
 $xfigur[6][3]=1; $yfigur[6][3]=2;
 $xfigur[6][4]=1; $yfigur[6][4]=3;
 $xfigur[6][5]=0; $yfigur[6][5]=2;
  
 # Wuerfelnetz 7
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1.*...#
 #x2.**..#
 #x3**...#
 #x4.....#
 #########
 $xfigur[7][0]=2; $yfigur[7][0]=2;
 $xfigur[7][1]=3; $yfigur[7][1]=0;
 $xfigur[7][2]=0; $yfigur[7][2]=1;
 $xfigur[7][3]=1; $yfigur[7][3]=1;
 $xfigur[7][4]=2; $yfigur[7][4]=1;
 $xfigur[7][5]=3; $yfigur[7][5]=1;
  
 # Wuerfelnetz 8
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1****.#
 #x2*....#
 #x3.....#
 #x4.....#
 #########
 $xfigur[8][0]=1; $yfigur[8][0]=3;
 $xfigur[8][1]=2; $yfigur[8][1]=0;
 $xfigur[8][2]=1; $yfigur[8][2]=1;
 $xfigur[8][3]=1; $yfigur[8][3]=2;
 $xfigur[8][4]=0; $yfigur[8][4]=1;
 $xfigur[8][5]=1; $yfigur[8][5]=0;
  
 # Wuerfelnetz 9
 #########
 #  yyyyy#
 #  01234#
 #x0**...#
 #x1.**..#
 #x2.*...#
 #x3.*...#
 #x4.....#
 #########
 $xfigur[9][0]=1; $yfigur[9][0]=2;
 $xfigur[9][1]=3; $yfigur[9][1]=1;
 $xfigur[9][2]=0; $yfigur[9][2]=1;
 $xfigur[9][3]=1; $yfigur[9][3]=1;
 $xfigur[9][4]=2; $yfigur[9][4]=1;
 $xfigur[9][5]=0; $yfigur[9][5]=0;
  
 # Wuerfelnetz 10
 #########
 #  yyyyy#
 #  01234#
 #x0...*.#
 #x1****.#
 #x2..*..#
 #x3.....#
 #x4.....#
 #########
 $xfigur[10][0]=0; $yfigur[10][0]=3;
 $xfigur[10][1]=2; $yfigur[10][1]=2;
 $xfigur[10][2]=1; $yfigur[10][2]=1;
 $xfigur[10][3]=1; $yfigur[10][3]=2;
 $xfigur[10][4]=1; $yfigur[10][4]=3;
 $xfigur[10][5]=1; $yfigur[10][5]=0;
  
 # Wuerfelnetz 11
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1.*...#
 #x2**...#
 #x3.**..#
 #x4.....#
 #########
 $xfigur[11][0]=3; $yfigur[11][0]=2;
 $xfigur[11][1]=2; $yfigur[11][1]=0;
 $xfigur[11][2]=0; $yfigur[11][2]=1;
 $xfigur[11][3]=1; $yfigur[11][3]=1;
 $xfigur[11][4]=2; $yfigur[11][4]=1;
 $xfigur[11][5]=3; $yfigur[11][5]=1;
  
 # Wuerfelnetz 12
 #########
 #  yyyyy#
 #  01234#
 #x0*....#
 #x1****.#
 #x2..*..#
 #x3.....#
 #x4.....#
 #########
 $xfigur[12][0]=1; $yfigur[12][0]=3;
 $xfigur[12][1]=2; $yfigur[12][1]=2;
 $xfigur[12][2]=1; $yfigur[12][2]=1;
 $xfigur[12][3]=1; $yfigur[12][3]=2;
 $xfigur[12][4]=0; $yfigur[12][4]=0;
 $xfigur[12][5]=1; $yfigur[12][5]=0;
  
 # Wuerfelnetz 13
 #########
 #  yyyyy#
 #  01234#
 #x0.**..#
 #x1.*...#
 #x2**...#
 #x3.*...#
 #x4.....#
 #########
 $xfigur[13][0]=0; $yfigur[13][0]=2;
 $xfigur[13][1]=3; $yfigur[13][1]=1;
 $xfigur[13][2]=2; $yfigur[13][2]=0;
 $xfigur[13][3]=1; $yfigur[13][3]=1;
 $xfigur[13][4]=2; $yfigur[13][4]=1;
 $xfigur[13][5]=0; $yfigur[13][5]=1;
  
 # Wuerfelnetz 14
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1****.#
 #x2...*.#
 #x3.....#
 #x4.....#
 #########
 $xfigur[14][0]=2; $yfigur[14][0]=3;
 $xfigur[14][1]=1; $yfigur[14][1]=0;
 $xfigur[14][2]=1; $yfigur[14][2]=1;
 $xfigur[14][3]=1; $yfigur[14][3]=2;
 $xfigur[14][4]=1; $yfigur[14][4]=3;
 $xfigur[14][5]=0; $yfigur[14][5]=1;
  
 # Wuerfelnetz 15
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1.**..#
 #x2.*...#
 #x3**...#
 #x4.....#
 #########
 $xfigur[15][0]=1; $yfigur[15][0]=2;
 $xfigur[15][1]=3; $yfigur[15][1]=0;
 $xfigur[15][2]=0; $yfigur[15][2]=1;
 $xfigur[15][3]=1; $yfigur[15][3]=1;
 $xfigur[15][4]=2; $yfigur[15][4]=1;
 $xfigur[15][5]=3; $yfigur[15][5]=1;
  
 # Wuerfelnetz 16
 #########
 #  yyyyy#
 #  01234#
 #x0..*..#
 #x1****.#
 #x2*....#
 #x3.....#
 #x4.....#
 #########
 $xfigur[16][0]=1; $yfigur[16][0]=3;
 $xfigur[16][1]=2; $yfigur[16][1]=0;
 $xfigur[16][2]=1; $yfigur[16][2]=1;
 $xfigur[16][3]=1; $yfigur[16][3]=2;
 $xfigur[16][4]=0; $yfigur[16][4]=2;
 $xfigur[16][5]=1; $yfigur[16][5]=0;
  
 # Wuerfelnetz 17
 #########
 #  yyyyy#
 #  01234#
 #x0**...#
 #x1.*...#
 #x2.**..#
 #x3.*...#
 #x4.....#
 #########
 $xfigur[17][0]=2; $yfigur[17][0]=2;
 $xfigur[17][1]=3; $yfigur[17][1]=1;
 $xfigur[17][2]=0; $yfigur[17][2]=1;
 $xfigur[17][3]=1; $yfigur[17][3]=1;
 $xfigur[17][4]=2; $yfigur[17][4]=1;
 $xfigur[17][5]=0; $yfigur[17][5]=0;
  
 # Wuerfelnetz 18
 #########
 #  yyyyy#
 #  01234#
 #x0...*.#
 #x1****.#
 #x2.*...#
 #x3.....#
 #x4.....#
 #########
 $xfigur[18][0]=0; $yfigur[18][0]=3;
 $xfigur[18][1]=2; $yfigur[18][1]=1;
 $xfigur[18][2]=1; $yfigur[18][2]=1;
 $xfigur[18][3]=1; $yfigur[18][3]=2;
 $xfigur[18][4]=1; $yfigur[18][4]=3;
 $xfigur[18][5]=1; $yfigur[18][5]=0;
  
 # Wuerfelnetz 19
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1**...#
 #x2.*...#
 #x3.**..#
 #x4.....#
 #########
 $xfigur[19][0]=3; $yfigur[19][0]=2;
 $xfigur[19][1]=1; $yfigur[19][1]=0;
 $xfigur[19][2]=0; $yfigur[19][2]=1;
 $xfigur[19][3]=1; $yfigur[19][3]=1;
 $xfigur[19][4]=2; $yfigur[19][4]=1;
 $xfigur[19][5]=3; $yfigur[19][5]=1;

 # Wuerfelnetz 20
 #########
 #  yyyyy#
 #  01234#
 #x0*....#
 #x1****.#
 #x2...*.#
 #x3.....#
 #x4.....#
 #########
 $xfigur[20][0]=2; $yfigur[20][0]=3;
 $xfigur[20][1]=1; $yfigur[20][1]=0;
 $xfigur[20][2]=1; $yfigur[20][2]=1;
 $xfigur[20][3]=1; $yfigur[20][3]=2;
 $xfigur[20][4]=1; $yfigur[20][4]=3;
 $xfigur[20][5]=0; $yfigur[20][5]=0;
  
 # Wuerfelnetz 21
 #########
 #  yyyyy#
 #  01234#
 #x0.**..#
 #x1.*...#
 #x2.*...#
 #x3**...#
 #x4.....#
 #########
 $xfigur[21][0]=0; $yfigur[21][0]=2;
 $xfigur[21][1]=3; $yfigur[21][1]=0;
 $xfigur[21][2]=0; $yfigur[21][2]=1;
 $xfigur[21][3]=1; $yfigur[21][3]=1;
 $xfigur[21][4]=2; $yfigur[21][4]=1;
 $xfigur[21][5]=3; $yfigur[21][5]=1;

 # Wuerfelnetz 22
 #########
 #  yyyyy#
 #  01234#
 #x0...*.#
 #x1****.#
 #x2*....#
 #x3.....#
 #x4.....#
 #########
 $xfigur[22][0]=0; $yfigur[22][0]=3;
 $xfigur[22][1]=2; $yfigur[22][1]=0;
 $xfigur[22][2]=1; $yfigur[22][2]=1;
 $xfigur[22][3]=1; $yfigur[22][3]=2;
 $xfigur[22][4]=1; $yfigur[22][4]=3;
 $xfigur[22][5]=1; $yfigur[22][5]=0;
  
 # Wuerfelnetz 23
 #########
 #  yyyyy#
 #  01234#
 #x0**...#
 #x1.*...#
 #x2.*...#
 #x3.**..#
 #x4.....#
 #########
 $xfigur[23][0]=3; $yfigur[23][0]=2;
 $xfigur[23][1]=0; $yfigur[23][1]=1;
 $xfigur[23][2]=0; $yfigur[23][2]=0;
 $xfigur[23][3]=1; $yfigur[23][3]=1;
 $xfigur[23][4]=2; $yfigur[23][4]=1;
 $xfigur[23][5]=3; $yfigur[23][5]=1;
  
 # Wuerfelnetz 24
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1****.#
 #x2..*..#
 #x3.....#
 #x4.....#
 #########
 $xfigur[24][0]=1; $yfigur[24][0]=3;
 $xfigur[24][1]=2; $yfigur[24][1]=2;
 $xfigur[24][2]=1; $yfigur[24][2]=1;
 $xfigur[24][3]=1; $yfigur[24][3]=2;
 $xfigur[24][4]=0; $yfigur[24][4]=1;
 $xfigur[24][5]=1; $yfigur[24][5]=0;
  
 # Wuerfelnetz 25
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1.**..#
 #x2**...#
 #x3.*...#
 #x4.....#
 #########
 $xfigur[25][0]=1; $yfigur[25][0]=2;
 $xfigur[25][1]=3; $yfigur[25][1]=1;
 $xfigur[25][2]=2; $yfigur[25][2]=0;
 $xfigur[25][3]=1; $yfigur[25][3]=1;
 $xfigur[25][4]=2; $yfigur[25][4]=1;
 $xfigur[25][5]=0; $yfigur[25][5]=1;
  
 # Wuerfelnetz 26
 #########
 #  yyyyy#
 #  01234#
 #x0..*..#
 #x1****.#
 #x2.*...#
 #x3.....#
 #x4.....#
 #########
 $xfigur[26][0]=1; $yfigur[26][0]=3;
 $xfigur[26][1]=2; $yfigur[26][1]=1;
 $xfigur[26][2]=1; $yfigur[26][2]=1;
 $xfigur[26][3]=1; $yfigur[26][3]=2;
 $xfigur[26][4]=0; $yfigur[26][4]=2;
 $xfigur[26][5]=1; $yfigur[26][5]=0;
  
 # Wuerfelnetz 27
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1**...#
 #x2.**..#
 #x3.*...#
 #x4.....#
 #########
 $xfigur[27][0]=2; $yfigur[27][0]=2;
 $xfigur[27][1]=3; $yfigur[27][1]=1;
 $xfigur[27][2]=0; $yfigur[27][2]=1;
 $xfigur[27][3]=1; $yfigur[27][3]=1;
 $xfigur[27][4]=2; $yfigur[27][4]=1;
 $xfigur[27][5]=1; $yfigur[27][5]=0;
 
 # Wuerfelnetz 28
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1****.#
 #x2.*...#
 #x3.....#
 #x4.....#
 #########
 $xfigur[28][0]=1; $yfigur[28][0]=3;
 $xfigur[28][1]=2; $yfigur[28][1]=1;
 $xfigur[28][2]=1; $yfigur[28][2]=1;
 $xfigur[28][3]=1; $yfigur[28][3]=2;
 $xfigur[28][4]=0; $yfigur[28][4]=1;
 $xfigur[28][5]=1; $yfigur[28][5]=0;
  
 # Wuerfelnetz 29
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1***..#
 #x2.*...#
 #x3.*...#
 #x4.....#
 #########
 $xfigur[29][0]=1; $yfigur[29][0]=2;
 $xfigur[29][1]=3; $yfigur[29][1]=1;
 $xfigur[29][2]=1; $yfigur[29][2]=0;
 $xfigur[29][3]=1; $yfigur[29][3]=1;
 $xfigur[29][4]=2; $yfigur[29][4]=1;
 $xfigur[29][5]=0; $yfigur[29][5]=1;
  
 # Wuerfelnetz 30
 #########
 #  yyyyy#
 #  01234#
 #x0..*..#
 #x1****.#
 #x2..*..#
 #x3.....#
 #x4.....#
 #########
 $xfigur[30][0]=1; $yfigur[30][0]=3;
 $xfigur[30][1]=2; $yfigur[30][1]=2;
 $xfigur[30][2]=1; $yfigur[30][2]=1;
 $xfigur[30][3]=1; $yfigur[30][3]=2;
 $xfigur[30][4]=0; $yfigur[30][4]=2;
 $xfigur[30][5]=1; $yfigur[30][5]=0;
  
 # Wuerfelnetz 31
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1.*...#
 #x2***..#
 #x3.*...#
 #x4.....#
 #########
 $xfigur[31][0]=2; $yfigur[31][0]=2;
 $xfigur[31][1]=3; $yfigur[31][1]=1;
 $xfigur[31][2]=0; $yfigur[31][2]=1;
 $xfigur[31][3]=1; $yfigur[31][3]=1;
 $xfigur[31][4]=2; $yfigur[31][4]=1;
 $xfigur[31][5]=2; $yfigur[31][5]=0;
  
 # Wuerfelnetz 32
 #########
 #  yyyyy#
 #  01234#
 #x0**...#
 #x1.***.#
 #x2.*...#
 #x3.....#
 #x4.....#
 #########
 $xfigur[32][0]=1; $yfigur[32][0]=3;
 $xfigur[32][1]=2; $yfigur[32][1]=1;
 $xfigur[32][2]=1; $yfigur[32][2]=1;
 $xfigur[32][3]=1; $yfigur[32][3]=2;
 $xfigur[32][4]=0; $yfigur[32][4]=0;
 $xfigur[32][5]=0; $yfigur[32][5]=1;
  
 # Wuerfelnetz 33
 #########
 #  yyyyy#
 #  01234#
 #x0..*..#
 #x1***..#
 #x2.*...#
 #x3.*...#
 #x4.....#
 #########
 $xfigur[33][0]=0; $yfigur[33][0]=2;
 $xfigur[33][1]=3; $yfigur[33][1]=1;
 $xfigur[33][2]=1; $yfigur[33][2]=0;
 $xfigur[33][3]=1; $yfigur[33][3]=1;
 $xfigur[33][4]=2; $yfigur[33][4]=1;
 $xfigur[33][5]=1; $yfigur[33][5]=2;
  
 # Wuerfelnetz 34
 #########
 #  yyyyy#
 #  01234#
 #x0..*..#
 #x1***..#
 #x2..**.#
 #x3.....#
 #x4.....#
 #########
 $xfigur[34][0]=2; $yfigur[34][0]=3;
 $xfigur[34][1]=1; $yfigur[34][1]=0;
 $xfigur[34][2]=1; $yfigur[34][2]=1;
 $xfigur[34][3]=1; $yfigur[34][3]=2;
 $xfigur[34][4]=2; $yfigur[34][4]=2;
 $xfigur[34][5]=0; $yfigur[34][5]=2;
  
 # Wuerfelnetz 35
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1.*...#
 #x2***..#
 #x3*....#
 #x4.....#
 #########
 $xfigur[35][0]=2; $yfigur[35][0]=2;
 $xfigur[35][1]=3; $yfigur[35][1]=0;
 $xfigur[35][2]=0; $yfigur[35][2]=1;
 $xfigur[35][3]=1; $yfigur[35][3]=1;
 $xfigur[35][4]=2; $yfigur[35][4]=1;
 $xfigur[35][5]=2; $yfigur[35][5]=0;
  
 # Wuerfelnetz 36
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1.***.#
 #x2**...#
 #x3.....#
 #x4.....#
 #########
 $xfigur[36][0]=1; $yfigur[36][0]=3;
 $xfigur[36][1]=2; $yfigur[36][1]=0;
 $xfigur[36][2]=1; $yfigur[36][2]=1;
 $xfigur[36][3]=1; $yfigur[36][3]=2;
 $xfigur[36][4]=0; $yfigur[36][4]=1;
 $xfigur[36][5]=2; $yfigur[36][5]=1;
  
 # Wuerfelnetz 37
 #########
 #  yyyyy#
 #  01234#
 #x0*....#
 #x1***..#
 #x2.*...#
 #x3.*...#
 #x4.....#
 #########
 $xfigur[37][0]=1; $yfigur[37][0]=2;
 $xfigur[37][1]=3; $yfigur[37][1]=1;
 $xfigur[37][2]=1; $yfigur[37][2]=0;
 $xfigur[37][3]=1; $yfigur[37][3]=1;
 $xfigur[37][4]=2; $yfigur[37][4]=1;
 $xfigur[37][5]=0; $yfigur[37][5]=0;
  
 # Wuerfelnetz 38
 #########
 #  yyyyy#
 #  01234#
 #x0..**.#
 #x1***..#
 #x2..*..#
 #x3.....#
 #x4.....#
 #########
 $xfigur[38][0]=0; $yfigur[38][0]=3;
 $xfigur[38][1]=2; $yfigur[38][1]=2;
 $xfigur[38][2]=1; $yfigur[38][2]=1;
 $xfigur[38][3]=1; $yfigur[38][3]=2;
 $xfigur[38][4]=0; $yfigur[38][4]=2;
 $xfigur[38][5]=1; $yfigur[38][5]=0;
  
 # Wuerfelnetz 39
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1.*...#
 #x2***..#
 #x3..*..#
 #x4.....#
 #########
 $xfigur[39][0]=3; $yfigur[39][0]=2;
 $xfigur[39][1]=2; $yfigur[39][1]=0;
 $xfigur[39][2]=0; $yfigur[39][2]=1;
 $xfigur[39][3]=1; $yfigur[39][3]=1;
 $xfigur[39][4]=2; $yfigur[39][4]=1;
 $xfigur[39][5]=2; $yfigur[39][5]=2;
  
 # Wuerfelnetz 40
 #########
 #  yyyyy#
 #  01234#
 #x0**...#
 #x1.***.#
 #x2..*..#
 #x3.....#
 #x4.....#
 #########
 $xfigur[40][0]=1; $yfigur[40][0]=3;
 $xfigur[40][1]=2; $yfigur[40][1]=2;
 $xfigur[40][2]=1; $yfigur[40][2]=1;
 $xfigur[40][3]=1; $yfigur[40][3]=2;
 $xfigur[40][4]=0; $yfigur[40][4]=0;
 $xfigur[40][5]=0; $yfigur[40][5]=1;
  
 # Wuerfelnetz 41
 #########
 #  yyyyy#
 #  01234#
 #x0..*..#
 #x1.**..#
 #x2**...#
 #x3.*...#
 #x4.....#
 #########
 $xfigur[41][0]=0; $yfigur[41][0]=2;
 $xfigur[41][1]=3; $yfigur[41][1]=1;
 $xfigur[41][2]=2; $yfigur[41][2]=0;
 $xfigur[41][3]=1; $yfigur[41][3]=1;
 $xfigur[41][4]=2; $yfigur[41][4]=1;
 $xfigur[41][5]=1; $yfigur[41][5]=2;
  
 # Wuerfelnetz 42
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1***..#
 #x2..**.#
 #x3.....#
 #x4.....#
 #########
 $xfigur[42][0]=2; $yfigur[42][0]=3;
 $xfigur[42][1]=1; $yfigur[42][1]=0;
 $xfigur[42][2]=1; $yfigur[42][2]=1;
 $xfigur[42][3]=1; $yfigur[42][3]=2;
 $xfigur[42][4]=2; $yfigur[42][4]=2;
 $xfigur[42][5]=0; $yfigur[42][5]=1;
  
 # Wuerfelnetz 43
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1.**..#
 #x2**...#
 #x3*....#
 #x4.....#
 #########
 $xfigur[43][0]=1; $yfigur[43][0]=2;
 $xfigur[43][1]=3; $yfigur[43][1]=0;
 $xfigur[43][2]=0; $yfigur[43][2]=1;
 $xfigur[43][3]=1; $yfigur[43][3]=1;
 $xfigur[43][4]=2; $yfigur[43][4]=1;
 $xfigur[43][5]=2; $yfigur[43][5]=0;
  
 # Wuerfelnetz 44
 #########
 #  yyyyy#
 #  01234#
 #x0..*..#
 #x1.***.#
 #x2**...#
 #x3.....#
 #x4.....#
 #########
 $xfigur[44][0]=1; $yfigur[44][0]=3;
 $xfigur[44][1]=2; $yfigur[44][1]=0;
 $xfigur[44][2]=1; $yfigur[44][2]=1;
 $xfigur[44][3]=1; $yfigur[44][3]=2;
 $xfigur[44][4]=0; $yfigur[44][4]=2;
 $xfigur[44][5]=2; $yfigur[44][5]=1;
  
 # Wuerfelnetz 45
 #########
 #  yyyyy#
 #  01234#
 #x0*....#
 #x1**...#
 #x2.**..#
 #x3.*...#
 #x4.....#
 #########
 $xfigur[45][0]=2; $yfigur[45][0]=2;
 $xfigur[45][1]=3; $yfigur[45][1]=1;
 $xfigur[45][2]=1; $yfigur[45][2]=0;
 $xfigur[45][3]=1; $yfigur[45][3]=1;
 $xfigur[45][4]=2; $yfigur[45][4]=1;
 $xfigur[45][5]=0; $yfigur[45][5]=0;
  
 # Wuerfelnetz 46
 #########
 #  yyyyy#
 #  01234#
 #x0..**.#
 #x1***..#
 #x2.*...#
 #x3.....#
 #x4.....#
 #########
 $xfigur[46][0]=0; $yfigur[46][0]=3;
 $xfigur[46][1]=2; $yfigur[46][1]=1;
 $xfigur[46][2]=1; $yfigur[46][2]=1;
 $xfigur[46][3]=1; $yfigur[46][3]=2;
 $xfigur[46][4]=0; $yfigur[46][4]=2;
 $xfigur[46][5]=1; $yfigur[46][5]=0;
  
 # Wuerfelnetz 47
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1**...#
 #x2.**..#
 #x3..*..#
 #x4.....#
 #########
 $xfigur[47][0]=3; $yfigur[47][0]=2;
 $xfigur[47][1]=1; $yfigur[47][1]=0;
 $xfigur[47][2]=0; $yfigur[47][2]=1;
 $xfigur[47][3]=1; $yfigur[47][3]=1;
 $xfigur[47][4]=2; $yfigur[47][4]=1;
 $xfigur[47][5]=2; $yfigur[47][5]=2;
  
 # Wuerfelnetz 48
 #########
 #  yyyyy#
 #  01234#
 #x0**...#
 #x1.***.#
 #x2...*.#
 #x3.....#
 #x4.....#
 #########
 $xfigur[48][0]=2; $yfigur[48][0]=3;
 $xfigur[48][1]=0; $yfigur[48][1]=1;
 $xfigur[48][2]=1; $yfigur[48][2]=1;
 $xfigur[48][3]=1; $yfigur[48][3]=2;
 $xfigur[48][4]=1; $yfigur[48][4]=3;
 $xfigur[48][5]=0; $yfigur[48][5]=0;
  
 # Wuerfelnetz 49
 #########
 #  yyyyy#
 #  01234#
 #x0..*..#
 #x1.**..#
 #x2.*...#
 #x3**...#
 #x4.....#
 #########
 $xfigur[49][0]=0; $yfigur[49][0]=2;
 $xfigur[49][1]=3; $yfigur[49][1]=1;
 $xfigur[49][2]=3; $yfigur[49][2]=0;
 $xfigur[49][3]=1; $yfigur[49][3]=1;
 $xfigur[49][4]=2; $yfigur[49][4]=1;
 $xfigur[49][5]=1; $yfigur[49][5]=2;
  
 # Wuerfelnetz 50
 #########
 #  yyyyy#
 #  01234#
 #x0*....#
 #x1***..#
 #x2..**.#
 #x3.....#
 #x4.....#
 #########
 $xfigur[50][0]=2; $yfigur[50][0]=3;
 $xfigur[50][1]=1; $yfigur[50][1]=0;
 $xfigur[50][2]=1; $yfigur[50][2]=1;
 $xfigur[50][3]=1; $yfigur[50][3]=2;
 $xfigur[50][4]=2; $yfigur[50][4]=2;
 $xfigur[50][5]=0; $yfigur[50][5]=0;
  
 # Wuerfelnetz 51
 #########
 #  yyyyy#
 #  01234#
 #x0.**..#
 #x1.*...#
 #x2**...#
 #x3*....#
 #x4.....#
 #########
 $xfigur[51][0]=0; $yfigur[51][0]=2;
 $xfigur[51][1]=3; $yfigur[51][1]=0;
 $xfigur[51][2]=0; $yfigur[51][2]=1;
 $xfigur[51][3]=1; $yfigur[51][3]=1;
 $xfigur[51][4]=2; $yfigur[51][4]=1;
 $xfigur[51][5]=2; $yfigur[51][5]=0;
  
 # Wuerfelnetz 52
 #########
 #  yyyyy#
 #  01234#
 #x0...*.#
 #x1.***.#
 #x2**...#
 #x3.....#
 #x4.....#
 #########
 $xfigur[52][0]=0; $yfigur[52][0]=3;
 $xfigur[52][1]=2; $yfigur[52][1]=0;
 $xfigur[52][2]=1; $yfigur[52][2]=1;
 $xfigur[52][3]=1; $yfigur[52][3]=2;
 $xfigur[52][4]=1; $yfigur[52][4]=3;
 $xfigur[52][5]=2; $yfigur[52][5]=1;
  
 # Wuerfelnetz 53
 #########
 #  yyyyy#
 #  01234#
 #x0*....#
 #x1**...#
 #x2.*...#
 #x3.**..#
 #x4.....#
 #########
 $xfigur[53][0]=3; $yfigur[53][0]=2;
 $xfigur[53][1]=0; $yfigur[53][1]=0;
 $xfigur[53][2]=1; $yfigur[53][2]=0;
 $xfigur[53][3]=1; $yfigur[53][3]=1;
 $xfigur[53][4]=2; $yfigur[53][4]=1;
 $xfigur[53][5]=3; $yfigur[53][5]=1;
  
 # Wuerfelnetz 54
 #########
 #  yyyyy#
 #  01234#
 #x0..**.#
 #x1***..#
 #x2*....#
 #x3.....#
 #x4.....#
 #########
 $xfigur[54][0]=0; $yfigur[54][0]=3;
 $xfigur[54][1]=2; $yfigur[54][1]=0;
 $xfigur[54][2]=1; $yfigur[54][2]=1;
 $xfigur[54][3]=1; $yfigur[54][3]=2;
 $xfigur[54][4]=0; $yfigur[54][4]=2;
 $xfigur[54][5]=1; $yfigur[54][5]=0;
  
 # Wuerfelnetz 55
 #########
 #  yyyyy#
 #  01234#
 #x0**...#
 #x1.*...#
 #x2.**..#
 #x3..*..#
 #x4.....#
 #########
 $xfigur[55][0]=3; $yfigur[55][0]=2;
 $xfigur[55][1]=0; $yfigur[55][1]=0;
 $xfigur[55][2]=0; $yfigur[55][2]=1;
 $xfigur[55][3]=1; $yfigur[55][3]=1;
 $xfigur[55][4]=2; $yfigur[55][4]=1;
 $xfigur[55][5]=2; $yfigur[55][5]=2;
  
 # Wuerfelnetz 56
 #########
 #  yyyyy#
 #  01234#
 #x0**...#
 #x1.**..#
 #x2..**.#
 #x3.....#
 #x4.....#
 #########
 $xfigur[56][0]=2; $yfigur[56][0]=3;
 $xfigur[56][1]=0; $yfigur[56][1]=1;
 $xfigur[56][2]=1; $yfigur[56][2]=1;
 $xfigur[56][3]=1; $yfigur[56][3]=2;
 $xfigur[56][4]=2; $yfigur[56][4]=2;
 $xfigur[56][5]=0; $yfigur[56][5]=0;
  
 # Wuerfelnetz 57
 #########
 #  yyyyy#
 #  01234#
 #x0..*..#
 #x1.**..#
 #x2**...#
 #x3*....#
 #x4.....#
 #########
 $xfigur[57][0]=0; $yfigur[57][0]=2;
 $xfigur[57][1]=3; $yfigur[57][1]=0;
 $xfigur[57][2]=1; $yfigur[57][2]=2;
 $xfigur[57][3]=1; $yfigur[57][3]=1;
 $xfigur[57][4]=2; $yfigur[57][4]=1;
 $xfigur[57][5]=2; $yfigur[57][5]=0;
  
 # Wuerfelnetz 58
 #########
 #  yyyyy#
 #  01234#
 #x0..**.#
 #x1.**..#
 #x2**...#
 #x3.....#
 #x4.....#
 #########
 $xfigur[58][0]=0; $yfigur[58][0]=3;
 $xfigur[58][1]=2; $yfigur[58][1]=0;
 $xfigur[58][2]=1; $yfigur[58][2]=1;
 $xfigur[58][3]=1; $yfigur[58][3]=2;
 $xfigur[58][4]=0; $yfigur[58][4]=2;
 $xfigur[58][5]=2; $yfigur[58][5]=1;
  
 # Wuerfelnetz 59
 #########
 #  yyyyy#
 #  01234#
 #x0*....#
 #x1**...#
 #x2.**..#
 #x3..*..#
 #x4.....#
 #########
 $xfigur[59][0]=3; $yfigur[59][0]=2;
 $xfigur[59][1]=0; $yfigur[59][1]=0;
 $xfigur[59][2]=1; $yfigur[59][2]=0;
 $xfigur[59][3]=1; $yfigur[59][3]=1;
 $xfigur[59][4]=2; $yfigur[59][4]=1;
 $xfigur[59][5]=2; $yfigur[59][5]=2;

 # Wuerfelnetz 60
 #########
 #  yyyyy#
 #  01234#
 #x0***..#
 #x1..***#
 #x2.....#
 #x3.....#
 #x4.....#
 #########
 $xfigur[60][0]=1; $yfigur[60][0]=4;
 $xfigur[60][1]=0; $yfigur[60][1]=1;
 $xfigur[60][2]=0; $yfigur[60][2]=2;
 $xfigur[60][3]=1; $yfigur[60][3]=2;
 $xfigur[60][4]=1; $yfigur[60][4]=3;
 $xfigur[60][5]=0; $yfigur[60][5]=0;
  
  
 # Wuerfelnetz 61
 #########
 #  yyyyy#
 #  01234#
 #x0.*...#
 #x1.*...#
 #x2**...#
 #x3*....#
 #x4*....#
 #########
 $xfigur[61][0]=0; $yfigur[61][0]=1;
 $xfigur[61][1]=4; $yfigur[61][1]=0;
 $xfigur[61][2]=2; $yfigur[61][2]=1;
 $xfigur[61][3]=2; $yfigur[61][3]=0;
 $xfigur[61][4]=3; $yfigur[61][4]=0;
 $xfigur[61][5]=1; $yfigur[61][5]=1;

 # Wuerfelnetz 62
 #########
 #  yyyyy#
 #  01234#
 #x0..***#
 #x1***..#
 #x2.....#
 #x3.....#
 #x4.....#
 #########
 $xfigur[62][0]=0; $yfigur[62][0]=4;
 $xfigur[62][1]=1; $yfigur[62][1]=0;
 $xfigur[62][2]=0; $yfigur[62][2]=2;
 $xfigur[62][3]=0; $yfigur[62][3]=3;
 $xfigur[62][4]=1; $yfigur[62][4]=1;
 $xfigur[62][5]=1; $yfigur[62][5]=2;
  
 # Wuerfelnetz 63
 #########
 #  yyyyy#
 #  01234#
 #x0*....#
 #x1*....#
 #x2**...#
 #x3.*...#
 #x4.*...#
 #########
 $xfigur[63][0]=4; $yfigur[63][0]=1;
 $xfigur[63][1]=1; $yfigur[63][1]=0;
 $xfigur[63][2]=2; $yfigur[63][2]=0;
 $xfigur[63][3]=2; $yfigur[63][3]=1;
 $xfigur[63][4]=3; $yfigur[63][4]=1;
 $xfigur[63][5]=0; $yfigur[63][5]=0;
}

# Programmstart

# Spielfelder initialisieren
init_felder;
# Wuerfelnetze laden
init_figuren;
# Hauptprogramm ausfuehren
mainproc(0);

 
>>>Download wuerfelnetze.perl

Das Hauptprogramm verfolgt nun folgende Strategie:
Die Funktion mainproc wird mit einer bestimmten Feldnummer (beim Start 0) gestartet und versucht nun alle verbleibenden Würfelnetze (beim Start alle von 0 bis 63) zu platzieren. Dazu beginnt es im Spielfeld links oben an der Position x=0, y=0 und versucht das erste Netz zu platzieren. Welches Netz und welche Position im aktuellen Spielfeld momentan getestet wird, wird in im Array netzinfo abgespeichert. Wenn es an der getesteten Stelle keine Kollisionen gibt, dann kopiert es das aktuelle Spielfeld in ein Feld mit der nächsthöheren Feldnummer, setzt das Netz an der gefunden Position ab und ruft sich selbst mit der neuen Feldnummer auf. Wenn es an der getesteten Stelle jedoch eine Kollision gibt, verfährt das Programm wie folgt:
1. Bei einer Kollision mit einer anderen Figur wird die nächste Stelle im Spielfeld getestet, also z.B. x=0, y=1.
2. Bei einer Kollision mit dem rechten Rand fährt das Programm auf der nächsten Zeile mit dem Test fort, also z.B. bei x=1, y=0.
3. Bei einer Kollision mit dem unteren Rand wird der Test mit dem nächsten Netz am Feldanfang x=0, y=0 fortgesetzt.
Wenn nun also z.B. alle Positionen des Netzes 0 ausprobiert wurden, wird in die netzinfo das nächste zu testende Netz eingetragen und deshalb nie wieder für einen weiteren Test verwendet. Das wurde realisiert, indem mainproc den Startwert der Netztests immer aus der netzinfo des vorherigen Feldes läd. Dadurch wird die Anzahl der insgesamt durchgeführten Tests erheblich reduziert und im Ergebnis entstehen weniger Doppelungen.
Durch die Iteration wird das Programm sehr klein und übersichtlich. Leider sind Iterationen nicht so einfach zu verstehen wie normale Sequenzen, aber der Code ist wesentlich kürzer und eleganter.

Im Ergebnis des Programmlaufs entsteht eine Liste von Spielfeldern mit mindestens 4 eingefügten Würfelnetzen. Sollte eine oder mehrere Lösungen enthalten sein, so werden sie gezählt und besonders kenntlich gemacht. Die Liste enthält insgesamt 165184 Spielfelder und keine einzige Lösung mit 5 Würfelnetzen. Wenn das Programm also keinen Fehler enthält, dann bedeutet das, dass es nicht möglich ist, fünf Würfelnetze im Format 7x5 anzuordnen. Die Liste kann hier heruntergeladen werden, sie ist ca 30MB!!! groß.
Mit Hilfe des Computers kann also festgestellt werden, dass es keine Lösung gibt, bei der die Wü,rfelnetze im 5x7-Format und damit mit nur 17,2% Abfall angeordnet werden können. Es bleibt also weiterhin die Aufgabe eine Lösung zu finden, die weniger als 28% Abfall erzeugt.

Über Hinweise und Verbesserungsvorschläge würde ich mich sehr freuen. Ich halte das Würfelnetzproblem für sehr interessant und anspruchsvoll. Wer eine gute Lösung zu dem Problem findet, der soll sich bitte bei mir melden.


Sollte jemand seine Rechte durch eine Veröffentlichung auf dieser oder einer anderen meiner Seiten verletzt sehen, bitte ich um sofortige Kontaktaufnahme. Ich werde die entsprechenden Inhalte umgehend entfernen. Somit sind sowohl ein anwaltlicher Rat als auch eine kostenpflichtige Abmahnung nicht erforderlich! Weiterhin weise ich darauf hin, dass der Inhalt verlinkter Seiten nicht in meiner redaktionellen Verantwortung liegt.
Vielen Dank

www.schlaefendorf.de 2012

www.linux-web.de