def caesar_generator(num, op): """Returns a one-argument Caesar cipher function. The function should "rotate" a letter by an integer amount 'num' using an operation 'op' (either add or sub). You may use the provided `letter_to_num` and `num_to_letter` functions, which will map all lowercase letters a-z to 0-25 and all uppercase letters A-Z to 26-51. >>> letter_to_num('a') 0 >>> letter_to_num('c') 2 >>> num_to_letter(3) 'd' >>> caesar2 = caesar_generator(2, add) >>> caesar2('a') 'c' >>> brutus3 = caesar_generator(3, sub) >>> brutus3('d') 'a' """ "*** YOUR CODE HERE ***" return lambda x: num_to_letter(op(letter_to_num(x), num))
def __init__(self, start_values, word_list, alphabet=lowercase_letters): self.solution = np.empty_like(start_values) self.word_list = word_list h, w = start_values.shape self.start_letters = set() self.tiles = np.ones((h, w, len(lowercase_letters))) for (y, x), letter in np.ndenumerate(start_values): if letter: i = letter_to_num(letter) self.solve_tile(x, y, i) self.start_letters.add((x, y, i))
def test_letter_to_num(): assert utils.letter_to_num('b') == 1 # test that a numerical input will raise an error with pytest.raises(TypeError): utils.letter_to_num(6)
def caesar(x): return num_to_letter(op(letter_to_num(x), num))
def inner(letter): return num_to_letter(op(letter_to_num(letter), num))