From: Aric Campbell Date: 2007-08-10T23:19:55+09:00 Subject: simple cipher solver, finding all possible key combinations --0-34824647-1186755582=:34852 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit I am trying to find every possible combination of the letters of the alphabet to create a file by a program to solve simple replacement ciphers. There shouldn't be any repeats of letters in the combination (i.e. a can only occur once in a given combination). I had thought of using the code below to get every possible combination and, even though it contains duplicate letters in the combinations it generates, I was going to prune those out. The problem is that it would take a very considerable number of years before the program finishes. Anyone know of an algorithm that I could use to generate the possibilities in a more timely manner? class Value def initialize val='a' @value = val end def == rhs if rhs.class != self.class return false end rhs.value == self.value end def next if @value == 'z' self.reset else @value = @value.next end end def reset @value = 'a' end def value @value end end class Set def initialize @buffer = [] 26.times {@buffer << Value.new} end def value @buffer temp = [] @buffer.each{|a| temp << a.value} temp end def exausted? @buffer.each do |a| if a.value != 'z' return false end end return true end def next cursor = 1 while true if @buffer.last(cursor)[0].value == 'z' @buffer.last(cursor)[0].next() cursor += 1 @buffer.last(cursor)[0].next() else @buffer.last(cursor)[0].next() break end end self.value end end ################################################################# ################################################################# s = Set.new f = open "sets.out",'w' f << s.value while s.exausted? == false f << s.next << "\n" end --------------------------------- Be a better Globetrotter. Get better travel answers from someone who knows. Yahoo! Answers - Check it out. --0-34824647-1186755582=:34852--