bornhack-website/src/phonebook/dectutils.py

56 lines
1.7 KiB
Python

import logging
logger = logging.getLogger("bornhack.%s" % __name__)
class DectUtils:
"""
This class contains dect number <> letter related utilities
"""
DECT_MATRIX = {
"0": ["0"],
"1": ["1"],
"2": ["2", "A", "B", "C"],
"3": ["3", "D", "E", "F"],
"4": ["4", "G", "H", "I"],
"5": ["5", "J", "K", "L"],
"6": ["6", "M", "N", "O"],
"7": ["7", "P", "Q", "R", "S"],
"8": ["8", "T", "U", "V"],
"9": ["9", "W", "X", "Y", "Z"],
}
def __init__(self):
"""
Build a reverse lookup matrix based on self.DECT_MATRIX
"""
self.REVERSE_DECT_MATRIX = {}
for digit in self.DECT_MATRIX.keys():
for letter in self.DECT_MATRIX[digit]:
self.REVERSE_DECT_MATRIX[letter] = digit
def get_dect_letter_combinations(self, numbers):
"""
Generator to recursively get all combinations of letters for this number
"""
# loop over the possible letters for the first digit
for letter in self.DECT_MATRIX[numbers[0]]:
# if we have more digits..
if len(numbers) > 1:
# call recursively with the remaining digits, and loop over the result
for nextletter in self.get_dect_letter_combinations(numbers[1:]):
yield letter + nextletter
else:
# no more digits left, just yield the current letter
yield letter
def letters_to_number(self, letters):
"""
Coverts "TYKL" to "8955"
"""
result = ""
for letter in letters:
result += self.REVERSE_DECT_MATRIX[letter.upper()]
return result