当前位置:  开发笔记 > 编程语言 > 正文

从字符列表生成所有组合

如何解决《从字符列表生成所有组合》经验,为你挑选了1个好方法。

我正忙于建立一个用于笔测试器的实验室,以从4个字母的单词创建MD5哈希值。我需要这些单词包含小写和大写字母以及数字和特殊字符的组合,但是我似乎并没有发现如何以所有顺序组合任何给定的字符。所以目前我有这个:

my $str = 'aaaa';
print $str++, $/ while $str le 'dddd';

哪个会做:

aaaa
aaab
aaac
aaad
...
...
dddd

但是,我无法做到这一点:

Aaaa
AAaa
aAaa
...
dddD

更不用说加数字和特殊字符了。我真正想做的是使角色根据给定的列表创建单词。因此,如果我觉得要使用abeDod@#它,则应根据这些字符创建所有组合。

编辑以澄清。

假设我给了aBc#我需要的字符一个数字,以表示每个单词最多包含4个字母,并且所有给定字符组合在一起,例如:

aBc#
Bac#
caB#
#Bca
...

我希望可以澄清这个问题。



1> zdim..:

使用您接受的字符的ASCII码整数列表,使用您喜欢的(伪)随机数生成器从中进行采样。然后使用chr将每个字符转换为其字符并将它们连接起来。

喜欢

perl -wE'$rw .= chr( 32+(int rand 126-32) ) for 1..4; say $rw'

笔记

我仅使用单线来进行简单的复制粘贴测试。请用脚本很好地编写

我使用粗略的兰德,对一些东西拖拉很有用。如有需要,用更好的替代

胶粘四个(伪)随机数不能建立良好的分布;即使每个字母都自己写,整个事情也不是。但是这四个应该满足大多数需求。

如果没有,我认为您需要产生更长的列表(可能的字符范围可能重复四次)并将其随机化,然后绘制四个字母的子序列。还有很多工作

我需要点踢一下舞蹈才能使用产生从32到126的(随机数)整数rand,因为它只占用范围的结尾。而且,这会使所有这些对象都处于该范围内,可能不是您想要的;因此,请指定要从中绘制的子范围或特定列表

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有