青蛙跳小游戏之python3解法

        青蛙跳小游戏是一个看似简单的智力游戏,游戏任务是让左右两边的青蛙互换位置。鼠标点击青蛙,它会跳到离它最近的一块空置的石头上。下图是游戏界面:


        我在4399上也找到了这个小游戏,链接http://www.4399.com/flash/7584.htm 。

        这个小游戏我尝试了好多次,太笨了,只能用代码搞起,就是深度搜索,找到一个解就OK。代码如下:

pos=[0 for x in range(7)]
for i in range(3):
	pos[i]=-1
for i in range(3):
	pos[6-i]=1
#print(pos)
repos=pos[::-1]
count=0

def kltry():
	global count,pos,repos

	if pos==repos:
		print('OK')
		exit()
	blank=pos.index(0)
	if blank>=1 and pos[blank-1]<0:
		pos[blank]=-1
		pos[blank-1]=0
		print(str(blank-1)+'->'+str(blank))
		kltry()
		pos[blank]=0
		pos[blank-1]=-1
		print('return')

	if blank>=2 and pos[blank-2]<0:
		pos[blank]=-1
		pos[blank-2]=0
		print(str(blank-2)+'->'+str(blank))
		kltry()
		pos[blank]=0
		pos[blank-2]=-1
		print('return')
	
	if blank<=5 and pos[blank+1]>0:
		pos[blank]=1
		pos[blank+1]=0
		print(str(blank)+'<-'+str(blank+1))
		kltry()
		pos[blank]=0
		pos[blank+1]=1
		print('return')

	if blank<=4 and pos[blank+2]>0:
		pos[blank]=1
		pos[blank+2]=0
		print(str(blank)+'<-'+str(blank+2))
		kltry()
		pos[blank]=0
		pos[blank+2]=1
		print('return')

kltry()

        输出结果如下:

kl@kl-Latitude:~/桌面$ python3 jumpfrog.py 
2->3
1->2
0->1
return
return
0->2
return
2<-4
3->4
1->3
0->1
0<-2
1->2
return
return
return
1<-2
0->2
0<-1
return
return
return
return
3<-5
4->5
4<-6
5->6
return
return
return
5<-6
4->6
4<-5
return
return
return
return
return
4<-5
3->5
1->3
0->1
0<-2
1->2
return
2<-4
3->4
1->3
1<-2
return
return
return
4<-6
5->6
3->5
1->3
1<-2
2<-4
3->4
OK

        2->3就是从把第2个位置的青蛙跳到第3个位置(从0开始数的哈),return就是上一步走的不对,要返回上一级,但是游戏是不能悔棋的,只能重新开始,所以根据这样的结果也不好手工复现,于是我又写了如下的代码,之前,先把上面的输出结果重定向到log文件中,把上面数据处理一下:

f=open('log','r')
data=[]
while True:
	line=f.readline()
	if line=='':
		break
	data.append(line[:-1])
f.close()

while 'return' in data:
	n=data.index('return')
	del data[n]
	del data[n-1]
print(data)

        这样,输出结果处理后变成:

kl@kl-Latitude:~/桌面$ python3 showfog.py 
['2->3', '2<-4', '4<-5', '3->5', '1->3', '0->1', '0<-2', '2<-4', '4<-6', '5->6', '3->5', '1->3', '1<-2', '2<-4', '3->4', 'OK']

        这样就可以手工复现了,总共需要15步让左右两边的青蛙交换位置。周围好多人都可以分分钟甚至一把就通关,我还要代码搞起果然弱爆了。。。果然木有50W年薪了呢。。。

转载请注明:转自http://blog.csdn.net/littlethunder/article/details/20525965

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值