蓝桥 卷“兔”来袭编程竞赛专场-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
结构及方法的运用
- 要注意对传入参数类型的检查,包括空字符串等情形。
- 构造索引字符串。
- 利用
index()
方法寻找某个字符的索引. - 过滤不存在的键值,返回
None
。 - 最后使用
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
题目来源:蓝桥破解曾公亮密码
相关文章:
蓝桥 卷“兔”来袭编程竞赛专场-02破解曾公亮密码 题解
赛题介绍 挑战介绍 曾公亮编撰的《武经总要》中记载了一套严谨的军事通信密码,这也是目前发现我国古代战争中最早使用的军用密码表。将战场上可能常用到的情况,用 40 个短语归纳表示,且每个短语前编有固定的数字代码,这 40 个短…...

CSS定位
🍓个人主页:bit.. 🍒系列专栏:Linux(Ubuntu)入门必看 C语言刷题 数据结构与算法 HTML和CSS3 目录 1.1为什么需要定位? 1.2定位组成 1.3静态定位static(了解) 1.4相对定位 relative …...
python sympy库
sympy库是python的符号运算库,是电脑辅助简单数学函数计算的好工具。本文简单记录了一下有关sympy的方法。建议使用jupyter notebook,这样输出的函数很好看。 文章目录sympy基础安装自变量(Symbols)函数表达式(Expr&am…...
达梦数据库统计信息的导出导入
一、统计信息对象统计信息描述了对象数据的分布特征。统计信息是优化器的代价计算的依据,可以帮助优化器较精确地估算成本,对执行计划的选择起着至关重要的作用。统计信息的收集频率是一把双刃剑,频率太低导致统计信息滞后,频率太…...

信息系统基本知识(六)
大纲 信息系统与信息化信息系统开发方法常规信息系统集成技术软件工程新一代信息技术信息系统安全技术信息化发展与应用信息系统服务管理信息系统服务规划企业首席信息管及其责任 1.7 信息化发展与应用 我国在“十三五”规划纲要中,将培育人工智能、移动智能终端…...
<C++>智能指针
1. 智能指针 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<memory> using namespace std;int div() {int a, b;cin >> a >> b;if (b 0)throw invalid_argument("除0错误");return a / b; }void func() {int* p1 new in…...
1.分析vmlinux可执行文件是如何生成的? 2.整理内核编译流程:uImage/zImage/Image/vmlinx之间关系
一、分析vmlinux可执行文件是如何生成的? 1、分析内核的底层 makefile 如下: vmlinux: scripts/link-vmlinux.sh vmlinux_prereq $(vmlinux-deps) FORCE$(call if_changed,link-vmlinux)vmlinux_prereq: $(vmlinux-deps) FORCE发现vmlinux的生成主要依…...

数据结构4——线性表3:线性表的链式结构
基本概念 链式存储结构用一组物理位置任意的存储单元来存放线性表的数据元素。 这组存储单元既可以是连续的又可以是不连续的甚至是零散分布在任意位置上的。所以链表中元素的逻辑次序和物理次序不一定相同。而正是因为这一点,所以我们要利用别的方法将这些…...
weblogic 忘记密码重置密码
解决:weblogic 忘记密码 weblogic安装后,很久不用,忘记访问控制台的用户名或者密码,可通过以下步骤来重置用户名密码。 版本:WebLogic Server 11g 说明:%DOMAIN_HOME%:指WebLogic Server 域(…...

安卓开发之动态设置网络访问地址
之前开发程序联测测接口的时候,因为要和不同的后台人员调接口,所以经常要先把程序里的ip地址改成后台人员给我的。每次都要先修改ip地址,之后编译运行一下,才能测试。但要是换了个后台人员,或者同时和2个后台人员测接口…...

深度学习模型训练工作汇报(3.8)
进行数据的初始整理的准备 主要是进行伪序列字典的设置,以及训练数据集的准备。 期间需要的一些问题包括在读取文件信息的时候,需要跳过文件的第一行或者前两行,如果使用循环判断的话,会多进行n次的运算,这是不划算的…...

【ns-3】添加nr(5G-LENA)模块
文章目录前言1. 下载5G-LENA源代码2. 配置并重新构建ns-3项目参考文献前言 本篇以ns-3.37为例介绍如何在ns-3中添加nr(5G-LENA)模块 [1]。5G-LENA是一个由Mobile Networks group CTTC(Centre Tecnolgic de Telecomunicacions de Catalunya&a…...
(枚举)(模拟)(前缀和)(数组模拟哈希)(可二分)1236. 递增三元组
目录 题目链接 一些话 流程 套路 ac代码 题目链接 1236. 递增三元组 - AcWing题库 一些话 int f[N]; memset(f,0,sizeof f)影响不到f[N] 所以尽量不要对f[N]赋值,不要用f[N]操作 流程 //由三重暴力i,j,k因为三重暴力底下是分别用i和j,j和k作比较…...
mysql五种索引类型(实操版本)
为什么使用索引 最近学习了Mysql的索引,索引对于Mysql的高效运行是非常重要的,正确的使用索引可以大大的提高MySql的检索速度。通过索引可以大大的提升查询的速度。不过也会带来一些问题。比如会降低更新表的速度(因为不但要把保存数据还要保…...

微服务进阶之 SpringCloud Alibaba
文章目录微服务进阶🍓SpringCloud 有何劣势?🍓SpringCloud Alibaba 提供了什么?提示:以下是本篇文章正文内容,SpringCloud 系列学习将会持续更新 微服务进阶 🍓SpringCloud 有何劣势࿱…...
前端性能优化笔记2 第二章 度量
相关 Performance API 都在 window.performance 对象下 performance.now() 方法 精度精确到微妙获取的是把页面打开时间点作为基点的相对时间,不依赖操作系统的时间。 部分浏览器不支持 performance.now() 方法,可以用 Date.now() 模拟 performance.n…...

关于new和delete的一些思考,为什么不能在析构函数中调用delete释放对象的内存空间,new和delete的原理
最近在写代码的时候,觉得每次new出来的对象都需要去delete好麻烦,于是直接把delete写到了析构函数中,在析构函数里面写了句delete this,结果调用析构函数的时候死循环了,不是很理解原因,于是去研究了一下。…...

一场以数字技术深度影响和改造传统实业的新风口,正在开启
当数字经济的浪潮开始上演,一场以数字技术深度影响和改造传统实业的新风口,正在开启。对于诸多在互联网时代看似业已走入死胡同的物种来讲,可以说是打开了新的天窗。对于金融科技来讲,同样如此。以往,谈及金融科技&…...

【LeetCode】13. 罗马数字转整数
题目链接:https://leetcode.cn/problems/roman-to-integer/ 📕题目要求: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 例如, 罗马数字 2 写做 II ,即…...

2023/3/8集合之TreeSet HashSet简介 不含代码
TreeSet : 底层是由TreeMap维护的 无序的,不可重的 底层结构 : 红黑树(平衡二叉树) 特点 : 查询效率高,默认升序排序引用场景 : 适合应用在存储多个单个值的数据的集合,去重的,自动升序排序的场景新增方法:新增了一些与比较大小相关的方法 遍历方式 1)foreach 2)iterator 1测试…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)
注:文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件:STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...