Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Würfelspiel nochmal

Forumthread: Würfelspiel nochmal

Würfelspiel nochmal
Würfler
https://www.herber.de/forum/messages/1172814.html
Hallo Excdelianer(in)
Die Lösungen sind Klasse! Aber wie sieht die Lösung aus, wenn ich nicht jeden Würfel einzel betrachte, sondern den gesamten Wurf?
Beispiel: 1,1,1,1,1,6 ist gleich mit 1,1,6,1,1,1 oder 6,1,1,1,1,1 usw.
Gruß eifrige Würfler
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Würfelspiel nochmal
20.08.2010 13:34:46
JogyB
Hallo Würfler,
das kann man einfach darauf reduzieren, dass die Augenzahl monoton (nicht "streng monoton") ansteigend sein muss.
Ich habe mir jetzt mal willkürlich EvilRiks Code genommen und angepasst:
Sub WuerfelmalmitRosenthal2()
Dim AnzahlWürfel As Integer, Augen As Long, zae1 As Long, Kombi As Long
Dim WürfelArray() As Variant
Dim i As Long
Dim wurfOK As Boolean
AnzahlWürfel = Application.InputBox("Würfelanzahl eingeben.", "Nicht Kombination :)", , , ,  _
, 1)
If AnzahlWürfel = False Or AnzahlWürfel > 6 Then Exit Sub
Kombi = 6 ^ AnzahlWürfel
ReDim WürfelArray(1 To Kombi, 1 To 1)
For Augen = String(AnzahlWürfel, "1") To String(AnzahlWürfel, "6")
If Not Augen Like "*[7-9,0]*" Then
wurfOK = True
For i = AnzahlWürfel - 1 To 1 Step -1
If (Augen \ 10 ^ i) Mod 10 > (Augen \ 10 ^ (i - 1)) Mod 10 Then
wurfOK = False
End If
Next
If wurfOK Then
zae1 = zae1 + 1
WürfelArray(zae1, 1) = Augen
End If
End If
Next Augen
Range(Cells(1, 2), Cells(Kombi, 2)) = WürfelArray
End Sub

Gruß, Jogy
Anzeige
AW: Würfelspiel nochmal
20.08.2010 13:40:43
Rudi
Hallo,
primitiv aber wirksam: Wurf zerlegen, Augen sortieren und dann dem Dictionary zuweisen:
Sub test()
Dim l As Long, n As Integer, objDict As Object, arrTmp(), i As Integer, x
Set objDict = CreateObject("scripting.Dictionary")
n = Application.InputBox("Wieviele Würfel ?", , , , , , , 1)
If n = False Or n > 6 Then Exit Sub
ReDim arrTmp(n - 1)
Set objDict = CreateObject("scripting.Dictionary")
For l = String(n, "1") To String(n, "6")
If Not l Like "*[7-9,0]*" Then
For i = 1 To n
arrTmp(i - 1) = Mid(l, i, 1)
Next
prcSort arrTmp
x = Join(arrTmp, "")
objDict(x) = 0
End If
Next
Range("A1").Resize(objDict.Count) = WorksheetFunction.Transpose(objDict.keys)
End Sub

Sub prcSort(arr)
Dim sTmp, i, j
For i = LBound(arr) To UBound(arr) - 1
For j = i + 1 To UBound(arr)
If arr(i) > arr(j) Then
sTmp = arr(i)
arr(i) = arr(j)
arr(j) = sTmp
End If
Next
Next
End Sub

Gruß
Rudi
Anzeige
AW: Würfelspiel nochmal
20.08.2010 13:50:19
Würfler
Hallo Jogy, hallo Rudi
DANKE und Hut ab!
Würfler
Kombinationen mit/ohne Permutationen auflisten
20.08.2010 13:59:55
NoNet
Hallo Würfler,
hier ein Codebeispiel zum Auflisten aller Würfel-/Ziehungskombinationen mit variabler Würfelanzahl (intAnzZ), variabler Angabe der Werte pro Wurf (intAnzW) - bei "normalen" Würfeln ist das die 6 (da 6-seitiger Würfel) und optionaler Permutation (bolPermutationen) - also Angabe, ob 1-2-3 und 1-3-2 und 3-2-1 gleiche oder unterschiedliche Kombinationen sind und daher ebenfalls aufgelistet werden sollen oder nicht. Im Beispiel werden 4 Würfel á 6 Seiten OHNE Permutationen aufgelistet (also jede Kombination nur einmalig) :
Option Explicit
Option Base 0 'Indizierung soll bei 0 beginnen - Standard, Angabe daher nicht unbedingt  _
notwendig
'Listet alle möglichen Kombinationen von unabhängigen Ziehungen/Würfen in einem Tabellenblatt  _
auf
'Wahlweise MIT oder OHNE allen Permutationen (also 1-2-3 UND 1-3-2 UND 3-2-1) einer Kombination
'Lösungsweg per rekursiven Aufruf der Prozedur mit inkrementiertem Index (intWert)
'20.08.2010, NoNet - www.excelei.de
Public lngZ As Long
Const intAnzZ = 4 'Anzahl der parallelen Ziehungen/Würfe
Const intAnzW = 6 'Anzahl mögliche Werte pro Ziehung/Wurf
Const bolPermutationen = False 'FALSE = OHNE, TRUE = MIT Permutationen
Sub KombinationenStarten()
Dim intZiehung()
ReDim intZiehung(intAnzZ - 1)
lngZ = 0
Range("A1").Resize(intAnzW ^ intAnzZ, intAnzZ).ClearContents
WerteZiehen intZiehung, 0
End Sub
Sub WerteZiehen(intZiehung, intWert As Integer)
Dim intT As Integer
For intT = 1 To intAnzW
intZiehung(intWert) = intT
If intWert = intZiehung(IIf(intWert > 0, intWert -  _
1, 0)) Then
Call WerteZiehen(intZiehung, intWert + 1)
End If
Else
If bolPermutationen Or intZiehung(intWert) >= intZiehung(IIf(intWert > 0, intWert -  _
1, 0)) Then
lngZ = lngZ + 1
Cells(lngZ, 1).Resize(, intAnzZ) = intZiehung
End If
End If
Next
End Sub
Gruß, NoNet
Anzeige
AW: Kombinationen mit/ohne Permutationen auflisten
20.08.2010 14:31:53
Würfler
Hallo NoNet,
da staunt der Laie und der Fachmann wundert sich! Schade, daß ich keinen Hut mehr auf habe, schon gezogen vor Jogy und Rudi.
Bei Deiner Lösung hauts einem aber noch die Socken weg!
Sonniges Wochenende
Würfler
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige