2016-08-02 2 views
0

Я ищу, чтобы найти все возможные способы прокатки 5 шестигранных кубиков. Я знаю, что в python вы можете сделать это с помощью itertools, есть ли что-то в C#, которое может достичь того же?есть C# эквивалент pythons itertools.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

Диапазон 1, 6 количество лица на кости и, 5 число кубиков прокатываемого. Хотите, чтобы все 7776 способов бросить кубики. например первоначальный рулон может выглядеть следующим образом:

Dice 1, 2 плашек, плашки 3, 4 плашек, плашки 5 = 1,2,3,4,5 реализации

+0

Пожалуйста, покажите свой вход и ожидаемый результат - вы могли бы также включать соответствующую питона, который вы пытаетесь воспроизвести в C#. – Jamiec

+0

Как вам нужны все возможные комбинации, или количество комбинаций? –

+0

поэтому, если я правильно понял (и мой python невелик) 'range (1,6)' даст вам набор, содержащий '[1,2,3,4,5,6]' и дополнительный параметр, переданный ' contains_with_replacement' из '5' говорит, что вам нужны все комбинации sof 5 значений - например,' 12345' и '23456' и' 13456' и т. д.? (Если я прав, в вашем вопросе не было ничего подобного)) – Jamiec

ответ

2

Это легко - его в основном cross join между диапазоном 1-6 5 раз.

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 }; 

Живой пример: http://rextester.com/VKA17045

+0

это, вероятно, по другому вопросу, но это хорошо работает для 1, 6 и 5 кубиков, но, попробовав его для некоторых лагерных номеров, программа, похоже, висит. есть ли способ сделать этот масштаб или количество комбинаций просто слишком велико? – danny

+0

@ danny возможно слишком большой. Какой диапазон/комбинацию вы пытаетесь? – Jamiec

+0

Я пробовал стороны 1, 12 с 20 игральными костями. – danny

-2

за то, что 3615 предложенными:

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

Я не понимаю, как это отвечает на вопрос. Вы получаете случайное число от 1 до 6 раз и отбрасываете результат на каждую итерацию. – Jamiec

+0

Честно говоря, я получил немного ленивый с этим ответом, и вы правы. ответ отбрасывается. Просто подумал, что это даст общее направление, что делать. – MichaelThePotato

Смежные вопросы