Thread Name für Problemstellung gesucht
(8 answers)
Opened by bianca at 2018-10-08 08:22
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
|