Einzelnen Beitrag anzeigen
Alt 23.12.09, 10:23   #29 (permalink)
lorschy
 
Registriert seit: 30.07.09
lorschy Leistung: Facit NTK
lorschy eine Nachricht über ICQ schicken
Likes: 0
Standard

Habe das ganze mal in Perl geschrieben...

time perl random.pl 42 24 5 18 37 9
Run 2, new Max: 1
Run 7, new Max: 3
Run 1965, new Max: 4
Run 39841, new Max: 5
Run 30886889, new Max: 6

Finished after 30886889 Runs

real 7m18.662s
user 6m51.560s
sys 0m2.970s

time perl random.pl 42 24 5 18 37 9
Run 1, new Max: 1
Run 4, new Max: 2
Run 130, new Max: 3
Run 3085, new Max: 4
Run 61583, new Max: 5
Run 13636092, new Max: 6

Finished after 13636092 Runs

real 3m13.131s
user 3m1.370s
sys 0m1.250s


A Perl Solution   

Code:
use strict;

my @zahlen = @ARGV;
if (scalar @zahlen ne 6) { die "Usage $0 1 2 3 4 5 6\n"; }

foreach (@zahlen) {
    if (($_ > 49) || ($_ < 1)) { die "[ $_ ]Zahl muss zwischen 0 - 49 liegen\n"; }
}

my $max_hits = 0;
my $runs = 0;
my $numbers;
while ($max_hits < 6) {
    $runs++;

    $numbers = &create_rnd(); 
#    foreach (keys %$numbers) { print $_."\t"; }
    my $hits = &match($numbers, @zahlen);

    if ($hits > $max_hits) { 
    $max_hits  = $hits;
    print "Run $runs, new Max: $max_hits\n";
    }
}

print "\nFinished after $runs Runs \n";
exit;


sub create_rnd()
{
        my $numbers; 
    my $range = 49;

    my $c_nr = 0;
    while ($c_nr <=  5) {
            my $n = int(rand($range));
        if (defined $numbers->{$n}) { 
#            print "$n Oops gibts schon\n";
            next; 
        } else {
                  $numbers->{$n} = $c_nr;
            $c_nr++;
        }
    }

    return $numbers;
}


sub match()
{
    my $numbers = shift;
    my @mine    = @_;

    my $hits    = 0;

    foreach (@mine) {
    if (defined $numbers->{$_}) { $hits++; }
    }
    return $hits;
}

exit;
lorschy ist offline   Mit Zitat antworten
 

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