我正在尝试创建一个脚本,该脚本生成一个数组,列出用户提供的一定长度的字母和数字(以及最终符号)的每个重复排列。例如:
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
然而,这不能通过输入来确定,对我来说似乎没有效率或rubyesque。我尝试了各种其他循环组合,但似乎都没有。一个例子:
# 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的长度输入的废话。我该如何做到这一点?
答案 0 :(得分:3)
alphanum = [*?a..?z, *?0..?9]
length.times.flat_map { |l|
alphanum.repeated_permutation(l + 1).map(&:join)
}
请注意,length > 3
会为您提供批次的结果。
e = Enumerator.new do |y|
length.times do |l|
alphanum.repeated_permutation(l + 1).each do |p|
y << p.join
end
end
end
答案 1 :(得分:1)
library(dplyr)
data_frame(V1, V2)
# A tibble: 3 × 2
# V1 V2
# <list> <list>
#1 <chr [3]> <chr [4]>
#2 <chr [5]> <chr [2]>
#3 <chr [2]> <chr [5]>
请参阅Array#repeated_combination。
对于&#34; permations&#34;而不是&#34;组合&#34;,找到并替换&#34;组合&#34;用&#34; permbos&#34;和&#34;组合&#34;用&#34;排列&#34;。