def problem_11(): """ What is the greatest product of four adjacent numbers in any direction (up, down, left, right, or diagonally) in the given 20x20 grid? """ numbers = elib.load_numbers('data/15.txt', split=True) size = int(math.sqrt(len(numbers))) seq_len = 4 max = 0 direction = { 'up': (lambda x: x > size, -size), 'down': (lambda x: x < size**2 - size, -size), 'left': (lambda x: x % size != 0, -1), 'right': (lambda x: x % size != size - 1, +1), 'diag_right': (lambda x: x < size**2 - size and x % size != size - 1, size + 1), 'diag_left': (lambda x: x < size**2 - size and x % size != 0, size - 1) } for i in xrange(len(numbers)): for d in direction.values(): pos = i act = numbers[pos] # ids = [i] for j in xrange(seq_len - 1): if not d[0](pos): break pos += d[1] act *= numbers[pos] if act > max: max = act return max
def problem_13(): """ Work out the first ten digits of the sum of the following one-hundred 50-digit numbers. """ numbers = elib.load_numbers('data/14.txt', split=True) total = sum(numbers) return str(total)[:10]