csharp进阶练习题:谜机 - 第1部分:插板【难度:2级】:

在这一系列习题,我们将实现[恩尼格玛密码机(http://en.wikipedia.org/wiki/Enigma_machine)的软件版本.

谜机器是在第二次世界大战期间,为掩饰军事通信的内容使用的消息加密/解密机. [阿兰·图灵(http://en.wikipedia.org/wiki/Alan_Turing) - 的计算之父 - 今天正在使用的所有计算机的基础上制定和发展的概念,他响应非常需要这样做打破这些军事通信.图灵和他的同事[布莱切利公园(http://en.wikipedia.org/wiki/Bletchley_Park)通常被认为是负责两年缩短二战和节省了约22周万人的生命.

谜机由多个部分组成的:用于输入,转子和插板用于加密,和lampboard输出键盘.

我们将模拟输入和输出字符串,并构建使用他们软件的转子,插板和机制.正如我们进步的代码将变得更为复杂,所以建议您尝试,以便他们.

步骤1:[插板(http://en.wikipedia.org/wiki/Enigma_machine#Plugboard)

在这习题,你必须实现插板.

物理描述

插板crosswired拉丁字母,26个字母togther,使得输入到一个字母可以产生的另一封信输出.如果线不存在,则输入字母不变.每个插板想出了一个最大的10根线,所以至少六个字母不跨接线.

例如:

  • 如果一电线A连接到B,那么A输入将产生B输出和B输入将产生一个A输出.

  • 如果没有线连接到C,那么只有一个C输入将产生C输出.

注意

在原来的恩尼格玛密码机的实际使用情况,标点符号被编码成流中传输的话,在我们的代码,任何不是在A-Z将原样返回的范围内.

习题

Plugboard类,你将实现以下工作:

1.取线对的列表在结构在一个字符串的形式,没有配置配线的默认行为.例如. "ABCD"将接线A < - >BC < - >D.
2.验证该线配对是合法的.抛出一个异常,如果不.
3.实施process方法为单个字符输入转换成输出.

### 哈斯克尔言论
由于Haskell没有类,`plugboard`是一个函数,或者返回一个`字符 - > Char`函数进行处理,或错误消息.

例子

插板=插板( "ABCDEFGHIJKLMNOPQRST")
plugboard.process( "A")==> "B"
plugboard.process( "B")==> "A"
plugboard.process( "X")==> "X"
plugboard.process( " ")==>"".
VAR =插板插板( "ABCDEFGHIJKLMNOPQRST")
plugboard.process( "A")==> "B"
plugboard.process( "B")==> "A"
plugboard.process( "X")==> "X"
plugboard.process( " ")==>"".
插板插板=新插板( "ABCDEFGHIJKLMNOPQRST");
plugboard.process( "A")==> "B"
plugboard.process( "B")==> "A"
plugboard.process( "X")==> "X"
plugboard.process( " ")==>"".
让(右过程)=插板"ABCDEFGHIJKLMNOPQRST"
在地图的过程"ABX". `shouldBe` "BAX."
VAR =插板新插板( "ABCDEFGHIJKLMNOPQRST");
plugboard.process( 'A')==> "B"
plugboard.process( 'B')==> "A"
plugboard.process( 'X')==> "X"
plugboard.process( '')==> "".

编程目标:

using System;
public class Plugboard {public Plugboard(String wires = "") {}public char process(char c) {return c;}
}

测试样例:

using System;
using NUnit.Framework;
[TestFixture]
public class PlugboardTestConstruction {[Test]public void ValidConstruction() {var pb = new Plugboard("AB");Assert.AreEqual('B', pb.process('A'), "A has to be translated to B with 'AB'");Assert.AreEqual('C', pb.process('C'), "C has to stay C with 'AB'");}
}

最佳答案(多种解法):

点击查看答案

更多关联题目:

csharp基础练习题:创建一个包含所有允许的字符序列【难度:1级】–景越C# 经典编程题库,不同难度C# 练习题,适合自学C# 的新手进阶训练
csharp进阶练习题:链表 - 插入第N个节点【难度:2级】–景越C# 经典编程题库,不同难度C# 练习题,适合自学C# 的新手进阶训练

免责申明

本博客所有编程题目及答案均收集自互联网,主要用于供网友学习参考,如有侵犯你的权益请联系管理员及时删除,谢谢
题目收集至https://www.codewars.com/
https://www.codewars.com/kata/the-enigma-machine-part-1-the-plugboard

csharp进阶练习题:谜机 - 第1部分:插板【难度:2级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练相关推荐

  1. csharp进阶练习题:算上笑脸!【难度:2级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练

    csharp进阶练习题:算上笑脸![难度:2级]: <字体大小= "10">说明结果 给定的数组矩阵(ARR)作为参数完成的功能countSmileys应返回笑脸的总数 ...

  2. csharp进阶练习题:GrandChild养成了叔叔的习惯【难度:2级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练

    csharp进阶练习题:GrandChild养成了叔叔的习惯[难度:2级]: 爷爷总是要求他的女儿("妈妈")和儿子("叔叔")养成一些习惯,他在一篇论文中为他 ...

  3. csharp高级练习题:Codewars风格排名系统【难度:4级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练

    csharp高级练习题:Codewars风格排名系统[难度:4级]: 写一类称为用户被用来计算用户将通过一个类似于Codewars用途排名系统进展的量. 商业规则: 用户开始于秩-8,可以进步一路8. ...

  4. csharp基础练习题:noobCode 03:检查这些信件...查看是否在“字符串1”的信件出现在“字符串2”【难度:1级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练

    csharp基础练习题:noobCode 03:检查这些信件-查看是否在"字符串1"的信件出现在"字符串2"[难度:1级]: 编写一个函数,检查第二字符串中的字 ...

  5. csharp基础练习题:产品和LCMS之间的差异总和【难度:1级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练

    csharp基础练习题:产品和LCMS之间的差异总和[难度:1级]: 在此习题您需要创建一个函数,非负整数对的二维数组/列表并返回的所有"保存",你可以得到[LCM(HTTPS的总 ...

  6. csharp基础练习题:计数阳性/阴性的总和【难度:0级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练

    csharp基础练习题:计数阳性/阴性的总和[难度:0级]: 鉴于整数数组. 返回一个数组,其中第一元件是阳性数的计数和所述第二元件是负数的总和. 如果输入数组为空或无效,则返回一个空数组. 示例 对 ...

  7. csharp基础练习题:排序数组矩阵由串长度【难度:1级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练

    csharp基础练习题:排序数组矩阵由串长度[难度:1级]: 编写一个函数,需要字符串作为参数数组,并返回包含相同字符串的有序排列,下令从最短到最长. 例如,如果该数组被作为参数传递: [ " ...

  8. csharp基础练习题:TIY-Fijhghbujhjh【难度:1级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练

    csharp基础练习题:TIY-Fijhghbujhjh[难度:1级]: 在这个练习中,你将不得不创建一个名为tiyFizzBu​​zz功能.该功能将在一个字符串参数,并将返回该字符串的一些字符替换, ...

  9. csharp基础练习题:小数的位数【难度:1级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练

    csharp基础练习题:小数的位数[难度:1级]: 确定在一个无符号整数的十进制数字号码.例如,图9是一个数字,66具有2位和128685具有6位数字.要小心,以避免溢出/下溢. 编程目标: publ ...

  10. csharp高级练习题:ASCII85编解码【难度:3级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练

    csharp高级练习题:ASCII85编解码[难度:3级]: ASCII85是公司的PDF和Postscript内使用的二进制到ASCII编码方案,并在基地64.你的任务是两个新的方法来扩展Strin ...

最新文章

  1. 15.Result配置详解
  2. Hibernate框架--学习笔记(上):hibernate项目的搭建和常用接口方法、对象的使用
  3. Qt使用OpenCV读取图片练习
  4. etcd php,etcd集群备份和数据恢复
  5. 23种设计模式之建造者模式
  6. linux 关闭登录权限,linux – /var/www/html的权限[已关闭]
  7. Asp.Net Web API(四)
  8. Jmeter系列之no-gui模式
  9. linux cat用法退出,Linux常用命令 - cat命令用法详解
  10. 「ROS Kinetic」发布速度消息cmd_vel
  11. 浏览器显示海康摄像头实时预览画面纯前端解决方案
  12. 为什么说BMC才是国产服务器的“命门”?
  13. 仿coco点餐系统的微信小程序
  14. 外行人都能看懂的SpringCloud,错过了血亏! 1
  15. 物竞党的福利来啦~如何学物理竞赛获得省一及以上的成绩?
  16. 小白怎样快速制作gif动图?图片在线合成gif该如何做?
  17. 轻量化中文版linux,MX Linux:一款专注于简洁性的中等体量发行版 | Linux 中国
  18. SpringBoot中,使用WxJava SDK 实现微信小程序登录
  19. 一款近年来备受青睐的web弹层组件——layer(http://layer.layui.com/)
  20. linux安装un解压工具,压缩及解压缩工具

热门文章

  1. c语言指针实现数组排序算法,C语言实现数组快速排序算法
  2. 计算机的发明是现代科学的奇迹之一翻译,04统考阅读新题型50篇翻译.pdf
  3. mysql一个汉字是几个字节_mysql里一个中文汉字占多少字节数?
  4. 异或鉴相器 matlab 数字鉴相器,采用VHDL设计的全数字锁相环电路设计
  5. 通过gitbub桌面工具同步
  6. echart获取geoJson格式世界各国地图的资源,世界地图,世界各国分区显示,精确到乡镇一级资源
  7. 激荡三十年(珍藏图文版)
  8. imu 里程计融合_视觉里程计IMU辅助GPS融合定位算法研究
  9. 网页磁贴模板_【Win 10应用开发】Adaptive磁贴模板的XML文档结构
  10. android 动态仿磁贴,高仿 WIN8系统 磁贴点击下沉倾斜效果源码