字母字谜不适用于包含多次出现的字母的单词
Alphabatic Anagrams doesn't work with words that contains letters with multiple occurence
你好,你好吗?我有一个挑战 https://www.codewars.com/kata/53e57dada0cb0400ba000688/solutions/python,我坚持了 2 天,我创建了第一个解决方案,但它很慢(使用 itertools.permutations),然后我制作了这个代码块。
import math
def listPosition(word):
n = 0
wlsort = list(word)
wlsort.sort()
wcopy = word
while wcopy:
for i in range(wlsort.index(wcopy[0])):
n += math.factorial(len(wlsort) - 1)
wlsort.pop(wlsort.index(wcopy[0]))
wcopy = wcopy[1:]
return n + 1
但它不适用于 test
bookkeeper
这样的词,您有任何提示或解决方法的想法吗?
我认为我的问题是,当我有一个像 car
这样的词时,它会像 ->
acr
, arc
...
如果我有 caar
它会像 -> 一样暴力破解它
aacr
、aarc
并且它不会 acar
因为它是按字母顺序暴力破解的。
这是我的尝试。这很简单,如果你阅读 req.小心。如果您有任何问题,请告诉我。
from math import factorial as fact
def listPosition(word):
count = 0
while len(word):
first = word[0]
uniqs = set(word)
possibles = fact(len(word))
for ch in uniqs:
possibles /= fact(word.count(ch))
for ch in uniqs:
if ch < first:
count += possibles/len(word) * word.count(ch)
word = word[1:]
return count + 1
你好,你好吗?我有一个挑战 https://www.codewars.com/kata/53e57dada0cb0400ba000688/solutions/python,我坚持了 2 天,我创建了第一个解决方案,但它很慢(使用 itertools.permutations),然后我制作了这个代码块。
import math
def listPosition(word):
n = 0
wlsort = list(word)
wlsort.sort()
wcopy = word
while wcopy:
for i in range(wlsort.index(wcopy[0])):
n += math.factorial(len(wlsort) - 1)
wlsort.pop(wlsort.index(wcopy[0]))
wcopy = wcopy[1:]
return n + 1
但它不适用于 test
bookkeeper
这样的词,您有任何提示或解决方法的想法吗?
我认为我的问题是,当我有一个像 car
这样的词时,它会像 ->
acr
, arc
...
如果我有 caar
它会像 -> 一样暴力破解它
aacr
、aarc
并且它不会 acar
因为它是按字母顺序暴力破解的。
这是我的尝试。这很简单,如果你阅读 req.小心。如果您有任何问题,请告诉我。
from math import factorial as fact
def listPosition(word):
count = 0
while len(word):
first = word[0]
uniqs = set(word)
possibles = fact(len(word))
for ch in uniqs:
possibles /= fact(word.count(ch))
for ch in uniqs:
if ch < first:
count += possibles/len(word) * word.count(ch)
word = word[1:]
return count + 1