2016-08-02 16 views
0

Ich bin auf der Suche nach allen möglichen Möglichkeiten, 5 sechsseitige Würfel zu rollen. Ich weiß in Python können Sie dies mithilfe von Iertools tun, gibt es etwas in C#, die das gleiche erreichen kann?gibt es ein C# Äquivalent von Pythons iertools.combinations_with_replacement

itertools.combinations_with_replacement(iterable, r) 

for i in itertools.combinations_with_replacement(range(1, 6), 5) 

https://docs.python.org/dev/library/itertools.html#itertools.combinations_with_replacement

Bereich von 1, 6 ist die Anzahl der Fläche auf dem Würfel und 5 ist die Anzahl der Würfel geworfen wird. Willst du alle 7776 Wege produzieren, die du würfeln kannst? z.B. eine erste Rolle kann wie folgt aussehen:

Dice 1, Dice 2 Würfel 3, Würfel 4, Würfel 5 = 1,2,3,4,5

+0

Bitte zeigen Sie Ihre Eingabe und erwartete Ausgabe - Sie könnten auch den entsprechenden Python Sie versuchen, in C# zu reproduzieren. – Jamiec

+0

Wie in Sie brauchen alle möglichen Kombinationen oder die Anzahl der Kombinationen? –

+0

Also, wenn ich richtig verstehe (und mein Python ist nicht großartig) 'Bereich (1,6)' wird Ihnen eine Menge geben mit '[1,2,3,4,5,6]' und der zusätzliche Parameter an ' combinations_with_replacement von '5' sagt, dass Sie alle Kombinationen sof 5 Werte haben möchten - wie' 12345' und '23456' und' 13456' etc? (Wenn es richtig ist, gab es nichts wie diese Beschreibung in Ihrer Frage !!) – Jamiec

Antwort

2

Dies ist einfach - es ist im Grunde eine cross join zwischen einem Bereich von 1-6 5 mal.

var range = Enumerable.Range(1,6); 
var result = from d1 in range 
        from d2 in range 
        from d3 in range 
        from d4 in range 
        from d5 in range 
      select new { d1,d2,d3,d4,d5 }; 

anschauliches Beispiel: http://rextester.com/VKA17045

+0

Dies ist wahrscheinlich für eine andere Frage, aber das funktioniert gut für Bereich 1, 6 und 5 Würfel, aber nachdem es für einige größere Zahlen versucht das Programm scheint zu hängen. Gibt es eine Möglichkeit, diese Skala zu skalieren oder wird die Anzahl der Kombinationen zu groß? – danny

+0

@danny möglicherweise zu groß. Welche Reichweite/Kombination versuchen Sie? – Jamiec

+0

Ich versuchte Seiten 1, 12 mit 20 Würfeln. – danny

-2

Implementierung für das, was 3615 vorgeschlagen:

Random root = new Random(); 
List<int> results = new List<int>() 
for (int i = 0; i < 5; i++) 
{ 
    results.Add(root.Next(1, 6)); 
} 

//results now contain the 5 dice throws 
+0

Ich verstehe nicht, wie das die Frage beantwortet. Sie erhalten eine Zufallszahl zwischen 1-6 5 Mal und werfen das Ergebnis jeder Iteration weg. – Jamiec

+0

Ehrlich gesagt, bin ich mit dieser Antwort etwas faul geworden, und Sie haben Recht. Die Antwort ist weggeworfen. Nur gedacht, es würde die allgemeine Richtung geben, was zu tun ist. – MichaelThePotato