def adjacent_combinations(matrix, arity): h_tuples = [[row[i:i + arity] for i, item in enumerate(row[arity - 1:])] for row in matrix] v_tuples = [[row[i:i + arity] for i, item in enumerate(row[arity - 1:])] for row in map(list, zip(*matrix)) ] # recall that zip* creates tuple and not list # ul_lr_tuples = [[[matrix[i][j], matrix[i+1][j+1], matrix[i+2][j+2], matrix[i+3][j+3]] for j,item in enumerate(row[3:])] for i,row in enumerate(matrix[3:])] ul_lr_tuples = [[matrix[i + k][j + k] for k in range(arity)] for j, item in enumerate(row[arity - 1:]) for i, row in enumerate(matrix[arity - 1:])] # ur_ll_tuples = [[[num_matrix[i+3][j], num_matrix[i+2][j+1], num_matrix[i+1][j+2], num_matrix[i][j+3]] for j,item in enumerate(row[3:]) for i,row in enumerate(num_matrix[3:])] ur_ll_tuples = [[matrix[(arity - k - 1) + i][j + k] for k in range(arity)] for j, item in enumerate(row[arity - 1:]) for i, row in enumerate(matrix[arity - 1:])] return concat(h_tuples + v_tuples) + ul_lr_tuples + ur_ll_tuples
""" Using Problem 13 Data Work out the first ten digits of the sum of the following one-hundred 50-digit numbers. """ from math_library import concat, product from io_library import read_data if __name__ == "__main__": data = read_data('Problem_13_data.txt') strings = concat(data) nums = map(int, strings) sum_ints = reduce(lambda x, y: x + y, nums) str_num = str(sum_ints) print str_num[0:10]
def add_word_numbers2(num): numbers = [i for i in xrange(num + 1)] num_string = concat(map(number_to_word, numbers)) return num_string
Find the thirteen adjacent digits in the 1000-digit number that have the greatest product. What is the value of this product? """ from math_library import concat, product from io_library import read_data def n_adjacent_nums(n, lst): """ > n_adjacent_nums(2, [1,2,3,4,5]) """ # return [[lst[i],lst[i+1]] for i,item in enumerate(lst[n-1:])] return [[lst[i+k] for k in range(n)] for i,item in enumerate(lst[n-1:])] if __name__ == "__main__": data = read_data("Problem_8_Data.txt") strings = concat(data) entire_string = concat(strings) nums = map(int, entire_string) thirteen_ples = n_adjacent_nums(13, nums) # products = map(product,thirteen_ples) # max_product = max(products) max_product = max(product(t) for t in thirteen_ples) print max_product
def add_word_numbers(num): num_string = concat([number_to_word(i) for i in xrange(num + 1)]) return concat([number_to_word(i) for i in xrange(num + 1)])