Thread Bingokarten erstellen (11 answers)
Opened by frankes at 2010-09-27 22:19

clms
 2010-09-29 00:45
#141551 #141551
User since
2010-08-29
373 Artikel
BenutzerIn
[default_avatar]
Noch ein Tipp:
Mit shuffle() aus CPAN:List::Util kann man eine Liste in eine zufällige Reihenfolge bringen. Dann die ersten Elemente auszuwählen ist trivial.
Und bei der Erzeugung des Keys würde ich die einzelnen Begriffe sicherheitshalber durch ein Zeichen trennen, das garantiert in keinem der Begriffe vorkommt, z.B. '|' oder ' '.

Hier mein Code:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use List::Util qw(shuffle);

my @begriffe = qw(eins zwei drei vier fuenf 
                  sechs sieben acht neun zehn);
my $anzahlKaertchen = 200;

my %karten = ();  # Hash mit den erzeugten Karten

while (keys(%karten) < $anzahlKaertchen) {
  # Liste mit 6 zufällig ausgewählten Begriffen anlegen
  my @karte = (shuffle(@begriffe))[0..5]; 

  # eindeutigen Hash-Key für die ausgewählte Kombination erzeugen 
  my $key = join('|',sort @karte);
  # falls es die Kombination noch nicht gab, 
  # wird die Karte im Hash gespeichert
  unless ($karten{$key}) {
    $karten{$key} = \@karte;
    print int(keys %karten) ,". Karte : ",join(" · ",@karte),"\n";
  }
}


EDIT:
Noch was - die Anzahl der gewünschten Kärtchen sollte deutlich kleiner als die Zahl möglicher Kombinationen sein, sonst wird die while-Schleife ineffizient.
Last edited: 2010-09-29 00:50:11 +0200 (CEST)

View full thread Bingokarten erstellen