I am working on a dice probability program and have been running into some efficiency issues in the permutation section when the numbers get big. For example, the perimeters I am required to run are 10 dice, with 10 sides, with an outcome of 50. 

I require a total number of permutations to calculate the probability of the specified outcome given the number of dice and number of sides. The `final_count(total, dice, faces)` function lets the least number of combinations pass from the generator before moving into the `perms(x)` function.

The following code works, but for the previously mentioned perimeters it takes an extremely long time. 

The `perms(x)` was posted by @Ashish Datta from this thread:
[permutations with unique values](https://stackoverflow.com/questions/6284396/permutations-with-unique-values)
Which is where I believe I need help.

```
import itertools as it

total = 50
dice = 10
faces = 10

#-------------functions---------------------

# Checks for lists of ALL the same items
def same(lst):
   return lst[1:] == lst[:-1]

# Generates the number of original permutations (10 digits takes 1.65s)
def perms(x):
    uniq_set = set()
    for out in it.permutations(x, len(x)):
        if out not in uniq_set:
            uniq_set.update([out])
    return len(uniq_set)

# Finds total original dice rolls.  "combinations" = (10d, 10f, 50t, takes 0.42s)
def final_count(total, dice, faces):
    combinations = (it.combinations_with_replacement(range(1, faces+1), dice))
    count = 0
    for i in combinations:
        if sum(i) == total and same(i) == True:
            count += 1
        elif sum(i) == total and same(i) != True:
            count += perms(i)
        else:
            pass
    return count

# --------------functions-------------------

answer = final_count(total, dice, faces) / float(faces**dice)

print(round(answer,4))

```

I have read the thread [How to improve permutation algorithm efficiency with python](https://stackoverflow.com/questions/21885641/how-to-improve-permutation-algorithm-efficiency-with-python). I believe my question is different, though a smarter algorithm is my end goal.

I originally posted my first draft of this program in CodeReview. <https://codereview.stackexchange.com/questions/212930/calculate-probability-of-dice-total>. I realize I am walking a fine line between a question and a code review, but I think in this case, I am more on the question side of things :)