Solution: Google Labs Aptitude Test (Recursion)
Go over the recursive solution for the google labs aptitude test.
We'll cover the following...
We'll cover the following...
Solution
# Note: depending on your computer's speed, it might take between 5 - 10 minutes
lst = ['w','d','o','t','g','l','e','c','m']
@is_checked = {0 => false, 1 => false, 2 => false, 3 => false, 4 => false, 5 => false, 6 => false, 7 => false, 8 => false, 9 => false }
def str_to_int(a, d)
d.each do |k, v|
a = a.gsub(k,v)
end
a.to_i
end
def check_ans(letter_to_digits)
a = str_to_int('wwwdot', letter_to_digits)
b = str_to_int('google', letter_to_digits)
c = str_to_int('dotcom', letter_to_digits)
# puts "[DEBUG] Checking #{a} - #{b} = #{c}"
if a - b == c
puts "#{a} - #{b} = #{c}"
puts letter_to_digits
end
end
def find_out(letter_to_digits, lst, idx)
if idx == 9
check_ans(letter_to_digits)
return
end
(0..9).each do |i|
next if i == 0 and (lst[idx] == 'w' or lst[idx] == 'd' or lst[idx] == 'g')
unless @is_checked[i]
@is_checked[i] = true # the number is used
letter_to_digits[lst[idx]] = i.to_s
find_out(letter_to_digits, lst, idx + 1)
@is_checked[i] = false # clear
end
end
end
puts "Processing your request, it may take upto 5 minutes."
start_time = Time.now
letter_to_digits = {}
find_out(letter_to_digits, lst, 0)
puts "Time to solve: #{Time.now - start_time} seconds"
# time: 49 secondsSolving Google labs aptitude test using recursion
Explanation
Line 2–3: A list of all the unique letters used in this puzzle is created, and a hash map to keep track of the values assigned to each letter.
Lines 5–10: The
str_to_int...