当前位置: 首页 > news >正文

蓝桥 卷“兔”来袭编程竞赛专场-02破解曾公亮密码 题解

赛题介绍

挑战介绍

曾公亮编撰的《武经总要》中记载了一套严谨的军事通信密码,这也是目前发现我国古代战争中最早使用的军用密码表。将战场上可能常用到的情况,用 40 个短语归纳表示,且每个短语前编有固定的数字代码,这 40 个短语及数字代码如下:

代码短语代码短语代码短语代码短语代码短语
1请弓2请箭3请刀4请甲5请枪旗
6请锅幕7请马8请衣赐9请粮料10请草料
11请车牛12请船13请攻城守县14请添兵15请移营
16请进军17请退军18请固定19未见军20见贼
21贼多22贼少23贼相敌24贼添兵25贼移营
26贼进军27贼退军28贼固守29围得贼城30解围城
31被贼围32贼围解33战不胜34战大胜35战大捷
36将士投降37将士叛38士卒病39部将病40战小胜

然后约定某一首五言古诗作为解密的钥匙,五言古诗中 40 个字正好对应密码表中 40 种情况。

例如约定唐代王勃的《送杜少府之任蜀川》为解密的钥匙。

城阙辅三秦,风烟望五津。

与君离别意,同是宦游人。

海内存知己,天涯若比邻。

无为在歧路,儿女共沾巾。

如果军中马匹不足,需要请求马匹,那么对应密码表中的情报则是:7、请马。而《送杜少府之任蜀川》中第 7 个字是烟,将军只需要将“烟”字写到 一件普通公文书牒之中,并在字上加盖印章。朝廷收到公文书牒后通过《送杜少府之任蜀川》确认“烟”字的位置,然后查找密码表,获得相应的情报。

挑战目标

补充文件  zeng_gongliang.py  下  zeng_gongliang_decryption(text)  函数中的 TODO 部分,使其实现我们需要的功能:

  • 输入古诗《送杜少府之任蜀川》中任意一个字,返回曾公亮密码表中对应的短语。
  • 如果输入的内容在古诗《送杜少府之任蜀川》的 40 个 字中查找不到,则返回 None。
  • 其它情况全部返回 None。
def zeng_gongliang_decryption(text: str) -> str:"""TODO"""key_dict = {'1':'请弓', '2':'请箭', '3':'请刀', '4':'请甲', '5':'请枪旗', '6':'请锅幕', '7':'请马', '8':'请衣赐', '9':'请粮料', '10':'请草料', '11':'请车牛', '12':'请船', '13':'请攻城守县', '14':'请添兵', '15':'请移营', '16':'请进军', '17':'请退军', '18':'请固定', '19':'未见军', '20':'见贼', '21':'贼多', '22':'贼少', '23':'贼相敌', '24':'贼添兵', '25':'贼移营', '26':'贼进军', '27':'贼退军', '28':'贼固守', '29':'围得贼城', '30':'解围城', '31':'被贼围', '32':'贼围解', '33':'战不胜', '34':'战大胜', '35':'战大捷', '36':'将士投降', '37':'将士叛', '38':'士卒病', '39':'部将病', '40':'战小胜'} decryption_text : str = ''return decryption_text

挑战要求

  • 题目需使用 Python3 完成,不能使用标准库和第三方库。
  • 函数传入 text 为字符串类型,可能为空、None 等值。
  • 不得修改文件路径、文件名 zeng_gongliang.py 以及函数名 zeng_gongliang_decryption(text)
  • 请只保留文件 zeng_gongliang.py 及文件中函数,不要添加测试或执行代码,避免检测时出错。
  • 线上环境调试代码时,请使用 python3 zeng_gongliang.py 命令调用 Python3。

参考样例

# 样例 1
text = "烟"; decryption_text = "请马"
# 样例 2
text = "城"; decryption_text = "请弓"
# 样例 3
text = "请弓"; decryption_text = None
# 样例 4
text = "城 "; decryption_text = None
# 样例 5
text = None; decryption_text = None

