[Python随笔]暴力解解决“崩铁”的引航罗盘解密
暴力解决游戏《崩坏:星穹铁道》中的引航罗盘解密。由于复杂度较低,所以暴力解具有可行性。
图片介绍参数设定:
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随笔]暴力解解决“崩铁”的引航罗盘解密相关推荐
- python随笔01(robotframework自动化)
一.dos窗口输入pip提示did not provide a command 解决网址:https://blog.csdn.net/songlh1234/article/details/828823 ...
- Python攻防-暴力破解ZIP加密文件的密码
文章目录 前言 Python语法 自定义迭代器 Python多线程 Python脚本 单线程数字爆破 单线程字符爆破 多线程字典爆破 总结 前言 本文继续记录学习下 Python 的有趣应用:借助 P ...
- 【python】详解类class的继承、__init__初始化、super方法
原文链接; https://blog.csdn.net/brucewong0516/article/details/79121179?utm_medium=distribute.pc_relevant ...
- 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 ...
- 有趣的Python Challenge编程解谜游戏攻略二(5-9关)
**有趣的Python Challenge编程解谜游戏攻略二(5-9关)** 介绍 游戏介绍 0-4关攻略 写在前面 关卡 第5关 第6关 第7关 第8关 第9关 链接总结 第10关预告 介绍 游戏介 ...
- python多线程详解 Python 垃圾回收机制
文章目录 python多线程详解 一.线程介绍 什么是线程 为什么要使用多线程 总结起来,使用多线程编程具有如下几个优点: 二.线程实现 自定义线程 守护线程 主线程等待子线程结束 多线程共享全局变量 ...
- Python线程详解
Python线程详解 线程简介 开启多线程 线程之间共享 GIL全局解释器锁 线程间通信 线程简介 线程,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元. ...
- 07 Python数据类型详解
文章目录 一.整数类型(int)详解 1.1 整数的不同进制 1) 十进制形式 2) 二进制形式 3) 八进制形式 4) 十六进制形式 1.2 数字分隔符 1.3 相关方法 二.字符串类型(strin ...
- Python:暴力破解密码 - 压缩包、web实战
简介:常规情况下,由于web自身的服务资源,带宽,吞吐率的原因,存在访问上线的情况,这和极端情况下本地直接即时访问,即时反馈的机制是完全不可等同的.另外暴力破解密码这种行为本身就是一个徘徊为灰色地带的 ...
最新文章
- 【Kotlin】Kotlin 中使用 ButterKnife ( 仅用于适配 Kotlin 语言 | 不推荐新项目使用 )
- 浅谈Hive和HBase区别
- 自己的模块给其他人调用是怎么打包的_webpack实战——模块打包
- “象征界”的奇观:刘天怜花鸟工笔作品印象
- markdown绘图插件----mermaid简介
- 数组中的forEach和map的区别
- js计算器代码加减乘除_理不清亲戚关系,程序员直接写了一个亲戚关系计算器,来试试?...
- 字符串在Java中_字符和字符串在Java中的旅程
- java task和thread_【Java学习笔记-并发编程】线程与任务
- ant批量处理word文件内容_word多个文件批量替换内容
- 唐宇迪学习笔记2:Python数据分析处理库——pandas
- 【树形DP】保镖排队
- Java 浅拷贝和深拷贝的理解和实现方式
- Linux 系统 网卡RTL8723BE 信号差不稳定的解决办法
- 【工具-DVWA】DVWA的安装和使用
- DS1042C数字示波器的波形截图流程
- transition和transition的区别
- C语言线程lock与unlock,锁求解关于lockunlock之后-第二个线程无法获得锁的问题
- 线上问题---程序假死
- 周鸿伟给创业者的建议