-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathlistposition.py
More file actions
31 lines (25 loc) · 847 Bytes
/
listposition.py
File metadata and controls
31 lines (25 loc) · 847 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import numpy as np
from math import factorial
from decimal import Decimal
from collections import Counter
def listPosition(word):
sorted_word = sorted(word)
rank = 1
for letter in word:
if letter == sorted_word[0]:
sorted_word.pop(0)
continue
else:
pos = sorted_word.index(letter)
rank += (pos * Decimal(factorial(len(sorted_word) - 1))) / np.prod(
[factorial(i) for i in Counter(sorted_word).values()])
sorted_word.pop(pos)
return int(rank)
if __name__ == '__main__':
print(listPosition('A'))
print(listPosition('ABAB'))
print(listPosition('AAAB'))
print(listPosition('BAAA'))
print(listPosition('QUESTION'))
print(listPosition('BOOKKEEPER'))
print(listPosition('IMMUNOELECTROPHORETICALLY'))