注意:最终实现效果以完全满足要求为准,而不是仅满足如上样例。


题解

解题思路

主要考察字典dict结构及方法的运用

  1. 要注意对传入参数类型的检查,包括空字符串等情形。
  2. 构造索引字符串。
  3. 利用index()方法寻找某个字符的索引.
  4. 过滤不存在的键值,返回None
  5. 最后使用get方法从字典找到对应的字符串值返回即可。
def zeng_gongliang_decryption(text: str) -> str:"""TODO"""# 过滤非str类型输入if not isinstance(text, str) or text == "":return None# 仅一个字符输入限制if len(text) > 1:return None# 构造数据字典key_dict = {'1': '请弓', '2': '请箭', '3': '请刀', '4': '请甲', '5': '请枪旗','6': '请锅幕', '7': '请马', '8': '请衣赐', '9': '请粮料', '10': '请草料','11': '请车牛', '12': '请船', '13': '请攻城守县', '14': '请添兵', '15': '请移营', '16': '请进军', '17': '请退军', '18': '请固定', '19': '未见军', '20': '见贼','21': '贼多', '22': '贼少', '23': '贼相敌', '24': '贼添兵', '25': '贼移营','26': '贼进军', '27': '贼退军', '28': '贼固守', '29': '围得贼城', '30':'解围城','31': '被贼围', '32': '贼围解', '33': '战不胜', '34': '战大胜','35': '战大捷','36': '将士投降', '37': '将士叛', '38': '士卒病', '39': '部将病', '40': '战小胜'}poem = "城阙辅三秦风烟望五津与君离别意同是宦游人海内存知己天涯若比邻无为在歧路儿女共沾巾"if text in poem:num = poem.index(text) + 1if key_dict.get(str(num)) == None:return Noneelse:return Nonedecryption_text: str = key_dict.get(str(num))return decryption_text

题目来源:蓝桥破解曾公亮密码

http://www.lryc.cn/news/34580.html

相关文章:

  • CSS定位
  • python sympy库
  • 达梦数据库统计信息的导出导入
  • 信息系统基本知识(六)
  • <C++>智能指针
  • 1.分析vmlinux可执行文件是如何生成的? 2.整理内核编译流程:uImage/zImage/Image/vmlinx之间关系
  • 数据结构4——线性表3:线性表的链式结构
  • weblogic 忘记密码重置密码
  • 安卓开发之动态设置网络访问地址
  • 深度学习模型训练工作汇报(3.8)
  • 【ns-3】添加nr(5G-LENA)模块
  • (枚举)(模拟)(前缀和)(数组模拟哈希)(可二分)1236. 递增三元组
  • mysql五种索引类型(实操版本)
  • 微服务进阶之 SpringCloud Alibaba
  • 前端性能优化笔记2 第二章 度量
  • 关于new和delete的一些思考,为什么不能在析构函数中调用delete释放对象的内存空间,new和delete的原理
  • 一场以数字技术深度影响和改造传统实业的新风口,正在开启
  • 【LeetCode】13. 罗马数字转整数
  • 2023/3/8集合之TreeSet HashSet简介 不含代码
  • 【面试1v1实景模拟】面试中常见的Java关键字详解
  • MySQL8.0.16存储过程比5.7.22性能大幅下降
  • 基于MATLAB的无线信道的传播与衰落(附完整代码与分析)
  • SDX62如何查看Kernel版本和Operating System Version Patch Level
  • 001+limou+HTML——(1)HTML入门知识
  • 使用Arduino Uno构建一个巡线机器人
  • 【C++】类和对象(收尾)
  • Linux延迟操作
  • np.insert()函数用法
  • 学习笔记-架构的演进之容器的封装-3月day06
  • Gorm根据关系模型中的属性查询原模型数据