Mathernerds gefragt [5$]

    • JanPhi
      JanPhi
      Bronze
      Dabei seit: 16.07.2006 Beiträge: 2.718
      Folgende Frage:

      Man wirft 3 Würfel, es zählen immer nur die beiden höchsten Augenzahlen zum Ergebnis. Jede geworfene 1 darf 1x neu geworfen werden.

      Wie hoch ist das durchschnittliche Ergebnis und wie wahrscheinlich sind: 8,9,10,11,12?


      5$ auf stars
  • 40 Antworten
    • Arwed
      Arwed
      Bronze
      Dabei seit: 19.09.2007 Beiträge: 598
      Weiß nicht, ob's hilft, hab es aber mal aus Langeweile programmiert und ne Million mal laufen lassen:

      Durchschnitt: 9,245
      2: 0,0002%
      3: 0,003%
      4: 1,1%
      5: 2,1%
      6: 6,2%
      7: 8,6%
      8: 15,6%
      9: 17,5%
      10: 20,8%
      11: 15,3%
      12: 12,8%
    • JanPhi
      JanPhi
      Bronze
      Dabei seit: 16.07.2006 Beiträge: 2.718
      awesome! danke. stars nick?
    • Arwed
      Arwed
      Bronze
      Dabei seit: 19.09.2007 Beiträge: 598
      Arwed111
    • Vlyrr
      Vlyrr
      Einsteiger
      Dabei seit: 21.10.2006 Beiträge: 14
      Brauchst du nicht die Lösungswege? Für jeden Würfel gilt

      wwk1: 1/36
      wwk2: 1/6+1/36 = 7/36
      wwk3: 7/36
      wwk4: 7/36
      wwk5: 7/36
      wwk6: 7/36


      Durchschnittsergebnis pro Würfel:
      1*1/36 + 2*7/36 + 3*7/36 + 4*7/36 + 5*7/36 + 6*7/36 = 47/12 =~3,91666


      Durchschnittsergebnis pro Wurf:
      2 * (wwk1 * wwk1 * wwk1)
      + 3*3*(wwk1 * wwk1 *wwk2)
      + 3*4*(wwk1*wwk1*wwk3)
      + 3*4*(wwk1*wwk2*wwk2)
      + 3*4*(wwk1*wwk2*wwk2)
      + 4*(wwk2*wwk2*wwk2)
      ......


      Wahrscheinlichkeit 8:
      6*(wwk1 * wwk2 * wwk6)
      + 6*(wwk2 * wwk2 * wwk6)
      + 6*(wwk1 * wwk3 * wwk5)
      + 6*(wwk2 * wwk3 * wwk5)
      + 6*(wwk3 * wwk3 * wwk5)
      + 6*(wwk1 * wwk4 * wwk4)
      + 6*(wwk2 * wwk4 * wwk4)
      + 6*(wwk3 * wwk4 * wwk4)
      + 6*(wwk4 * wwk4 * wwk4)
      = 245/864 =~.203565 =~20,356%


      Für die anderen Zahlen analog
    • flowIIpoker
      flowIIpoker
      Bronze
      Dabei seit: 14.02.2007 Beiträge: 4.301
      @arwed:

      kannste mal den sourcecode posten(sprache egal)
    • Arwed
      Arwed
      Bronze
      Dabei seit: 19.09.2007 Beiträge: 598
      Ist java

      code:
      public class Main {
      
      	public static void main(String[] args) {
      
      		int wuerfel1, wuerfel2, wuerfel3;
      		int min, max1, max2;
      		double summe = 0;
      		
      		for (int j = 0; j < 1000000; j++) {				
      			wuerfel1 = werfe();
      			wuerfel2 = werfe();
      			wuerfel3 = werfe();
      		
      			min = Math.min(Math.min(wuerfel1, wuerfel2), wuerfel3);
      			max1 = (wuerfel1 == min) ? wuerfel2 : wuerfel1;
      			max2 = (wuerfel3 == min) ? wuerfel2 : wuerfel3;
      			
      			summe += (max1 + max2);
      			//if((max1+max2) == 2)
      				//summe+=1;
      		}
      		
      		System.out.println(summe / 1000000);
      	}
      	
      	public static int werfe() {
      		
      		int wuerfel = (int) (Math.random() * 6) +1;
      		if (wuerfel == 1)
      			wuerfel = (int) (Math.random() * 6) +1;
      	
      		return wuerfel;
      	}
      	
      }
    • Bliss86
      Bliss86
      Bronze
      Dabei seit: 03.08.2006 Beiträge: 5.562
      ja fail ^^
    • MisterJ
      MisterJ
      Bronze
      Dabei seit: 26.03.2006 Beiträge: 1.760
      Ich glaube da ist nen Bug in dem Code. 1, 6, 1 wird da als 12 gezählt.

      Hier meine abweichenden Ergebnisse:

      Avg: 9.095499
      2 0.0027
      3 0.0457
      4 1.0762
      5 2.8885
      6 6.1685
      7 10.1259
      8 15.4748
      9 18.9821
      10 19.293
      11 16.1107
      12 9.8319

      code:
      #!/usr/bin/env python
      import random
      
      def dice():
          nr = random.randint(1, 6)
          if nr == 1:
              nr = random.randint(1, 6)
          return nr
      
      num_throws = 1000*1000
      results = dict([(x, 0) for x in range(2, 13)])
      for throw in range(num_throws):
          throws = [dice() for _ in range(3)]
          throws.sort()
          res = sum(throws[1:3])
          results[res] += 1
      
      avg = sum([n*c for n, c in results.iteritems()])
      
      print "Avg:", float(avg)/num_throws
      for n, c in results.iteritems():
          print n, 100.0 * float(c)/num_throws
      
      print results
    • Endero
      Endero
      Bronze
      Dabei seit: 25.05.2007 Beiträge: 734
      Ich hab's in Matlab mal Quick'n Dirty programmiert:

      code:
      n=10000; 
      Ergebnis=zeros(1,n); 
      for ee=1:n          
      A=ceil(rand(1,3)*6);          
      for ii=1:1:3         
      if A(ii) == 1             
      A(ii)=ceil(rand(1)*6);         
      end     
      end          
      MinA=min(A);     
      Ergebnis(ee)=sum(A)-MinA; 
      end  
      Durchschnitt=sum(Ergebnis)/n  
      E12=size(find(Ergebnis==12)); 
      E11=size(find(Ergebnis==11)); 
      E10=size(find(Ergebnis==10)); 
      E9=size(find(Ergebnis==9)); 
      E8=size(find(Ergebnis==8));  
      Achter=E8(2)/n*100 
      Neuner=E9(2)/n*100 
      Zehner=E10(2)/n*100 
      Elfer=E11(2)/n*100 
      Zwoelfer=E12(2)/n*100


      Ergebnis für n=10k

      Durchschnitt =

      9.1144


      Achter =

      15.3000


      Neuner =

      18.1100


      Zehner =

      20.2000


      Elfer =

      15.8000


      Zwoelfer =

      10.4500

      Ergebis für n=100k:

      Durchschnitt =

      9.0982


      Achter =

      15.6670


      Neuner =

      18.8230


      Zehner =

      19.4860


      Elfer =

      16.0490


      Zwoelfer =

      9.8310
    • Endero
      Endero
      Bronze
      Dabei seit: 25.05.2007 Beiträge: 734
      Also MisterJ verdient die 5$ für die richtige Antwort!
    • iTripleA
      iTripleA
      Bronze
      Dabei seit: 01.10.2011 Beiträge: 350
      Erstmal zur Berechnung der Werte:

      code:
      <?php
          $n = 1000000;
          for($i = 0; $i < $n; $i++){
              $t = array();
              for($b = 0; $b <= 2; $b++){
                  $rand = mt_rand(1,6);
                  if($rand == 1)
                      $rand = mt_rand(1,6);
                  $t[] = $rand;
              }
              sort($t);
              $arr[] = $t[1]+$t[2];
          }


      Und dann die Berechnung & Ausgabe der Statistik:

      code:
      sort($arr);
          echo 'avg('.(array_sum($arr)/$n).') <br>';
          foreach($arr as $v)
              $stats[$v]++;
      
          foreach($stats as $k=>$v)
              echo $k.'=>'.(($v/$n)*100)."<br>";
      


      Kommt dann folgendes raus:
      avg(9.095855)
      2=>0.0023
      3=>0.0448
      4=>1.1075
      5=>2.8983
      6=>6.116
      7=>10.1234
      8=>15.4687
      9=>18.9496
      10=>19.3575
      11=>16.0886
      12=>9.8433



      Und hier noch zwei Durchläufe (auch 1mio*3Würfel)
      avg(9.094376)
      2=>0.0026
      3=>0.0483
      4=>1.1086
      5=>2.8867
      6=>6.1389
      7=>10.1424
      8=>15.5518
      9=>18.8725
      10=>19.2868
      11=>16.0823
      12=>9.8791

      avg(9.096156)
      2=>0.0017
      3=>0.0464
      4=>1.0862
      5=>2.8848
      6=>6.1236
      7=>10.1696
      8=>15.5301
      9=>18.9069
      10=>19.3011
      11=>16.0337
      12=>9.9159



      Zufallszahlen via mt_rand()
      Edit:
      Jetzt will ich aber wissen, wofür das gut war. :D
    • MisterJ
      MisterJ
      Bronze
      Dabei seit: 26.03.2006 Beiträge: 1.760
      Wir starten jetzt einen Wettbewerb, wer das ganze in der abstrusesten Programmiersprache implementiert.

      Oder es kommt einfach mal einer und rechnet die korrekten Werte einfach aus :D
    • iTripleA
      iTripleA
      Bronze
      Dabei seit: 01.10.2011 Beiträge: 350
      Original von MisterJ
      Wir starten jetzt einen Wettbewerb, wer das ganze in der abstrusesten Programmiersprache implementiert.
      Brainfuck :D
    • JoWa
      JoWa
      Bronze
      Dabei seit: 05.04.2007 Beiträge: 7.591
      Shakespeare Programming Language :D
    • Y0d4
      Y0d4
      Bronze
      Dabei seit: 03.05.2006 Beiträge: 12.154
      Malbolge wär vl was? :D
    • sarc
      sarc
      Moderator
      Moderator
      Dabei seit: 06.06.2008 Beiträge: 12.197
      Wie ich grad drüber nachgedacht hab, das in Perl zu schreiben... :D Aktuell gewinnt den Preis für den schönsten Algorithmus aber die Matlab-Version, alle Ergebnisse speichern und hinterher zählen ist einfach herrlich effizient. :)

      Leider hab ich auch CUDA nicht mehr installiert, wär sicherlich lustig, auf der Grafikkarte würfeln und das Ergebnis als Bild ausgeben zu lassen. Wahrscheinlichkeiten kann man sich dann ausm Histogramm ziehen... :D
    • iTripleA
      iTripleA
      Bronze
      Dabei seit: 01.10.2011 Beiträge: 350
      Original von sarc
      [...] den Preis für den schönsten Algorithmus [...]
      Ich glaube du bist hier im falschen Thread. ;)
    • CMB
      CMB
      Bronze
      Dabei seit: 17.02.2007 Beiträge: 6.448
      Soviel Hirn und keine Macht, ein Jammer.....ansonsten Respekt!

      CMB
    • Mart1
      Mart1
      Bronze
      Dabei seit: 23.12.2006 Beiträge: 4.727
      Scala Multithreaded code pls ;)