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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值