打印“X”个字符数与“X”字符串长度的所有可能组合(暴力破解)

2024-05-29

我正在尝试编写一个单词组合生成器,我的意思是打印“X”个字符数与“X”字符串长度的所有可能组合,

首先,我需要说的是,我在 StackOverFlow 中看到了一个关于这个问题的问题,其中有很多单词生成器的答案来执行此操作(在不同的语言上),但是请不要将其标记为重复或不要评论我的问题只是为了引用我该链接,因为我已经测试了该问题的所有 C# 和 VBNET 代码,实际上没有一个能够 100% 按预期工作,请参阅我需要的组合:

例如,如果我有“a”、“b”和“c”字符,并且我想将这些字符的所有组合放入“3”长度的字符串中,那么这就是我期望的结果:

' Expected result, 27 combinations:
'
' aaa
' aab
' aac
'
' aba
' abb
' abc
'
' aca
' acb
' acc
'
' baa
' bab
' bac
'
' bba
' bbb
' bbc
'
' bca
' bcb
' bcc
'
' caa
' cab
' cac
'
' cba
' cbb
' cbc
'
' cca
' ccb
' ccc

(排序并不重要,我可以稍后排序。)

...但到目前为止,我能得到的预期结果是:

'a
'aa
'aaa
'b
'bb
'bbb
'c
'cc
'ccc

我之前已经用两种语言(Ruby 和 Batch)完成了这次操作,但是使用嵌套的 Fors(很多 Fors 在一起,每个 Fors 只附加一个字母到另一个 For 输出),当然,如果我尝试在 VBNET 中执行此操作,避免很多Fors的起诉,并且以更好的表现方式来做。

在下面的代码中,您可以看到我如何尝试在 RAM 内存(数组)中分配所有组合,而不是将它们写入物理磁盘,因此我想使用逻辑方法并以更好的性能方式编写此代码,然后我想首先将所有组合保存在“内存中”,这也是我不想使用大量 for(性能)的原因。

这是我最后一次尝试,所有内容都在注释行中进行了解释:

Public Class Form1

    Dim characters As Char()  ' Default value: {"a","b","c"}
    Dim StringLength As Int64 ' Default value: 3
    Dim TotalCombinations As Int64 ' Default value: 27
    Dim strarray(99999999) As String ' Default size: "99.999.999" million of combinations in memory (I need to confirm this from an expert).

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim index As Int64 = 0

    For column As Int64 = 0 To TotalCombinations - 1 ' For 0 to 26

        For Each character As Char In characters ' Characters = {"a","b","c"}

            If column < index Then
                index = 0 ' I reset index value 'cause... just experimenting things.
                Try
                    strarray(index) += characters(index)
                    RichTextBox1.Text += strarray(index) & ControlChars.NewLine
                Catch
                End Try
            Else
                Try
                    strarray(index) += characters(index)
                    RichTextBox1.Text += strarray(index) & ControlChars.NewLine
                Catch
                End Try
            End If
        Next

        index += 1

    Next

    End Sub

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        characters = sender.text.ToCharArray ' Result: {"a","b","c"}
        Calculate_Combinations() ' Result: 27
    End Sub

    Private Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown1.ValueChanged
        StringLength = sender.value ' Result: 3
        Calculate_Combinations() ' Result: 27
    End Sub

    Private Sub Calculate_Combinations()
        Try
            TotalCombinations = ((characters.LongLength * StringLength) * StringLength) ' Result: 27
            Label1.Text = ((characters.LongLength * StringLength) * StringLength) & " number of combinations." ' Result: 27
        Catch : End Try
    End Sub

End Class

我精确的帮助。


使用 Linq 的一个很棒的解决方案@pengyang https://stackoverflow.com/users/1251423/pengyang与 IEnumerables 一起使用:

Private Shared Function GetCombinations(Of T)(list As IEnumerable(Of T), length As Integer) As IEnumerable(Of IEnumerable(Of T))
    If length = 1 Then
        Return list.[Select](Function(x) New T() {x})
    End If

    Return GetCombinations(list, length - 1).SelectMany(Function(x) list, Function(t1, t2) t1.Concat(New T() {t2}))
End Function

Then:

Dim result = GetCombinations("abc", 3)

LinqPad 的屏幕截图:https://i.stack.imgur.com/JAHdN.png https://i.stack.imgur.com/JAHdN.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

