当前位置: 首页 > 知识库问答 >
问题:

F中的频率密码#

公羊光明
2023-03-14

我目前正在F#中研究频率替换密码。也就是说,我计算了文本中每个字母的出现次数,完成后,我想根据英文字母表中的字母频率替换这些字母。

到目前为止,我所做的是创建了一个包含(字母、频率百分比、推荐字母)的(char*浮动*char)列表。假设字母P是我的加密文本中最常见的字母(13.5%的字母是P),而E是英语文本中最常用的字母,我们的列表元素看起来像这样(“P”,13.5,“E”)。这个过程完成了文本中的所有字母,所以我们最终会得到所有字母及其推荐替换的列表。

我的问题是,我真的不知道如何用它们推荐的替换来替换密码文本中的字母。

Letter frequency in the english alphabet.
[(' ', 20.0); ('E', 12.02); ('T', 9.1); ('A', 8.12); ('O', 7.68); ('I', 7.31);
 ('N', 6.95); ('S', 6.28); ('R', 6.02); ('H', 5.92); ('D', 4.32); ('L', 3.98);
 ('U', 2.88); ('C', 2.71); ('M', 2.61); ('F', 2.3); ('Y', 2.11); ('W', 2.09);
 ('G', 2.03); ('P', 1.82); ('B', 1.49); ('V', 1.11); ('K', 0.69); ('X', 0.17);
 ('Q', 0.11); ('J', 0.1); ('Z', 0.07)]


Letter frequency in cipher.
[('W', 21.18); ('Z', 8.31); ('I', 7.7); ('P', 6.96); ('Y', 5.5); ('H', 5.48);
 ('G', 5.35); ('K', 5.3); ('N', 4.31); ('O', 4.31); ('M', 3.66); (' ', 2.83);
 ('A', 2.58); ('T', 2.38); ('Q', 2.22); ('B', 2.11); ('F', 2.11); ('.', 2.04);
 ('R', 1.62); ('S', 1.37); ('E', 1.06); ('X', 0.97); ('U', 0.25); ('L', 0.16);
 ('V', 0.11); ('J', 0.07); ('C', 0.02); ('D', 0.02)]


Recommended letter changes.
[('W', 21.18, ' '); ('Z', 8.31, 'E'); ('I', 7.7, 'T'); ('P', 6.96, 'A');
 ('Y', 5.5, 'O'); ('H', 5.48, 'I'); ('G', 5.35, 'N'); ('K', 5.3, 'S');
 ('N', 4.31, 'R'); ('O', 4.31, 'H'); ('M', 3.66, 'D'); (' ', 2.83, ' ');
 ('A', 2.58, 'L'); ('T', 2.38, 'U'); ('Q', 2.22, 'C'); ('B', 2.11, 'M');
 ('F', 2.11, 'F'); ('.', 2.04, 'Y'); ('R', 1.62, 'W'); ('S', 1.37, 'G');
 ('E', 1.06, 'P'); ('X', 0.97, 'B'); ('U', 0.25, 'V'); ('L', 0.16, 'K');
 ('V', 0.11, 'X'); ('J', 0.07, 'Q'); ('C', 0.02, 'J'); ('D', 0.02, 'Z')] 

如果有人有什么想法可以让我在如何解决这个问题上找到正确的方向,我会非常感激,因为我已经在这个问题上纠缠了一段时间了。

共有2个答案

姚洲
2023-03-14

很可能您需要一个映射操作。类似于myString的东西|

函子方法允许你将频率放入对象状态。

curried函数允许您将频率作为参数传递。

您可以选择哪种方法在您的应用程序中更有意义和/或看起来更自然。

慕河
2023-03-14

我相信您在英文字母表中缺少.频率(应该在DL之间)。当您将缺失值添加到alphaFreq列表时,两个列表将具有相同的长度,并且您可以通过压缩两个有序列表来生成推荐的更改图:

let changes =
    alphaFreq // list with letter frequency in the English alphabet
    |> List.zip cipherFreq // zipping with cipher frequency list
    |> List.map (fun ((cipherLetter,_), (alphaLetter,_)) -> (alphaLetter, cipherLetter))
    |> Map.ofList

编码测试:

"HELLO WORLD" |> String.map (fun ch -> changes.[ch]) |> printfn "%s"
// OZAAYWRYNAM

要获得解码器映射,只需交换字母顺序-

 类似资料:
  • 问题内容: 我正在编写代码来分析语音所唱的单个音频。我需要一种方法来分析音符的频率。当前,我正在使用PyAudio录制音频文件,该文件存储为,然后立即播放。 问题出在while循环上。由于某种原因,该条件永远不会成立。我打印了两个值(len(data)和(chunk * swidth)),它们分别是8192和4096。然后,我尝试在while循环中使用2 * chunk * swidth,这引发了

  • 我有一个关于获取加密文本文件内容并根据给定频率列表交换相应字母的快速问题。 例如,文本文件中的前几行是: XWJGFVCCVUJYPXQZGCVXQHXKAZGPPUHBZJYPUFMCZVYXQWJFZJCCMVMGHWZBZXQZKKBKUBKAZGJY 我创建了一个单个字符的数组列表,然后在哈希集中找到每个字母在文件中出现的次数。 在代码片段中,您可以看到字符串解密,它是英语中最常用的字母列

  • 问题内容: 我有一个点类型的链接列表,我想计算一个特定点的频率 Code }} 错误: 已更新。请帮助我。 问题答案: 您正在多个线程中使用您的线程。该的Javadoc的明确(粗体),指出: 请注意,此实现未同步。 如果多个线程同时访问链表,并且至少一个线程在结构上修改了链表,则必须在外部进行同步。 您的线程名称“吓死了我”: 线程“ Thread- 742 ”中的异常java.lang.Null

  • 所以,在我的C代码中,我用一个普通英语的文本文件,通过该文件分析英语字母表中字母的频率,并将它们存储到一个向量中。在获得频率后,我用英语字母表中频率最高的字母替换了以频率最高的字母开头的每个字母。我使用了和这样的字符串来表示字母表中最频繁的字母,然后我逐个查看最频繁的文本(按大于比较的向量排序),并用上面字符串中的字母替换它们。最终,这种天真方法的准确性取决于文件的大小;我想看看我是否能在保持这种

  • 问题内容: 假设我有一个单词列表,并且我想查找每个单词出现在该列表中的次数。 一个明显的方法是: 但是我发现这段代码不是很好,因为该程序在单词列表中运行两次,一次构建集合,第二次计算出现次数。 当然,我可以编写一个函数来遍历列表并进行计数,但是那不是Pythonic。那么,有没有更有效和Pythonic的方法呢? 问题答案: 在类中模块是专为解决这类问题的目的:

  • 本文向大家介绍C ++中的最大相等频率,包括了C ++中的最大相等频率的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个正整数的数组num,我们必须返回给定数组num的数组前缀的最大可能长度,这样就可以从该前缀中精确删除一个元素,以便其中出现的每个数字都会具有相同的频率。如果没有剩余元素,则删除一个元素后,仍会认为每个出现的数字具有相同的频率。 因此,如果输入类似于[3,3,2,2,6,4,