# Re: Getting to 100 (#119)

**URL:** <https://www.ruby-forum.com/t/re-getting-to-100-119/91588>\
**Category:** Ruby\
**Created:** [April 10, 2007, 6:50pm UTC](https://www.ruby-forum.com/t/re-getting-to-100-119/91588 "2007-04-10T18:50:40Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![davidtl](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/35a633/32.png) [@davidtl](https://www.ruby-forum.com/u/davidtl)\
**Post date:** [April 10, 2007, 6:50pm UTC](https://www.ruby-forum.com/t/re-getting-to-100-119/91588/1 "2007-04-10T18:50:40Z")

</div>

# [http://davidtran.doublegifts.com/blog/?p=11](http://davidtran.doublegifts.com/blog/?p=11)

# Reuse permutations method on my Ruby Q. (#106) Chess960 solution.

def permutations(elements)  
return [elements] if elements.size \<= 1  
result = []  
elements.uniq.each do |p|  
\_elements = elements.dup  
\_elements.delete\_at(elements.index(p))  
permutations(\_elements).each do |perm|  
result \<\< (perm \<\< p)  
end  
end  
result  
end

def find(digits, operators, target)  
raise “Error: More operators than digits.” if (digits.size \<=  
operators.size)  
operators[digits.size - 2] = nil if (operators.size != digits.size -  
1)  
found = 0  
stars = “\*” \* 25  
perm = permutations(operators)  
perm.each do |operator|  
expression = digits.zip(operator).flatten.join  
value = eval(expression)  
if value == target  
found += 1  
puts stars  
puts “#{expression} = #{value}”  
puts stars  
else  
puts “#{expression} = #{value}”  
end  
end  
puts “#{perm.size} possible equations tested.”  
puts “#{found} equations satisfied.”  
end

if ($0 == **FILE** )  
digits = ARGV[0] || “123456789”  
operators = ARGV[1] || “±-”  
target = ARGV[2] || “100”

if (digits =~ /[^1-9]/ || operators =~ /[^-+\*/]/)  
puts “Usage: #$0 digits operators target”  
exit  
end

find(digits.split(//), operators.split(//), target.to\_i)  
end

---

<div class="post-metadata">

**Author:** ![davidtl](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/35a633/32.png) [@davidtl](https://www.ruby-forum.com/u/davidtl)\
**Post date:** [April 10, 2007, 7:54pm UTC](https://www.ruby-forum.com/t/re-getting-to-100-119/91588/2 "2007-04-10T19:54:49Z")

</div>

for pretty output: change the line which call find method to be:

find(digits.split(//), operators.split(//).map{|e| " #{e} "},  
target.to\_i)