打印“X”个字符数与“X”字符串长度的所有可能组合(暴力破解) 的相关文章

  • 多步算法的设计模式

    我正在编写一个控制台应用程序 该应用程序执行包含 N 个步骤的算法 这一步很重要N在步骤之前正确完成N 1被执行 否则程序应该停止工作并显示错误消息 我可以用嵌套来做到这一点if当然和用途的陈述try catch finally 在fina
  • WPF 绑定无法与 int 类型的属性正常工作

    我拥有以下财产int输入我的视图模型 该模型绑定到TextBox 一切正常 TwoWay绑定工作正常 除了一种情况 如果我清除的值TextBox 属性设置器不会被调用 尽管值已被清除TextBox 属性仍保持先前的值 有人遇到过类似的问题吗
  • UTF-16-LE 文件的 Python 字符串替换

    Python 2 6 使用 Python string replace 似乎不适用于 UTF 16 LE 文件 我想到了2种方法 找到一个可以处理 Unicode 字符串操作的 Python 模块 将目标 Unicode 文件转换为 ASC
  • JIT编译后的代码是如何注入内存并执行的?

    考虑一个典型的 Windows x86 或 AMD64架构 内存为 分为可执行部分 无法写入 和 数据部分 可以写入但不能写入 被处决 想想 DEP JIT 在内存中编译方法 通常 不存储任何东西 磁盘 而是将其移动到哪里 下一条指令指针可
  • Sql Server 2008 强制日期从 dd/MM/yyyy 到 MM/dd/yyyy

    我在 sql server 2008 上遇到了一个奇怪的问题 我试图用dd MM yyyy格式写入sql server 2008 但是插入日期后它会自动转换为MM dd yyyy 注意 我的电脑时钟格式是dd MM yyyy 我的报告查看器
  • 将整数转换为其 ascii 值的字符串

    给定一个数字number这样它的数字被分组为长度的部分n 默认值为n是3 其中每个组代表一些ascii值 我想转换number转换为这些 ASCII 字符的字符串 例如 n number Output 3 70 F 3 6506606606
  • SQL LIKE 的 C# 版本

    有没有办法在 C 中搜索字符串中的模式 像 Sql LIKE 这样的东西会非常有用 正则表达式允许一切LIKE允许以及更多 但具有完全不同的语法 然而 由于规则LIKE是如此简单 其中 表示零个或多个字符 并且 表示一个字符 并且两者LIK
  • .NET DateTime 到 time_t(以秒为单位)

    有C代码 time1 double dt1 25569 0 86400 0 它以秒为单位从 TDateTime VCL 转换为 time t 格式 所以最后我需要得到time t NET DateTime 的格式 关于 time t 几乎普
  • IoC比较[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 开发 ASP NET Web 应用程
  • 变量声明后的一个问号是什么意思? [复制]

    这个问题在这里已经有答案了 在玩开源项目时 我尝试ToStringDateTime 对象被编译器阻止 当我跳到定义时 我看到了这个 public DateTime timestamp 有人可以告诉我这叫什么以及为什么它可能有用吗 这是一个可
  • 调试调用 .Net(C#) dll 的 VB6 项目

    我已经被这个问题困扰了几个小时了 我希望有人遇到过类似的问题 我们使用 VS2010 开发了一个原型 Net C dll 并希望能够在 C 应用程序和 VB6 应用程序中调用该 dll 我的问题是 是否可以调试调用 Net dll 的 VB
  • 将 C# 字符串传递给 C++,并将 C++ 结果(字符串、char*.. 等等)传递给 C#

    我尝试了不同的事情 但我对 Interop 感到生气 这里的字符串一词不是指变量类型 而是指 字符的集合 我有一个在 dll 中定义的非托管 C 函数 我试图从 C 访问该函数 该函数有一个字符串参数和一个字符串返回值 如下所示 strin
  • 从 SynchronizationContext 派生

    简而言之 我实现了一个从 SynchronizationContext 派生的类 以便 GUI 应用程序可以轻松地使用 GUI 线程以外的线程上引发的事件 我非常感谢对我的实施提出评论 具体来说 有什么是您建议反对的或可能会导致我未预见到的
  • 正则表达式替换多个组

    我想使用正则表达式将多个组替换为相应的替换字符串 更换表 gt amp gt hsh 1 gt 5 5 gt 6 例如 对于以下输入字符串 a1asda fj ahdk5adfls 对应的输出字符串是 a5asda ampfj hshahd
  • 使用字符串的二维数组

    我被一些未评分的作业困住了 它是为了练习 我必须创建一个名为的函数find name这需要 2 个参数 第一个参数是一个二维名称数组 字符串 第二个参数是一个字符串 用于在二维数组中查找名称 如果找到 该函数必须返回 1 否则返回 0 当我
  • 如何清除客户端.Net SSL会话缓存

    我正在编写一个小测试工具 它使用 HttpWebRequest 来负载测试服务器 我想要 每次我尝试调用 HttpWebRequest GetResponse 时 它都会建立一个新的 SSL 会话 而不是使用缓存中的会话 注意 我提供客户端
  • “内存泄漏”剖析

    从 NET 角度来看 什么是内存泄漏 https en wikipedia org wiki Memory leak 如何确定您的应用程序是否存在泄漏 有什么影响 如何防止内存泄漏 如果您的应用程序存在内存泄漏 当进程退出或被终止时它会消失
  • 使用私有构造函数的 C# 单元测试类?

    好吧 我刚刚收到一个作业 我必须对具有私有构造函数的类执行单元测试 现在 当所有方法也都是非静态时 我该如何在不初始化类的情况下进行单元测试 有什么方法可以对具有私有构造函数的类进行单元测试 无需反射 如果您无法将类公开 您仍然可以通过以下
  • 如何在 WCF 中反序列化自定义 SOAP 标头?

    我正在尝试向通过 WCF 的所有 SOAP 请求添加自定义标头 我发现这篇精彩的文章 http blogs msdn com b mohamedg archive 2012 10 21 adding custom soap headers
  • 如何转义 onClick 处理程序内 JavaScript 代码中的字符串?

    也许我只是想得太难了 但我在弄清楚链接的 onClick 处理程序内的某些 JavaScript 代码中的字符串上使用什么转义时遇到了问题 例子 a href Select a The and 是发生模板替换的地方 我的问题是项目名称可以包

随机推荐