rolfrost: 3 verschiedene Variablen..

Hallo PERL freunde,

ich brauch mal eben 3 Zahlen (jeweils von 1..25) in einem Script die jedoch nicht gleich sein dürfen.

Wie machen ?

Viele Grüße, Rolf

--

SELFforum - Das Tor zur Welt!
  1. Moin!

    ich brauch mal eben 3 Zahlen (jeweils von 1..25) in einem Script die jedoch nicht gleich sein dürfen.

    Du legst ein Array mit diesen Zahlen an, und eine Zufallsfunktion wählt ein Arrayelement aus, welches du daraufhin aus dem Array entfernst. Mit dem verbleibenden Array machst du wieder dasselbe, bis du drei Zahlen hast.

    - Sven Rautenberg

    --
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
    1. Hi Sven,

      ich brauch mal eben 3 Zahlen (jeweils von 1..25) in einem Script die jedoch nicht gleich sein dürfen.

      Du legst ein Array mit diesen Zahlen an, und eine Zufallsfunktion wählt ein Arrayelement aus, welches du daraufhin aus dem Array entfernst. Mit dem verbleibenden Array machst du wieder dasselbe, bis du drei Zahlen hast.

      Jow, so gehts - aber gestern abend nach 3 Flshcn Rotwin war die graue Zelle wo das drinsteht nicht mehr erreichbar ;-)

      Viele Grüße, Rolf

      Aber es ist ja auch so eine interessante Diskussion hier geworden!

      --

      SELFforum - Das Tor zur Welt!
  2. hi Rolf

    my $var1=2;
    my $var2=2;
    my $var3=3;

    oder willst du doch was anderes????
    na dann formuliere mal ne frage *fg*

    besten dank

    bis bis roman

    --
    P.S. manchmal wundere ich mich schon über die postings (fragen u. antworten) die man hier geboten bekommt(meine eigenen [leider] mit eingenommen)
    => ich denke mir meinen teil und ziehe das beste daraus :-)
  3. Sorry,

    wie Christoph weiter unten mal so schön fragte *Gibt es eine Betriebsblindheit oder so...*

    Jow!

    Die L ist ganz einfach: ich erstelle ein Array mit Zahlen von 1..25, mische das A und ziehe dann 3 Zahlen...

    Sorry 4 trouble, rolf

    --

    SELFforum - Das Tor zur Welt!
    1. hi Rolf

      hier noch eine möglichkeit
      __CODE__
      #!perl.exe -w # ich brache keine  path :-)

      use strict;
      use CGI::Carp qw(fatalsToBrowser);

      print "Content-type: text/html\n\n";
      print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
      print "<html><head><title>Testausgabe</title>\n";
      print "</head><body>\n";

      my $v1=0;
      my $v2=0;
      my $v3=0;
      while($v1==$v2||$v2==$v3||$v1==$v3){
       $v1=int(rand(25));
       $v2=int(rand(25));
       $v3=int(rand(25));
      }
      print "$v1<br>$v2<br>$v3";
      print "</body></html>\n";

      __CODE__

      ich habe das ganze getestet und es sollte ok sein

      bis bis roman

      --
      P.S. manchmal wundere ich mich schon über die postings (fragen u. antworten) die man hier geboten bekommt(meine eigenen [leider] mit eingenommen)
      => ich denke mir meinen teil und ziehe das beste daraus :-)
      1. Moin!

        hier noch eine möglichkeit

        while($v1==$v2||$v2==$v3||$v1==$v3){
         $v1=int(rand(25));
         $v2=int(rand(25));
         $v3=int(rand(25));
        }

        Deine Methode bricht aber nicht deterministisch ab.

        Wenn dein "Zufall" ein ganz blöder Zufall ist, dann produziert er immer genau drei identische Werte. Das kann ja zufällig mal so sein, dein Programm könnte also ewig laufen und würde nie fertig werden.

        - Sven Rautenberg

        --
        ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
        1. hi Sven

          Deine Methode bricht aber nicht deterministisch ab.

          ^^^^^^^^^^^^^^^
                                            kann ich das essen *dummfrag*

          Wenn dein "Zufall" ein ganz blöder Zufall ist, dann produziert er immer genau drei identische Werte. Das kann ja zufällig mal so sein, dein Programm könnte also ewig laufen und würde nie fertig werden.

          jeep du hast Recht (ich solle mal wieder LOtto spielen "vieleicht tritt ja ein  ganz blöder Zufall ein")

          ich überlege gerade wie groß die wahrscheinlichkeit ist das:

          von 3zahlen 2 identisch sind

          bei lotto ist es doch 6/!49 ????

          bis bis roman

          --
          P.S. manchmal wundere ich mich schon über die postings (fragen u. antworten) die man hier geboten bekommt(meine eigenen [leider] mit eingenommen)
          => ich denke mir meinen teil und ziehe das beste daraus :-)
          1. Moin!

            Deine Methode bricht aber nicht deterministisch ab.
                                              ^^^^^^^^^^^^^^^
                                              kann ich das essen *dummfrag*

            Probier' lieber Chili con Carne. :)

            ich überlege gerade wie groß die wahrscheinlichkeit ist das:

            von 3zahlen 2 identisch sind

            Wenn du 3 Mal aus dem Zahlenbereich 1 bis 25 ziehst (mit Zurücklegen), dann hast du insgesamt 25^3 = 15625 verschiedene Ziehungsergebnisse, bei denen es in einigen Fällen zu Dopplungen kommt.

            Im Einzelnen: Es gibt genau 25 Zahlen verschiedene Zahlen, die (zusammen mit einer dritten) doppelt vorkommen können. Also 1,1,x; 2,2,x; 3,3,x usw. Diese 25 Zahlen können mit genau 24 dritten Zahlen vorkommen. Folglich: 25*24 = 600. Das gilt aber nur für identische erste und zweite Zahl.

            Außerdem gibts für identische erste und dritte Zahl und identische zweite und dritte Zahl auch noch mal je 600 Kombinationen. Summe: 1800.

            Und zu guter Letzt gibt es auch noch 25 Kombinationen, bei denen alle Zahlen identisch sind.

            1825/15625 = 0,1168 - also tritt in 11,68 % aller Ziehungen eine Dopplung auf. Das ist ein ziemlich hoher Anteil, würde ich meinen. Mit anderen Worten: Bei jeder zehnten Ziehung ist ein Wert mehrfach vorhanden, es muß neu gezogen werden.

            Es klingt einleuchtend, dass die Problematik weniger schlimm wird, je mehr Zahlen als Auswahl zur Verfügung stehen.

            Andererseits wird die Problematik um so krasser, je mehr verschiedene Zahlen gezogen werden sollen!

            Als ultimative Aufgabe ist es anzusehen, aus 25 Zahlen 25 verschiedene Zahlen zu ziehen, also im Prinzip eine zufällige Reihenfolge aller dieser Zahlen herzustellen.

            Dein Prinzip läuft hierbei von der Wirkung her so ab: Ziehe eine zufällige Zahl. Schau nach, ob sie schon gezogen wurde. Wenn ja, ziehe erneut für diese Position, ansonsten notiere die Zahl und beginne von vorn für die nächste Position.

            Wenn schon 24 zufällig ermittelte Zahlen bekannt sind, suchst du dich mit dieser Methode (eine zufällige Zahl von 1-25 ermitteln, gucken, ob sie schon gezogen wurde, ggf. neu suchen) tot.

            Da ist es doch viel besser, genau wie beim Lotto per Zufall eine Zahl aus einem Pool zu ermitteln und diese Zahl dann aus dem Pool zu entfernen. Damit hat man garantiert nach 25 Ziehungen alle 25 Zahlen aus dem Pool entnommen und in eine zufällige Reihenfolge gebracht. Genau wie beim Lotto: Ziehen ohne Zurücklegen.

            bei lotto ist es doch 6/!49 ????

            Ähm, wie meinen? Was ist da 6/!49 ?

            Die Chance, beim Lotto 6 Richtige zu kriegen, beträgt "6 über 49", was identisch ist mit "6! / (49!/43!)" und ungefähr 1:14 Millionen bedeutet.

            - Sven Rautenberg

            --
            ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
            1. hi hi

              Moin!

              Deine Methode bricht aber nicht deterministisch ab.
                                                ^^^^^^^^^^^^^^^
                                                kann ich das essen *dummfrag*

              Probier' lieber Chili con Carne. :)

              jeep mach ich

              so hier mal ein kleiner link http://www.hausarbeiten.de/rd/faecher/hausarbeit/sta/4258.html der meine wisseneslücke mal wieder aufgefüllt hat.

              lotto: das ganze heißt 49 über 6 => 49!/(49-6)!*6! ~ 1/14mill :-)

              3 aus 25 :             25 über 3 => 25!/(25-3)!*3! ~ 1/82800
                                                                     ^^^^eher gering

              --------------------------------------------------------------------

              deine lösung war die geschicktere!!
              dabei meiner lösung eine geringe wahrscheinlickeit besteht das die ohne ende läuft.

              war doch mal wieder schön etwas wahrscheinlichkeitrechnung zumachen obwohl das nicht mit dem ursprungsposting zu tun hat :-)

              bis bis roman

              --
              P.S. manchmal wundere ich mich schon über die postings (fragen u. antworten) die man hier geboten bekommt(meine eigenen [leider] mit eingenommen)
              => ich denke mir meinen teil und ziehe das beste daraus :-)
        2. Hi!

          hier noch eine möglichkeit

          while($v1==$v2||$v2==$v3||$v1==$v3){
          $v1=int(rand(25));
          $v2=int(rand(25));
          $v3=int(rand(25));
          }

          Deine Methode bricht aber nicht deterministisch ab.

          Wenn dein "Zufall" ein ganz blöder Zufall ist, dann produziert er immer genau drei identische Werte. Das kann ja zufällig mal so sein, dein Programm könnte also ewig laufen und würde nie fertig werden.

          Das stimmt. Mich als Physikstudenten erinnert das an ein Ergebnis aus der thermodynamischen Statistik: Dort wird der 2. Hauptsatz der Thermodynamik so interpretiert, dass die Umkehrung sog. irreversibler Prozesse nicht strikt unmoeglich ist, sondern nur extrem unwahrscheinlich. Die Standardbeispiele hierfuer sind 1) ein gasbefuellter Raum, in dem sich ploetzlich saemtliches Gas in einer Haelfte des Raumes sammelt und in der anderen Haelfte Vakuum herrscht und 2) ein Stein, der nach oben springt und sich dabei abkuehlt. Das kann naemlich auch mal zufaellig so sein. ;-)

          So long

          --
          "Microsoft ist über die Probleme informiert, hat aber noch nicht reagiert."
          "Der Patch %s, der das Problem %s beheben sollte, funktioniert offenbar nicht."
          "Wann ein Update verfügbar sein wird, ist nicht bekannt."
              (Textbausteine der Heise-Newsticker-Redaktion)
      2. Moin,

        wir machen mal eine Ziehung:

        use strict;

        3 verschiedene Zahlen ziehen

        my @numbers = (1..25);

        kräftig mixen

        shuffle(@numbers);

        Ziehung

        my ($r,$s,$t) = @numbers;
        print "$r $s $t\n";
        print "aus ", join " ", @numbers, "\n";

        subfunktion menge mischen (siehe PERL Doku: fisher_yates_shuffle)

        sub 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];
         }
        }
        =cut
        9 12 2
        aus 9 12 2 16 17 25 14 1 24 4 10 19 6 15 21 3 7 18 5 13 8 11 22 20 23

        Viele Grüße an die Community, Rolf