9 Einträge, 1 Seite |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
my @liste = (E,SP,WR,F,M,C,G,L,D,KU);
my @d = ZweiausX(\@liste);
sub ZweiausX {
my $ref = shift;
my $X = @{$ref};
my @data = ();
for ($i=0;$i<$X-1;$i++) {
for ($j=$i+1;$j<$X;$j++) {
push(@data, ${$ref}[$i]."-".${$ref}[$j]);
}
}
return @data;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use strict;
use warnings;
use Data::Dumper;
my @menge = 1 .. 4;
my @iter = rec(@menge);
print Dumper \@iter;
sub rec {
return () unless ( @_ > 1 );
my $first = shift;
map {
my ( $second, $rest ) = @$_;
[ [ $first, $second ], $rest ? @$rest : () ]
} map {
my @tmp = @_;
my ( $second ) = splice @tmp, $_, 1;
[ $second, rec(@tmp) ]
} 0 .. @_ - 1
}
[ [ $first, $second ], $rest ? @$rest : () ]
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
use strict;
use warnings;
my $n = shift; # Anzahl Tage; -> 2*n Fächer
die "Anzahl Tage übergeben\n" unless $n > 0;
die "OMG, viel zu lang!\n" unless $n <= 10;
my $z; # Zähler
# sub plan ist die rekursive Funktion
# Sie sammelt im ersten Arg das ein, was bereits verplant ist und
# die restlichen Args sind noch freie Fächer (Nummern)
plan ([], 1 .. 2*$n);
print "$z verschiedene\n";
sub plan {
my @p = @{shift @_}; # Das steht derzeit fest
# Ausgeben, wenn nichts mehr zu verteilen ist.
++$z, return print join ('', map {$_&1 ? "$p[$_]}" : "{$p[$_],"} 0 .. $#p) . "\n" unless @_;
# Aus den freien den ersten wählen.
# Iterieren über die Positionen.
foreach my $i (0 .. $#_-1) {
# Aus den verbleibenen (größeren, wg Kanonizität) den
# 2. wählen
# Iterieren über restlichen (höheren) Indexnummern
foreach my $j ($i+1 .. $#_) {
# Rekursion mit den neu festgelegten gemerkt,
# und dem verbleiben Rest zur Auswahl
plan ([@p,$_[$i],$_[$j]], @_[0 .. $i-1], @_[$i+1 .. $j-1], @_[$j+1 .. $#_]);
}
}
}
Quote(E-SP|WR-F|M-C|G-L|D-KU) ist was anderes als (WR-F|E-SP|M-C|G-L|D-KU)
9 Einträge, 1 Seite |