Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8791[/thread]

Rätsel der Woche 2007/5: viel Spaß dabei :) (Seite 2)

Leser: 2


<< |< 1 2 >| >> 19 Einträge, 2 Seiten
sesth
 2007-03-01 11:05
#74605 #74605
User since
2005-02-01
181 Artikel
BenutzerIn
[default_avatar]
Hab auch was geschickt ;)
Gruß
Thomas
betterworld
 2007-03-08 04:23
#74606 #74606
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
So, es hat zwar lange gedauert, aber ich habe die Auswertung fertig.  Ich habe zu jedem Algorithmus ein bisschen geschrieben und Vergleiche angestellt... wäre schön, wenn es sich jemand durchliest :)

http://wiki.perl-community.de/bin/view/Wissensbasis/RaetseL20070227

Update: Oops, der Link ging ja gar nicht... naja, irgendwie habt Ihr es wohl trotzdem geschafft, der Artikel zu finden\n\n

<!--EDIT|betterworld|1173347978-->
topeg
 2007-03-08 07:28
#74607 #74607
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Seltsam, warum ist meine nicht dabei? Ich hatte sie schon einen Tag nach dem Start gesendet.
Ich habe es gerade ausprobiert, sie ist die einzige Lösung, die alle Testfälle besteht, alle verlangten Eingaben versteht und keine Fehlermeldungen liefert.
renee
 2007-03-08 09:41
#74608 #74608
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dann stell' Deine Lösung am besten auch ins Wiki...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
sesth
 2007-03-08 10:59
#74609 #74609
User since
2005-02-01
181 Artikel
BenutzerIn
[default_avatar]
Ja wenn man nicht ausreichend testet ...

Ich musste natürlich nachsehen, warum mein Skript falsche Ergebnisse geliefert hat. Es ist ein banaler Kopierfehler. In Zeile 81
Code: (dl )
    $ymin = $y if (! defined $ymin || $y < $xmin);

muss natürlich
Code: (dl )
    $ymin = $y if (! defined $ymin || $y < $ymin);

stehen. Na ja - shit happens :( . Der Fehler ist bei den vorgegebenen Beispielen nicht zum Tragen gekommen.

Die Rätsel machen Spass - weiter so!
Gruß
Thomas
betterworld
 2007-03-08 15:22
#74610 #74610
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=topeg,08.03.2007, 06:28]Seltsam, warum ist meine nicht dabei? Ich hatte sie schon einen Tag nach dem Start gesendet.
Ich habe es gerade ausprobiert, sie ist die einzige Lösung, die alle Testfälle besteht, alle verlangten Eingaben versteht und keine Fehlermeldungen liefert.[/quote]
Wohin hast Du sie geschickt?  Dieses Mal hat gab es ja eine neue Email-Adresse.
Wie renee schon sagte: Du kannst sie gerne nachtraeglich noch ins Wiki einbauen.\n\n

<!--EDIT|betterworld|1173361267-->
topeg
 2007-03-08 18:22
#74611 #74611
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Stimmt, ich hatte eine falsche Adresse angeben.

Nun ist meine Lösung auch dabei.
Nur die Laufzeiten kann ich nicht angeben, mein alterschwacher Rechner hat für das große L 12 Minuten gebraucht. Die Werte sind nicht sonderlich repräsentativ. :-)
betterworld
 2007-03-08 23:45
#74612 #74612
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=topeg,08.03.2007, 06:28]Ich habe es gerade ausprobiert, sie ist die einzige Lösung, die alle Testfälle besteht, alle verlangten Eingaben versteht und keine Fehlermeldungen liefert.[/quote]
Ich kriege "Use of uninitialized value in split" fuer den leeren Test :)

Update: Wenn man ein leeres Argument angibt, dann geht's.. sorry :)\n\n

<!--EDIT|betterworld|1173390942-->
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. :-)
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2007-02-27 06:00.