gpt4 book ai didi

arrays - ruby - 如何生成给定长度的字母和数字的每种组合的数组?

转载 作者:太空宇宙 更新时间:2023-11-03 17:44:56 25 4
gpt4 key购买 nike

我正在尝试创建一个脚本,该脚本生成一个数组,该数组列出用户提供的特定长度的字母和数字(以及最终符号)的每个重复排列。例如:

User input: 4
Output:
a
b
...
zzzy
zzzz

我尝试了多种方法来实现这一点,并通过嵌套 .each 循环遍历包含 a-z 和 0-9 的数组获得了我想要的效果。

alphanum.each do |s|
output << s
alphanum.each do |t|
output << s + t
alphanum.each do |r|
output << s + t + r
alphanum.each do |i|
output << s + t + r + i
end
end
end
end

但是,这不能通过输入来确定,并且对我来说似乎不是高效的或 ruby​​esque。我尝试了各种其他循环组合,但似乎都不起作用。一个例子:

# User input
puts "Max length: "
input = gets.chomp
length = input.to_i

# Iterates over the array
length.times do
modded.each do |s|
alphanum.each do |t|
r = s + t
puts r # To test output
modded << r
end
end
end

这会输出诸如 aaaaaaaaaaaaa1 之类的内容,以及长度输入仅为 1 或 2 的其他无意义内容。我该如何完成此操作?

最佳答案

alphanum = [*?a..?z, *?0..?9]
length.times.flat_map { |l|
alphanum.repeated_permutation(l + 1).map(&:join)
}

请注意,length > 3 会给您很多结果。

编辑:正如 meagar 所说,这非常占用内存。基于枚举器的答案(不是很漂亮,但不会破坏你的内存):

e = Enumerator.new do |y|
length.times do |l|
alphanum.repeated_permutation(l + 1).each do |p|
y << p.join
end
end
end

关于arrays - ruby - 如何生成给定长度的字母和数字的每种组合的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41253805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com