迭代解码

Iterative decoding

所以,我有一个需要破解的密码。我有钥匙,但问题是密码中的每个数字都对应三个或两个字母。例如,如果我们有密码“12”,并且我们知道“1”对应于 'A'、'J' 或 'S',而“2”对应于 'B', 'K' 或 'T', 我们需要输出所有可能的组合, 所以: 'AB', 'AK', 'AT', 'JB', 'JK'、'JT'、'SB'、'SK'、'ST'。我将如何在 C# 中执行此操作?

提前致谢。

使用 LINQ,您可以使用以下代码:

var input = "12";

var mappings = new Dictionary<string, string[]>();
mappings.Add("1", new string[] { "A", "J", "S" });
mappings.Add("2", new string[] { "B", "K", "T" });

var result = input.Select(c => mappings[c.ToString()]).CartesianProduct();

foreach (var item in result)
{
    Console.WriteLine(string.Join("", item.ToArray()));
}

它使用 CartesianProduct extension method from Eric Lipperts blog

再简单不过了

您可以使用 Linq 创建交叉连接:

char[][] cl1 = { new[] {'A','J','S'}, new[] {'B','K','T'}, new[] {'C','L','U'} ......};

int offsetchar1 = 0;
int offsetchar2 = 1;
var j = (from c1 in cl1[offsetchar1]
          from c2 in cl1[offsetchar2]
          select
          c1.ToString() + c2.ToString()).ToArray();

添加第三个字符:

  int offsetchar3 = 2;
  var k = (from j1 in j
          from c3 in cl1[offsetchar3]
          select
          j1 + c3.ToString()).ToArray();