Mischen nach Zufall

Hallo Reinhard,

bisher nicht, ich kam erst mal nur auf folgenden nicht so
hübschen Code, der liefert für 6 aus 49
13.963.816 Gesamtkombinationen

korrekt.

3.246.243 Kombination mit mindest einmal den Fall daß zwei
Zahlen aufeinanderfallen

Nicht korrekt. Du hast c+1, d+1, e+1 weg gelassen.

Daß das so auch geht, ist mir erst gestern aufgefallen. :smile:

Wenn Du die Prüfung ausgeweitet hast, gib das Ergebnis mal in % aus. :smile:

Das sagt so viel über den Zufall aus und die Abweichung unserer Sicht, was wir noch für zufällig halten, und was nicht … Ich denke, Jeder würde sich da verschätzen. :smile:

Gruß Rainer

Mein erster, zu komplizierter Code:

Option Explicit
Dim Tipp(5) As Byte
Dim n As Long, c As Long, tm As Double

Private Sub Command1\_Click()
 Dim i As Integer
 tm = Timer
 For i = 0 To 5
 Tipp(i) = i + 1
 Next
 While Tipp(0) 

OT 6 aus 49 Kombinationen
Hallo Rainer,

3.246.243 Kombination mit mindest einmal den Fall daß zwei
Zahlen aufeinanderfallen

Nicht korrekt. Du hast c+1, d+1, e+1 weg gelassen.

Upssala, Freudscher Fehler, ich wollte den Code schnell machen :smile:

Wenn Du die Prüfung ausgeweitet hast, gib das Ergebnis mal in
% aus. :smile:

Mach ich noch.

Das sagt so viel über den Zufall aus und die Abweichung
unserer Sicht, was wir noch für zufällig halten, und was nicht
… Ich denke, Jeder würde sich da verschätzen. :smile:

Apropos verschätzen, Excelformeln sind (sollen sein) bis zu 10.000mal schneller als Vba, demzufolge auch als Vb *mutmaß*, gerade dann wenn man in Schleifen Zellen abklappert.

In http://excelformeln.de/formeln.html?welcher=346 ist da ein Beispiel für 3 aus 6 bzw. 4 aus 6.

Meine Idee war nun dies für 6 aus 49 zu erweitern. d.h. per Vba die Formeln in Zeile 2 einzutragen, dann mit Filldown nach unten zu kopieren, alles sehr schnelle Befehle und dann wie in dem anderen Beispiel unten mit Zählenwenn auszuwerten.

dann wurde ich aber darauf gestoßen daß das gewaltig viele zellen gibt und ich dann knapp 6 Blätter voller Formeln bräuchte. Bei einer Formellänge von geschätzten 20 Bytes gibt das pro Blatt schonmal 336 MB.
Ich glaub das verschiebe ich bis ich Excel2007 habe, das hat 1 Mio Zeilen und ist vielleicht fixer im Berechnen des Blattes :smile:

Die andere Idee kam mir vorhin und ich habe sie mal für 2 aus 9 durchgespielt. Und ich sehe da deutlich in Spalte K eine Regelmäßigkeit, die man nur im VB-Code nachbilden müßte und so ist meine Arbeitsthese, dies müte/könnte dann schneller sein als in Schleifen alles durchzugehen.

Das Dumme an den Kombinationen ist, daß es so viele werden bei z.B. 6 aus 49. Das fängt schon an daß man auf Strings ausweichen muß um sowas darzustellen:

010203040506
010203040507
010203040508
010203040509

und Strings machen den Code leider langsam:frowning:

Tabellenblatt: [Mappe2]!Tabelle1
 │ J │ K │ L │ M │
───┼────┼────┼────────┼───┤
 1 │ 12 │ │ WAHR │ 8 │
───┼────┼────┼────────┼───┤
 2 │ 13 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
 3 │ 14 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
 4 │ 15 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
 5 │ 16 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
 6 │ 17 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
 7 │ 18 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
 8 │ 19 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
 9 │ 23 │ 4 │ WAHR │ │
───┼────┼────┼────────┼───┤
10 │ 24 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
11 │ 25 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
12 │ 26 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
13 │ 27 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
14 │ 28 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
15 │ 29 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
16 │ 34 │ 5 │ WAHR │ │
───┼────┼────┼────────┼───┤
17 │ 35 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
18 │ 36 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
19 │ 37 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
20 │ 38 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
21 │ 39 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
22 │ 45 │ 6 │ WAHR │ │
───┼────┼────┼────────┼───┤
23 │ 46 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
24 │ 47 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
25 │ 48 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
26 │ 49 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
27 │ 56 │ 7 │ WAHR │ │
───┼────┼────┼────────┼───┤
28 │ 57 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
29 │ 58 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
30 │ 59 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
31 │ 67 │ 8 │ WAHR │ │
───┼────┼────┼────────┼───┤
32 │ 68 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
33 │ 69 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
34 │ 78 │ 9 │ WAHR │ │
───┼────┼────┼────────┼───┤
35 │ 79 │ 1 │ FALSCH │ │
───┼────┼────┼────────┼───┤
36 │ 89 │ 10 │ WAHR │ │
───┴────┴────┴────────┴───┘
Benutzte Formeln:
K2 : =J2-J1
nach unten kopieren bis
K36: =J36-J35
L1 : =WENN(WERT(TEIL(J1;1;1)+1)=WERT(TEIL(J1;2;1));WAHR;FALSCH)
nach unten kopieren bis
L36: =WENN(WERT(TEIL(J36;1;1)+1)=WERT(TEIL(J36;2;1));WAHR;FALSCH)
M1 : =ZÄHLENWENN(L1:L36;WAHR)

J1:M36
haben das Zahlenformat: Standard

Tabellendarstellung erreicht mit dem Code in FAQ:2363

Während ich dies hier schrieb hab ich mir doch mal gedacht teste ich doch mal was schneller ist, zumindest bei 2 aus 9 ist die Schleifenvariante mehrfach schneller als die Werte zu berechnen.

Option Explicit
'
Sub nn1()
Dim a, b, n
For a = 1 To 8
 For b = a + 1 To 9
 If a + 1 = b Then n = n + 1
 Next b
Next a
'MsgBox n
End Sub
'
Sub nn2()
Dim a, b, n, s, s2, z
s = 11
s2 = 4
For a = 8 To 1 Step -1
 For b = 1 To a + (s \> 19) \* 1
 s = s + 1
 If CInt(Left(s, 1)) + 1 = CInt(Right(s, 1)) Then n = n + 1
 'z = z + 1
 'Cells(z, 9) = s
 Next b
 s = s + s2
 If CInt(Left(s, 1)) + 1 = CInt(Right(s, 1)) Then n = n + 1
 'z = z + 1
 'Cells(z, 9) = s
 s2 = s2 + 1
Next a
'MsgBox n
End Sub
'
Sub test()
Dim n
Static T As Double
T = Timer
For n = 1 To 10000
 Call nn1
Next n
MsgBox Timer - T
T = Timer
For n = 1 To 10000
 Call nn2
Next n
MsgBox Timer - T
End Sub

Gruß
Reinhard