编程大作战——“古老的棋盘密码”

 公元前2世纪,一个叫Polybius的希腊人设计了一种将字母加密成数字的方法,他画了一个5×5的棋盘,然后将26个英文字母放置在里面,其中 i 和 j 共用一个格子,每个字母对应的行和列组成一个两位数即该字母的加密结果。这个方法被称之为棋盘密码,在古代,这种棋盘密码被广泛使用。

假设我们需要发送明文信息“Hello”,找到H对应2行3列,则加密为23,e加密为15,以此类推,得到密文:23 15 31 31 34。

一、作战任务

编写一个棋盘加密的程序,输入英文字符,显示或打印加密后的结果。

提示:题目的难度就在于如何找到字母对应的数字(行列),以scratch为例:可以创建两个列表,分别存储26个字母,字母对应的加密结果。

少儿编程大作战——“古老的棋盘密码”

加密时根据字母去找到结果实现加密,这是一种比较简单的处理办法,当然还有其它办法等你来挑战。

二、挑战要求

编程语言不限,scratch、python……等

三、分级挑战

该题目有一定的难度,建议初级及以上的学员参与:

初级:按照上面提示,用列表的方法先存储字母与对应的加密结果进行加密,python可以用到字典。

中级:不要借助列表,自己观察棋盘的分布规律,使用简单的算法得到字母对应的行和列,实现加密

高级:在中级的基础上实现解密程序,例如输入一组数:23 15 31 31 34

得到解密结果:HELLO

注意:解密过程中遇到24,对应有两个字母i/j,暂不考虑具体选择哪一个,直接用(i/j),最终结果需要根据语义选择,看哪个更符合语境就好了。比如说密文21 24 42 15解密后得到f(i/j)re,这个时候如果是fjre很明显是错的,正确的应该是fire


任务指挥官|大猫老师

为了增加孩子们的创造能力,给孩子们一个持续学习练习的方向,中国少儿编程网(www.kidscode.cn)不定期推出一些编程小任务,孩子们完成的作品可以发布到我们的网站,由少儿编程网的老师做出评定并提供修改建议。

由于这个不是正式比赛,鼓励孩子们发挥自己的想象力,也培养他们相互学习和分享精神,因此暂时不提供奖项设置。鼓励原创,家长可以指导孩子们一起完成,希望看到大家不一样的作品!

本站内容未经许可,禁止任何网站及个人进行转载。