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
< - >B
和C
< - >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