如图,小茗同学要能够正确的把宝石放在和石头符合的正确位置才能够打开密室的钥匙。
宝石一开始在石头的左上角的位置,宝石可以被顺时针旋转,也可以上下移动。
要求写一个function可以将宝石移动的过程记录下来,最后return出宝石横向和纵向移动的步长,和宝石旋转的角度。石头中如果没有和宝石相匹配的数字,则返回None。
我看到这个小游戏尝试做了一个小时都没有做的出来😭,是我太菜了啊。
#!/usr/bin/python
# -*- coding: utf-8 -*-
stone = [[5,9,6,7],[9,8,4,3],[6,4,2,1]]
gem = [[1,2],[3,4]]
def stone_str(stone, r, l, rlen):
return ''.join([str(i) for i in stone[r][l:l+rlen]])
def rotate0(gem, r):
res = ''
for i in gem[r]:
res += str(i)
return res
def rotate90(gem, r):
res = ''
for a in gem:
res = str(a[r]) + res
return res
def rotate180(gem, r):
res = ''
for i in gem[len(gem) - r - 1]:
res = str(i) + res
return res
def rotate270(gem, r):
res = ''
for a in gem:
res += str(a[len(a) - r - 1])
return res
def find_gem(v, glen, slen, func):
h = stone_str(stone, v, 0, slen).find(func(gem, 0))
if h != -1:
f = True
for j in range(1, glen):
if stone_str(stone, v + j, h, h + glen) != func(gem, j):
f = False
break
if f :
return h, v
return None
def open_door(stone, gem):
glen = len(gem[0])
slen = len(stone[0])
func_map = {rotate0: 0,rotate90: 90,rotate180: 180,rotate270: 270}
for v in range(len(stone) - len(gem) + 1):
for func in func_map.keys():
res = find_gem(v, glen, slen, func)
if res is not None:
return res[0], res[1], func_map[func]
return None
print(open_door(stone, gem))