I’ve been messing around with generating all possible combinations of a
set of letters, (Ala, a 6 letter set would start enumerating at “aaaaaa”
then move on to “aaaaab” so on and so forth, all the way down to
“zzzzz”) by iterating through an array using slice() , Which is a pretty
good implementation for small tasks, But suppose I wanted to generate
larger sets, Is there a more efficient implementation than say
a=0
b=0
c=0
d=0
e=0
f=0
z = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l",
“m”, “n”, “o”, “p”, “q”, “r”, “s”, “t”, “u”, “v”, “w”, “x”, “y”, “z”]
slice = z.slice(a) + z.slice(b) + z.slice© + z.slice(d) + z.slice(e) +
z.slice(f)
if…
else… [Incrementing]
puts slice
Thank you in advance
Zephyr P. wrote:
I’ve been messing around with generating all possible combinations of a
set of letters, (Ala, a 6 letter set would start enumerating at “aaaaaa”
then move on to “aaaaab” so on and so forth, all the way down to
“zzzzz”)
(“aaaaaa”…“zzzzzz”).each do |string|
puts string
end
This will run for a good while, but it won’t hog memory the way a
solution
populating an array would.
HTH,
Sebastian
You might also try the Permutations gem at
http://permutation.rubyforge.org/
You might also try the Permutations gem …
Or use the Combinatorial Object Server and the Hpricot gem. Pass in your
parameters for the combinatorial object and scrape your results out of
the table cells. I don’t believe there is an API for the COS but
scraping the hrml results is quite easy.
Combinatorial Object Server
http://theory.cs.uvic.ca/root.html
What about something as simple as
i = 0
“aaaaa”.upto(“zzzzz”) {|s| i += 1; puts “#{i}. #{s}”}
You could write to a file if you wish. Note that “aaaaa”.upto(“zzzzz”)
is NOT the same as “a”.upto(“zzzzz”)
Sebastian H. wrote:
This will run for a good while, but it won’t hog memory the way a solution
populating an array would.
HTH,
Sebastian
Impressive, Signifigantly less RAM usage.