「已注销」 2022-04-02 11:20 采纳率: 100%
浏览 54
已结题

网上看到了一个有趣的python问题,奈何自己才疏学浅做不出来

img


如图,小茗同学要能够正确的把宝石放在和石头符合的正确位置才能够打开密室的钥匙。
宝石一开始在石头的左上角的位置,宝石可以被顺时针旋转,也可以上下移动。
要求写一个function可以将宝石移动的过程记录下来,最后return出宝石横向和纵向移动的步长,和宝石旋转的角度。石头中如果没有和宝石相匹配的数字,则返回None。
我看到这个小游戏尝试做了一个小时都没有做的出来😭,是我太菜了啊。

  • 写回答

2条回答 默认 最新

  • bekote 2022-04-02 14:24
    关注
     #!/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))
     
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月12日
  • 已采纳回答 4月4日
  • 创建了问题 4月2日

悬赏问题

  • ¥15 怎样才能让鼠标沿着线条的中心线轨迹移动
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?
  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?