Energy Cycle

Energy Cycle

Not enough ratings
使用Python简易代码辅助解决Time Attack
By wallfish
想要动笔计算却发现无从下手?前一关总结出的规律在下一关完全用不上?打时限关卡在29过不去?
让你成熟的电脑帮你想个答案!

使用Python简易代码辅助解决Time Attack

使用Python简易代码辅助解决实现关卡,其实就是用穷举,有方案就break没方案就bad。你可能会问就一个穷举也还跳出来写指南?但事实就是这样,小编也很难过。

————以下内容没什么用————
因为是穷举,一股脑地把原题直接输进去肯定是不行的。还需要先拆分一下:
拆1: 一种串点 适用于被单个/条连接的两个大块
aaa 0 ddd
bbb 1 eee
ccc 0 fff
这种就可以拆成
aaa 0
bbb 1
ccc 0

0 ddd
1 eee
0 fff
拆2: 一种拐点
一个2*2的孤立棋格只会有一种解,而且根据经验一般是四个亮白色White
0 2 2
1 2 2 这种情况下反复点击四个2就能更改1位置的颜色
因此,对于这种情况:
2 2 0 0
2 2 1 0
0 0 aaa
bbbbb
只需要让电脑算
0 0 aaa
bbbbb
并把target_num调为2就行了
拆3: 乱拆 毕竟你怎么拆对电脑来说也不会更乱了
————————————


调节初始值:在gmap里设置初始棋盘,target_num里输入目标颜色,运行程序
若出现有解,输入sls查看策略
例如
gmap=[
[0,0,3,2,0],
[0,2,2,0,0],
[2,2,2,2,0]]
target_num=2
输出的sls为['120221'],即第一行从左至右依次点击1、2次,至下一行以及再下一行继续执行之后的0、2、2、1.

以下是使用的Python代码:
感谢我的室友提供的代码支持

import copy

# gmap是棋盘初始输入 这里用了5*5的 当然你爱整几行几列都行
# 游戏棋盘 0 表示该处没有棋子 1 2 3 分别代表三种颜色的棋子
# 1是深蓝Blue 2是亮白White 3是绿色Green
# 推荐棋子数目小于13 因为是枚举 愿意多等几分钟13,14个棋子也可
# -------------------
gmap=[
[0,0,0,2,0],
[0,2,1,0,0],
[2,2,0,0,0],
[0,2,3,0,0],
[0,0,0,0,0]
]
# 目标颜色Color Set
target_num=2
# ----------------------

# 初始化
l_x=len(gmap)
l_y=len(gmap[0])
pieces=[]
for i in range(l_x):
for j in range(l_y):
if gmap[j]!= 0:
pieces.append((i,j))

# 操作函数
def click(gm,x,y,n):
j = y
for i in range(x,l_x):
if gm[j]!= 0:
gm[j]=(gm[j]-1+n)%3+1
else:
break
for i in range(x,-1,-1):
if gm[j]!= 0:
gm[j]=(gm[j]-1+n)%3+1
else:
break
i = x
for j in range(y,l_y):
if gm[j]!= 0:
gm[j]=(gm[j]-1+n)%3+1
else:
break
for j in range(y,-1,-1):
if gm[j]!= 0:
gm[j]=(gm[j]-1+n)%3+1
else:
break

def solve(gmap,sl,target_num):
gm=copy.deepcopy(gmap)
for i in range(len(sl)):
click(gm,pieces[0],pieces[1],int(sl))
for i in range(len(gm)):
for j in range(len(gm[0])):
if gm[j]!=0 and gm[j]!=target_num:
return False
return True

# 主函数Main
sls=[]
sum_=3**len(pieces)
for i in range(sum_):
sl=''
while i!=0:
sl+=str(i%3)
i=i//3
if solve(gmap,sl,target_num):
sls.append(sl)
break
if sls:
print("有解") #Bingo,敲个sls就能看到策略了
else:
print("无解") #No answer,意思是仅靠你给的初始输入是没有能达到你要的结果的策略的.这时候就需要你换一个目的颜色或者重新划定输入了
   
Award
Favorite
Favorited
Unfavorite