#!/usr/bin/ruby class Combination def initialize(input) @array = input.split("") @hits = 0 end def fac(int) result = 1 1.upto(int) { |i| result*=i} return result end def recurse(an_array = @array, a_string = "") if an_array.length < 2 then puts a_string + an_array.to_s @hits += 1 else index = 0 temp_array = [] temp_string = "" an_array.each do |element| temp_string = a_string + element temp_array.replace(an_array) temp_array[index] = nil recurse(temp_array.compact, temp_string) index += 1 end end end def validate if fac(@array.length) == @hits then puts "---------------------" puts "Found " + @hits.to_s + ' combinations of "' + @array.to_s + '"' else puts "---------------------" puts "Recursion error, expecting " + fac(@array.length).to_s + " results, but counting " + @hits.to_s end end end print "Enter a sequence: " combo = Combination.new(gets.chomp) puts "---------------------" combo.recurse combo.validate