Thread RDW #2 - Rätsel der Woche Nr. 2 (155 answers)
Opened by renee at 2004-07-16 12:08

Crian
 2004-07-19 12:48
#84455 #84455
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Und hier noch eine zweite Variante von mir, wo alles in einer Funktion P zusammengefasst ist:

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/usr/bin/perl
# Autor: Crian
# RDW 02 - Berechnung der Potenzmenge einer Menge
# Variante 2

use strict;
use warnings;


my $A = [ 'a', 'b', 'c', 'd', 'e' ];
my $P = P($A);
print_A_und_P($A, $P);


sub print_A_und_P {
my ($A, $P) = @_;

print "A = {", join(', ', @$A), "}\n";
print "P(A) = {\n";
for my $p (@$P) {
print " {", join(', ', @$p), "},\n";
}
print " }\n";
}


sub P {
my ($A) = @_;
my $P = [[]];
my $N = scalar @$A;

# In jedem Schleifendurchlauf der folgenden for-Schleife wird
# die Menge der $n elementigen Mengen aus $N Elementen gebildet:
for my $n (1..$N) {
# $n Elemente aus $N Elementen auswaehlen:
my @Mengen; # Menge mit Nummermengen
for my $element (1..$n) {
# Moegliche Nummern fuer Element $element belegen:
my @M = $element-1 .. $N-($n-$element)-1;

# Bei einelementigen Mengen: Mengen mit nur diesem Element
# erzeugen:
unless (@Mengen) {
push @Mengen, [ $_ ] for @M;
}

# Anderenfalls: Jede bisherige Nummernmenge aus @Mengen
# vervielfachen und an jede Kopie eine der neuen
# moeglichen Nummern anhaengen:
else {
my @TM = @Mengen;
@Mengen = ();
for my $tm (@TM) {
for my $m (@M) {
unless (grep { $_ >= $m } @$tm) {
push @Mengen, [ @$tm, $m ];
}
}
}
}
}

# Umsetzen der Nummern auf die Elemente der Menge
# und Abspeichern der sich ergebenden Mengen:
for my $menge (@Mengen) {
push @$P, [ map { $_ = $A->[$_] } @$menge ];
}
}

return $P;
}
\n\n

<!--EDIT|Crian|1090395176-->
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

View full thread RDW #2 - Rätsel der Woche Nr. 2