嗨,我有下面的python代码。你知道吗
Note... yes, I am asking you to solve my algorithm.. I have become burnt out working on it. If you fancy a challenge give it a go.
dataListEdited = [0,1,1,1,0,0,1,0,1,0,1,1,0] #This is just random 1's and 0's
patternsNotAllowed = [[1,1,1],[0,0,0],[1,0,1,0,1],[0,1,0,1,0],[1,1,0,0,1,1],[0,0,1,1,0,0]]
#Condition data
def conditionData(dataListEdited,patternsNotAllowed):
offset=0
for x in range(len(dataListEdited)):
print(dataListEdited[:x+1])
for notAllowed in patternsNotAllowed:
if(len(dataListEdited[:x+1])> len(notAllowed)-1):
if((dataListEdited[(x+1)-len(notAllowed):x+1]) == notAllowed):
print("Matched"+str(notAllowed))
lenToFlip = len(dataListEdited) - x +1
print(dataListEdited)
print("Swap @" + str(lenToFlip-1))
for y in range(lenToFlip-1):
if(not(dataListEdited[-y-1]) == True):
dataListEdited[-y-1] = 1
else:
dataListEdited[-y-1] = 0
print(dataListEdited)
offset = x
break
return dataListEdited
如果您愿意,请进行分析,但它基本上会查看列表datalisted,并确保它不包含patternsontallowed中的任何列表。你知道吗
它通过检查patternsNotAllowed中是否有与序列datalisted的一部分匹配的case来实现,如果找到匹配,它将翻转导致datalisted中匹配的最后一位,并且该位右侧的所有位也将翻转。你知道吗
我的问题是:
Is the process above reversible?
上个星期我一直在想办法解决这个问题,但是我不能。。。下面是一些我尝试过的代码。(做同样的事情会倒退,但显然不起作用)。此外,我知道你可以存储的位置翻转发生了逆转,但我想避免这样做。(但我开始觉得这是不可能的)。你知道吗
def unconditionData(dataListEdited,patternsNotAllowed):
for x in range(len(dataListEdited)):
if(not(dataListEdited[-1-x]) == True):
dataListEdited[-1-x] = 1
else:
dataListEdited[-1-x] = 0
#print(dataListEdited)
for notAllowed in patternsNotAllowed:
#print(dataListEdited[len(dataListEdited)- x - len(notAllowed):len(dataListEdited)-x])
if(dataListEdited[len(dataListEdited)- x - len(notAllowed):len(dataListEdited)-x] == notAllowed):
print("Matched " + str(notAllowed))
lastFlipPoint = len(dataListEdited)- x
break
return dataListEdited
任何帮助都将不胜感激
谢谢你
伍迪
不,这是不可逆的。你知道吗
如果
patternsNotAllowed = [[0]]
,您将从输入列表[0, 1]
和[1, 1]
得到相同的结果[1, 1]
。你知道吗由于有多个输入具有相同的输出,因此无法判断哪个输入产生了输出,因此无法将其反转为实际输入。你知道吗
再加上Barmar的答案,使用您自己的
patternsNotAllowed
列表也是不可逆的。有2^13=8192个长度为13的不同列表,只包含0和1,我们可以使用itertools.product来尝试它们:(为了测试这一点,我删除了所有print语句。)通过将它们放入一个集合中并找出长度,我们可以看到只有178个不同的输出,因此每个输出平均有8192/178≈46个不同的预图像。你知道吗
相关问题 更多 >
编程相关推荐