迭代解码
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();
所以,我有一个需要破解的密码。我有钥匙,但问题是密码中的每个数字都对应三个或两个字母。例如,如果我们有密码“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();