Thread Denkfehler in while?
(29 answers)
Opened by Ichhalt at 2016-11-21 08:18 2016-11-21T07:18:05 Ichhalt Durchaus möglich. Beispiel: 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 #!/usr/bin/perl use warnings; use strict; my @alle_spieler = (1 .. 4); # my @alle_spieler = (1 .. 24); my %schon_gespielt; my $spieler; my $gegner; my $i; my $index; my $laufende_nr = 1; foreach $spieler (@alle_spieler) { # Im Hash %schon_gespielt wird fuer jeden Spieler # ein leeres, anonymes Array angelegt: $schon_gespielt{$spieler} = []; } print "\n"; foreach $spieler (@alle_spieler) { foreach $gegner (@alle_spieler) { if ($gegner == $spieler) { next; } $index = 0; # Das Array des Gegners (das sich im Hash %schon_gespielt befindet) # wird darauf untersucht, ob der Gegner schon gegen den # Spieler gespielt hat: foreach $i (@{$schon_gespielt{$gegner}}) { if ($i == $spieler) { $index = 1; last; } } if ($index == 1) { next; } print "$laufende_nr: Spieler Nr. $spieler gegen Spieler Nr. $gegner.\n"; # Der Gegner des Spielers wird in dem Array des Spielers # (das sich im Hash %schon_gespielt befindet) abgelegt: push($schon_gespielt{$spieler}, $gegner); $laufende_nr++; } } print "\n"; Frage ist, ob Du das mit den Arrays in einem Hash schon kennst. Der Code wird übrigens auch bei 24 Spielern nicht langsam. Last edited: 2016-11-22 22:59:25 +0100 (CET) |