Thread Name für Problemstellung gesucht (8 answers)
Opened by bianca at 2018-10-08 08:22

Muffi
 2018-10-08 15:20
#188955 #188955
User since
2012-07-18
1465 Artikel
BenutzerIn
[default_avatar]
Sowas in der Art

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
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
my @hoelzer = (3, 3);
my @bretter = (1, 1, 1);

my @moegliche_belegungen;
my @belegung;
for (@hoelzer) {
        push @belegung, [];
}


sub summe {
        my $sum = 0;
        
        for my $elem (@_) {
                $sum += $elem;
        }
        
        return $sum;
}

sub plaziere_holz {
        my $bretter = shift;
        my $belegung = shift;
        
        my @bretter = @$bretter;
        my @belegung = @$belegung;
        
        my $holz = shift(@bretter);
        
        unless ($holz) {
                push @moegliche_belegungen, [ map { [ @$_ ] } @belegung ];               
                return;
        }

        for my $i (0..$#hoelzer) {
                if ($hoelzer[$i] - summe(@{$belegung[$i]}) >= $holz) {
                        push $belegung[$i], $holz;
                        plaziere_holz(\@bretter, \@belegung);
                        pop $belegung[$i];
                } 
        }
}

plaziere_holz(\@bretter, \@belegung);

@moegliche_belegungen = sort {
        my $bewertung_a = 0;
        my $leerhoelzer_a = 0;
        for my $i (0..$#hoelzer) {
                $bewertung_a += ($hoelzer[$i] - summe(@{$a->[$i]})) **2;
                $leerhoelzer_a++ if summe(@{$a->[$i]}) == 0;            
        }
        
        my $bewertung_b = 0;
        my $leerhoelzer_b = 0;
        for my $i (0..$#hoelzer) {
                $bewertung_b += ($hoelzer[$i] - summe(@{$b->[$i]})) **2;
                $leerhoelzer_b++ if summe(@{$b->[$i]}) == 0;
        }

        if ($leerhoelzer_a != $leerhoelzer_b) {
                return $leerhoelzer_a <=> $leerhoelzer_b;
        } else {
                return $bewertung_a <=> $bewertung_b;
        }
} @moegliche_belegungen;

for my $bel (@moegliche_belegungen) {
        say join("  |  ", map { join('; ', @$_) } @$bel);
}


Liste wird nach unten hin besser.
Sortierkriterium 1: Benutzte Hölzer
Sortierkriterium 2: Verschnittquadrate. D.h.
2 Hölzer mit Restlänge 2m und 20cm sind besser als 2 Hölzer mit jeweils 1,10m
Last edited: 2018-10-08 15:26:13 +0200 (CEST)
1 + 1 = 10

View full thread Name für Problemstellung gesucht