Perl – Arrayinhalte mischen
Dieser Code beschreibt das zufällige Mischen von Arrayinhalten, als Beispiel dient die Ziehung der Lottozahlen.
Das Script als komplettes Codebeispiel.
Als Mischroutine kommt dabei ein Algorithmus nach Fisher Yates zum Einsatz.
CODE:
#!/usr/bin/perl # Benutzung: # Das Script als "lotto.pl" abspeichern # Im ASCII Modus hochladen # chmod 755 vergeben und im Browser aufrufen. #Fehlerausgabe an Browser use CGI::Carp qw(fatalsToBrowser); use strict; print "Content-type: text/html \n\n"; # Lottozahlen my @lottozahlen = (1..49); # Erste Mischung... fisher_yates_shuffle(@lottozahlen); # Nochmal mischen das ganze my @zweite_mischung = (@lottozahlen); fisher_yates_shuffle(@zweite_mischung); # Zufaellige Startzahl ermitteln fuer das auslesen # der 7 Lottozahlen aus dem gemischten Array my @startzahl = (1..40); my $sz = $startzahl[rand @startzahl]; # Holen der Lottozahlen my @unsortiert = (); for (my $i = $sz; $i <= 6+$sz; $i++) { push(@unsortiert, $zweite_mischung[$i]); } print "<b>Ziehung der Lottozahlen: \"6 aus 49\"</b><hr>"; # Sortieren... my @sortiert = sort {$a <=> $b} @unsortiert; # Zusatzzahl ermitteln my $zz = $sortiert[rand @sortiert]; # Lottozahlen ausgeben... foreach my $lotto (@sortiert) { if ($lotto ne $zz) { print "$lotto<br>"; } } # Zusatzzahl ausgeben... print "<b>Zusatzzahl:</b> $zz<br><br><a href=\"lotto.pl\">...nochmal mischen</a>"; # Mischroutine nach Fisher Yates sub fisher_yates_shuffle { my $array = shift; my $i; for ($i = @$array; - $i;) { my $j = int rand ($i+1); next if $i == $j; @$array[$i,$j] = @$array[$j,$i]; } }
Beispielausgabe:
Ziehung der Lottozahlen: „6 aus 49“
2
17
19
21
25
46
Zusatzzahl 5
…nochmal mischen
Keine Kommentare vorhanden