Skip to content

Instantly share code, notes, and snippets.

@sfcgeorge
Created September 7, 2017 20:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sfcgeorge/99b72d196c7ae3337b9f78dddf359459 to your computer and use it in GitHub Desktop.
Save sfcgeorge/99b72d196c7ae3337b9f78dddf359459 to your computer and use it in GitHub Desktop.
Telephone Words
require "pp"
MAPPING = {
1 => [],
2 => %w(A B C),
3 => %w(D E F),
4 => %w(G H I),
5 => %w(J K L),
6 => %w(M N O),
7 => %w(P Q R S),
8 => %w(T U V),
9 => %w(W X Y Z),
0 => []
}.freeze
def telephoneWords(numbers)
options = numbers.map { |n| MAPPING[n].clone }
@results = []
next_letter("", options.shift, options)
puts @results
end
def next_letter(word, letters, rest)
if rest.empty?
letters.each { |l| @results << word + l }
letters
else
letters.each do |l|
r = rest.clone
next_letter(word + l, r.shift, r)
end
end
end
def telephoneWords(numbers)
options = numbers.map { |n| MAPPING[n].clone }
nested_letters = next_letter(options.clone)
pp nested_letters
end
def next_letter(rest)
if rest.size == 1
rest
else
r = rest.clone[1..-1]
letters = Array(next_letter(r))
rest.first.map do |l|
[l] << letters
end
end
end
# [["D",
# [["M", [["G", "H", "I"]]],
# ["N", [["G", "H", "I"]]],
# ["O", [["G", "H", "I"]]]]],
# ["E",
# [["M", [["G", "H", "I"]]],
# ["N", [["G", "H", "I"]]],
# ["O", [["G", "H", "I"]]]]],
# ["F",
# [["M", [["G", "H", "I"]]],
# ["N", [["G", "H", "I"]]],
# ["O", [["G", "H", "I"]]]]]]
def telephoneWords(numbers)
options = numbers.map { |n| MAPPING[n].clone }
puts next_letter("", options).flatten
end
def next_letter(path, rest)
if rest.size == 1
rest.flatten.map { |l| path + l }
else
rest.first.map do |l|
r = rest.clone[1..-1]
next_letter(path + l, r)
end
end
end
telephoneWords([3, 6, 4])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment