Thread shuffle in Schleife laufen lassen (15 answers)
Opened by qwe123qwe at 2014-12-27 17:42

qwe123qwe
 2015-01-02 18:59
#179023 #179023
User since
2013-10-08
65 Artikel
BenutzerIn
[default_avatar]
ich hab das jetzt erst einmal so umgesetzt :
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
#!/usr/bin/perl

# Prog mischen.pl

use strict;
use warnings;

my @alteliste = ();
my @neueliste = ();
my %bereits_gezogen = ();
my $gezogen;

# alte Datei einlesen
open(UNGEMISCHTEDATEI,"<ungemischte_liste") || die "kann ungemischte Datei nicht zum Einlesen öffnen : $!";
while (my $zeile = <UNGEMISCHTEDATEI>) {
        push (@alteliste,$zeile);
}
close (UNGEMISCHTEDATEI);

# ziehen ohne Zurücklegen
for ( 1 .. $#alteliste ) {
        $gezogen = int (rand($#alteliste));
        redo if exists $bereits_gezogen{$gezogen};
        push (@neueliste, $alteliste[$gezogen]);
        $bereits_gezogen{$gezogen}++;
}

# neue Datei schreiben
open(GEMISCHTEDATEI,">gemischte_liste") || die "kann gemischte Datei nicht zum Schreiben öffnen : $!";
foreach (@neueliste) {
        print GEMISCHTEDATEI ("$_");
}
close (GEMISCHTEDATEI);


Die neue Liste ist noch um eine Zeile kürzer als die alte. Sieht jemand auf die Schnelle, wie ich die noch herbekomme ?

Ich versuch jetzt folgendermaßen die "Qualität" der Mischerei abzuschätzen:
ich habe am Anfang meiner Testdatei 10 Zeilen, die mit a angehen und am Ende 10 die mit z angehen. Dazwischen sind 50 Zeilen, die weder mit a noch mit z angehen. Nach dem Mischen zähle ich die Zeilen, die in den ersten Bzw. letzten 10 Zeilen jeweils mit a bzw. z angehen.
Bei einer guten Durchmischung sollten bei mehreren Versuchen im Durchschnitt unter den ersten wie auch unter den letzten 10 Zeilen genauso viele mit a wie mit z angehen.
Stimmt das so oder habe ich da einen Denkfehler ?
Last edited: 2015-01-02 19:00:29 +0100 (CET)

View full thread shuffle in Schleife laufen lassen