-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathphonewords.rb
More file actions
43 lines (37 loc) · 806 Bytes
/
phonewords.rb
File metadata and controls
43 lines (37 loc) · 806 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
def digitToLetters(digit)
return {
'1': [],
'2': ['a', 'b', 'c'],
'3': ['d', 'e', 'f'],
'4': ['g', 'h', 'i'],
'5': ['j', 'k', 'l'],
'6': ['m', 'n', 'o'],
'7': ['p', 'q', 'r', 's'],
'8': ['t', 'u', 'v'],
'9': ['w', 'x', 'y', 'z'],
'0': []
}[digit.to_s.to_sym]
end
def digitsToLetters(digits)
digits.to_s.split('').map{|c| digitToLetters(c)}
end
digits = gets.chomp
stack = digitsToLetters(digits)
words = []
while letters = stack.shift do
if words.empty?
# first pass
words.push(*letters)
else
temporary = []
# subsequent passes
words.each do |word|
# join this word with each letter
letters.each do |letter|
temporary.push(word + letter)
end
end
words = temporary
end
end
puts words.join(', ')