暴力解决游戏《崩坏:星穹铁道》中的引航罗盘解密。由于复杂度较低,所以暴力解具有可行性。

图片介绍参数设定:

import sys# 获取自然数余数
def get_nature_remain(dividends: int, divisors: int):remain = dividends % divisorswhile remain < 0:remain += divisorsreturn remain# 计算符号位,返回至3*3符号矩阵
def get_sign(method, directions: tuple):if (len(directions) != 1 and method < 3) or (len(directions) != 2 and method > 2):print('输入格式不正确')sys.exit(-2)if method == 0:  # 外圈return [(0, 0, directions[0]), ]elif method == 1:  # 中圈return [(1, 0, directions[0]), ]elif method == 2:  # 内圈return [(2, 0, directions[0]), ]elif method == 3:  # 外中return [(0, 1, directions[0]), (1, 1, directions[1])]elif method == 4:  # 外内return [(0, 2, directions[0]), (2, 1, directions[1])]else:  # 中内return [(1, 2, directions[0]), (2, 2, directions[1])]# 打印结果
def result_print(index, rotate):if index == 0:print('最外圈转', rotate)elif index == 1:print('中间圈转', rotate)elif index == 2:print('最内圈转', rotate)elif index == 3:print('外中联动圈转', rotate)elif index == 4:print('外内联动圈转', rotate)else:print('中内联动圈转', rotate)# 解法为暴力解
def star_rail_LuoPan(points: tuple, rotates: tuple, methods: tuple):# 判断输入是否正确if min(points) < 0 or min(rotates) < 0 or min(methods[0]) < 0 or max(points) > 5 or max(rotates) > 6 or max(methods[0]) > 6 or len(points) != 3 or len(rotates) != 3 or len(methods[0]) != 3 or len(set(methods[0])) != 3:print('输入格式不正确')sys.exit(-1)# 常量参数初始化p1, p2, p3 = pointsr1, r2, r3 = rotates# 变量参数矩阵f = [0 for _ in range(6)]x = methods[0][0] - 1y = methods[0][1] - 1z = methods[0][2] - 1# 公式正负号,顺逆转sign = [[1, 1, 1],[1, 1, 1],[1, 1, 1]]for i in range(3):for row, col, t_sign in get_sign(method=methods[0][i] - 1, directions=methods[1][i]):sign[row][col] *= t_signflag = False  # 是否存在解,默认不存在解# 6为一轮,超过6相当于从0开始(数论)for i in range(6):f[x] = ifor j in range(6):f[y] = jfor k in range(6):f[z] = k# 计算公式a1 = get_nature_remain(dividends=p1 + (sign[0][0]*f[0] + sign[0][1]*f[3] + sign[0][2]*f[4]) * r1, divisors=6)a2 = get_nature_remain(dividends=p2 + (sign[1][0]*f[1] + sign[1][1]*f[3] + sign[1][2]*f[5]) * r2, divisors=6)a3 = get_nature_remain(dividends=p3 + (sign[2][0]*f[2] + sign[2][1]*f[4] + sign[2][2]*f[5]) * r3, divisors=6)# 当前参数是否满足正确解if a1 + a2 + a3 == 0:print('*' * 60)result_print(x, i)result_print(y, j)result_print(z, k)flag = True  # 存在解return flagif __name__ == '__main__':# 程序设计有很多参数设定,都是程序猿,相信你能看懂[\doge]# 注意,假设取最终汇聚方向处为0°点。下面为一个例子:p = (4, 4, 2)  # 设置三个圈点的初始值 < 6,例子的解释为最外圈起始点240°(4*60°,以下同理),中圈240°,内圈120°r = (4, 4, 4)  # 设置一次转动的角度 <= 6,例子的解释为最外圈一次转240°,中圈240°,内圈240°# m[0],1为外圈单转,2为中圈单转,3为内圈单转,4为外中圈联动同转,5为外内圈联动同转,6为中外圈联动同转# m[1],转动方向顺逆,单转要求tuple大小为1,联动转要求tuple大小为2,与m[0]一一对应,1为顺时针,-1为逆时针m = ((2, 3, 5), ((1,), (-1,), (-1, -1)),)if not star_rail_LuoPan(points=p, rotates=r, methods=m):print('不存在正确解')

