Last friday one of my friend gave me a math challenge. You've given four numbers 6, 6, 5 and 2, you need to find 3 math operations to get 17 as a result. You have to use all four numbers and only once each. Order of numbers can be any.
I couldn't figure it out in my head so have to write a ruby script to iterate over all combinations, which turned out as a great coding exercise.
final_result = 17 numbers = [6, 6, 5, 2] numbers.map!(&:to_f) operations = [:+, :-, :*, :/] operation_combinations =  4.times do |a| 4.times do |b| 4.times do |c| operation_combinations << [operations[a-1], operations[b-1], operations[c-1]] end end end iteration_count = 0 results =  numbers.permutation do |nums| operation_combinations.each do |ops| iteration_count += 1 begin result = nums.each.with_index.reduce(nil) do |memo, (num, index)| if memo.nil? num else op = ops[index - 1] memo.send(op, num) end end if result == final_result results << [nums, ops] end rescue ZeroDivisionError 0 end end end puts iteration_count puts results
(5 / 6 + 2) * 6 = 17