Thread Rätsel der Woche 2007/5: viel Spaß dabei :) (18 answers)
Opened by Ishka at 2007-02-27 06:00

topeg
 2007-03-09 18:41
#74613 #74613
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Ich konnte es nicht lassen nund habe mich gefragt, warum mein Code so verflucht Langsam ist, wenn er das große L berechnen soll. Die Sache ist an sich simple, da ich Zeile für Zeile durchgehe und nach beachbarten schon gesetzten Punken für das Finden der Außenfläche schaue, hat der Algorithmus beim großen L eine schwäche, da nur sehr wenie Pukte pro durchlauf gefunden werden. Mit einer kleinen Modifikation bescheunige ich das ganze enorm.

Hier die modifizierte Funktion:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
sub mark_outside($)
{
 my $map=shift(@_);
 my $end=1;
 my $rotate=0;
 $$map[0][0]=-2;
 while($end)
 {
  $end=0;
  $rotate++;
  $rotate=1 if($rotate==5);
  for my $x (0..$#$map)
  {
   $x=$#$map-$x if($rotate==3 or $rotate==4);
   for my $y (0..$#{$$map[$x]})
   {
    $y=$#{$$map[$x]}-$y if($rotate==2 or $rotate==3);
    if($$map[$x][$y]==-1)
    {
     if (
       ( $x-1>=0 and $$map[$x-1][$y]==-2 ) or 
       ( $y-1>=0 and $$map[$x][$y-1]==-2 ) or 
       ( $x+1<@{$map} and $$map[$x+1][$y]==-2 ) or 
       ( $y+1<@{$$map[$x]} and $$map[$x][$y+1]==-2 )
      ) 
     {
      $$map[$x][$y]=-2;
      $end=1;
     }
    }
   }
  }  
 }
}

Damit ist mein Script so schnell wie die anderen. :-)

View full thread Rätsel der Woche 2007/5: viel Spaß dabei :)