Schrift
[thread]8313[/thread]

permutation (Seite 2)

Leser: 3


<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten
fraggs
 2006-09-12 11:08
#69634 #69634
User since
2006-09-11
179 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=esskar,12.Sep..2006, 08:56]interessante lösung
obwohl sie abe mehr als neun bindestrichen nicht mehr funktioniert; hier die etwas gecleante lösung

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
my $len = $str =~ tr/-//;
my $max = (2 ** $len) - 1;
my $pat = '^' . '([^-]*)-' x $len . '([^-]*)$';
       
for my $i ( 0 .. $max ) {
           
  my $bits = sprintf("%03b", $i);
                                   
  my $subs = '';
  $subs .= '$' . ($_+1) . ((($bits >> $_) & 0x1) ? '-' : '')
     for (0 .. $len-1);
  $subs .= '$'.($len+1);
           
  my $tmp;
  eval("(\$tmp = '$str') =~ s/$pat/$subs/;");
           
  push @retval, $tmp;                        
}                


gibts noch andere lösungen?[/quote]
sieht mir eher nach mathe formeln aus ... nicht unbedingt um ein bischen foobar zo printen haha
mmm twix
Dubu
 2006-09-12 15:35
#69635 #69635
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Ich find's rekursiv schöner.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
sub binhyphen2 {
   my ($str) = @_;

   my ($first, $rest) = split /-/, $str, 2;

   return $first unless defined $rest;

   my @suffixes = binhyphen2($rest);
   return map { ($first . $_, $first . '-' . $_) } @suffixes;
}


Und es scheint auch etwas schneller zu sein:
Code: (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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
~/perl/test $ cat binhyphen.pl
#!/usr/bin/perl
use strict;
use warnings;

use Benchmark qw/cmpthese/;

my $str = $ARGV[0] || die "Usage: ./binhyphen string\n";

cmpthese (-30,
   {
       'Version 1' => sub { binhyphen1($str) },
       'Version 2' => sub { binhyphen2($str) },
   }
);

sub binhyphen1 {
   my ($str) = @_;
   my @retval;

   my $len = $str =~ tr/-//;
   my $max = (2 ** $len) - 1;
   my $pat = '^' . '([^-]*)-' x $len . '([^-]*)$';

   for my $i ( 0 .. $max ) {

      my $bits = sprintf("%03b", $i);

      my $subs = '';
      $subs .= '$' . ($_+1) . ((($bits >> $_) & 0x1) ? '-' : '')
         for (0 .. $len-1);
      $subs .= '$'.($len+1);

      my $tmp;
      eval("(\$tmp = '$str') =~ s/$pat/$subs/;");

      push @retval, $tmp;
   }
   return @retval;
}

sub binhyphen2 {
   my ($str) = @_;

   my ($first, $rest) = split /-/, $str, 2;

   return $first unless defined $rest;

   my @suffixes = binhyphen2($rest);
   return map { ($first . $_, $first . '-' . $_) } @suffixes;
}

Code: (dl )
1
2
3
4
~/perl/test $ ./binhyphen.pl a-b-c-d-e-f-g-h
           Rate Version 1 Version 2
Version 1 49.1/s        --      -99%
Version 2 4210/s     8479%        --
docsnyder
 2006-09-12 16:50
#69636 #69636
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
@Dubu

Yep, ich find's rekursiv auch schöner!

Aber, da geht noch was:

Code: (dl )
1
2
3
4
5
6
7
sub binhyphen2 {
my ($str) = @_;

my ($first, $rest) = split /-/, $str, 2;

return defined $rest ? map { ($first . $_, $first . '-' . $_) } binhyphen2($rest) : $first;
}


*schmunzel*

Gruß, Doc
Crian
 2006-09-12 18:34
#69637 #69637
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Das wär doch ein schönes RDW gewesen *mecker* ;-)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
docsnyder
 2006-09-12 18:45
#69638 #69638
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
Für was steht denn RDW???

Ich konnte im Internet nur folgende Bedeutungen finden:

- Red cell Distribution Width
- ReifenDruckWarnanlage
- Ruf Des Warlock
- Rest Der Welt

Gruß, Doc
Rambo
 2006-09-12 19:49
#69639 #69639
User since
2003-08-14
803 Artikel
BenutzerIn

user image
RDW =  Rätsel der Woche

RDW
Gruss Rambo\n\n

<!--EDIT|Rambo|1158076313-->
docsnyder
 2006-09-12 20:10
#69640 #69640
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
Man lernt eben nie aus ;o)\n\n

<!--EDIT|docsnyder|1158077474-->
Crian
 2006-09-13 15:46
#69641 #69641
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Wir hatten mal eine Zeitlang wöchentliche Rätsel gestellt um die Anfänger zu ködern, meist haben aber dann doch nur wir regulars uns damit beschäftigt und herumgegolft, so ist es irgendwann wieder eingeschlafen.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
fraggs
 2006-09-13 17:06
#69642 #69642
User since
2006-09-11
179 Artikel
BenutzerIn
[Homepage] [default_avatar]
aber das is gar nicht schlecht wenn man nix besseres auf der arbeit zutun hat ! :blush:
mmm twix
Thorium
 2006-09-13 17:09
#69643 #69643
User since
2003-08-04
232 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hier, ich hab auch noch einen Vorschlag; auch wenn ich im Benchmark damit Canchenlos bin ;):

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
sub fbhp {
    my $string = shift;
    my $seperator = shift || '-';

    my @elements = split /$seperator/, $string;
    my @status;
    my $count = $#elements;
    push @status, 0 for (0..$count); #kann man sich auch sparen
    my @ret;

    for (my $i = 1; $i <= 2 ** $count; ++$i) {
        my $this = $elements[0];
        for (my $j = 0; $j < $count; ++$j) {
            $this .= $seperator if ($status[$j]);
            if ($i % 2 ** $j == 0) {
               $status[$j] = (++$status[$j]) % 2;
            }
            $this .= $elements[$j+1];
        }
        push @ret, $this;
    }
}


Benchmark wie oben aber:
Code: (dl )
'Version 3' => sub { fbhp($str) },


Code: (dl )
1
2
3
4
            Rate Version 1 Version 3 Version 2
Version 1 62.4/s -- -92% -99%
Version 3 754/s 1114% -- -83%
Version 2 4490/s 7091% 443% --
Per|li|nist der; -en, -en <zu ↑...ist>: a) Anhänger, Vertreter der radikalen Perlinisten die Perl als die einzig wahre Sprache ansehen; b) Mitglied einer perlinistischen Community.
<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten



View all threads created 2006-09-11 12:30.