[Python随笔]暴力解解决“崩铁”的引航罗盘解密相关推荐

  1. python随笔01(robotframework自动化)

    一.dos窗口输入pip提示did not provide a command 解决网址:https://blog.csdn.net/songlh1234/article/details/828823 ...

  2. Python攻防-暴力破解ZIP加密文件的密码

    文章目录 前言 Python语法 自定义迭代器 Python多线程 Python脚本 单线程数字爆破 单线程字符爆破 多线程字典爆破 总结 前言 本文继续记录学习下 Python 的有趣应用:借助 P ...

  3. 【python】详解类class的继承、__init__初始化、super方法

    原文链接; https://blog.csdn.net/brucewong0516/article/details/79121179?utm_medium=distribute.pc_relevant ...

  4. linux系统如何创建python文件_Linux搭建python环境详解

    一.下载文件 版本:setuptools-0.6c11 版本:pip-1.5.6.tar.gz 版本:pymongo-2.7.2.tar.gz 版本:xlrd-0.9.3.tar.gz 版本:xlwt ...

  5. 有趣的Python Challenge编程解谜游戏攻略二(5-9关)

    **有趣的Python Challenge编程解谜游戏攻略二(5-9关)** 介绍 游戏介绍 0-4关攻略 写在前面 关卡 第5关 第6关 第7关 第8关 第9关 链接总结 第10关预告 介绍 游戏介 ...

  6. python多线程详解 Python 垃圾回收机制

    文章目录 python多线程详解 一.线程介绍 什么是线程 为什么要使用多线程 总结起来,使用多线程编程具有如下几个优点: 二.线程实现 自定义线程 守护线程 主线程等待子线程结束 多线程共享全局变量 ...

  7. Python线程详解

    Python线程详解 线程简介 开启多线程 线程之间共享 GIL全局解释器锁 线程间通信 线程简介 线程,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元. ...

  8. 07 Python数据类型详解

    文章目录 一.整数类型(int)详解 1.1 整数的不同进制 1) 十进制形式 2) 二进制形式 3) 八进制形式 4) 十六进制形式 1.2 数字分隔符 1.3 相关方法 二.字符串类型(strin ...

  9. Python:暴力破解密码 - 压缩包、web实战

    简介:常规情况下,由于web自身的服务资源,带宽,吞吐率的原因,存在访问上线的情况,这和极端情况下本地直接即时访问,即时反馈的机制是完全不可等同的.另外暴力破解密码这种行为本身就是一个徘徊为灰色地带的 ...

最新文章

  1. 【Kotlin】Kotlin 中使用 ButterKnife ( 仅用于适配 Kotlin 语言 | 不推荐新项目使用 )
  2. 浅谈Hive和HBase区别
  3. 自己的模块给其他人调用是怎么打包的_webpack实战——模块打包
  4. “象征界”的奇观:刘天怜花鸟工笔作品印象
  5. markdown绘图插件----mermaid简介
  6. 数组中的forEach和map的区别
  7. js计算器代码加减乘除_理不清亲戚关系,程序员直接写了一个亲戚关系计算器,来试试?...
  8. 字符串在Java中_字符和字符串在Java中的旅程
  9. java task和thread_【Java学习笔记-并发编程】线程与任务
  10. ant批量处理word文件内容_word多个文件批量替换内容
  11. 唐宇迪学习笔记2:Python数据分析处理库——pandas
  12. 【树形DP】保镖排队
  13. Java 浅拷贝和深拷贝的理解和实现方式
  14. Linux 系统 网卡RTL8723BE 信号差不稳定的解决办法
  15. 【工具-DVWA】DVWA的安装和使用
  16. DS1042C数字示波器的波形截图流程
  17. transition和transition的区别
  18. C语言线程lock与unlock,锁求解关于lockunlock之后-第二个线程无法获得锁的问题
  19. 线上问题---程序假死
  20. 周鸿伟给创业者的建议

热门文章

  1. 流媒体播放器播放h264编码视频与h265编码视频哪个更清晰?
  2. 用echarts实现水滴图效果
  3. 乐视:基于 Docker 的 RDS,我们是这样做的
  4. R语言水文序列突变点检验之滑动平均差法
  5. 用python播放声音文件(mp3、wav、m4a等)
  6. Apollo学习笔记(19)UKF
  7. win10看不到家庭组计算机,win10专业版没有家庭组怎么办?一招帮你解决问题
  8. Javaweb基础-servlet应用1
  9. 【洛谷】P1425 小鱼的游泳时间
  10. LeetCode题解(1383):最大的团队表现值(Python)