#!env python import aoc def revcaptcha(rotate, seed): return sum( int(digit) for i, digit in enumerate(seed) if seed[(i + rotate) % len(seed)] == digit) if __name__ == '__main__': puzzle_input = "".join(aoc.input_lines(day=1)) rotate1 = 1 rotate2 = len(puzzle_input) // 2 print(revcaptcha(rotate1, puzzle_input)) print(revcaptcha(rotate2, puzzle_input))
count -= 1 return tuple(banks) def solve1(row): seen = set() count = 0 while row not in seen: seen.add(row) count += 1 row = iterate(row) return count def solve2(row): seen = set() record = list() count = 0 while row not in seen: seen.add(row) record.append(row) count += 1 row = iterate(row) return count - record.index(row) if __name__ == '__main__': rows = [(0, 2, 7, 0)] rows = [tuple(int(bank) for bank in row.split()) for row in aoc.input_lines(day=6)] row = rows[0] print(solve1(row)) print(solve2(row))
current = 0 returns = [None, None] while 1: try: returns[current] = next(programs[current]) except StopIteration: return returns current = (current + 1) % 2 lines = [ 'set a 1', 'add a 2', 'mul a a', 'mod a 5', 'snd a', 'set a 0', 'rcv a', 'jgz a -1', 'set a 1', 'jgz a -2', ] if __name__ == '__main__': lines = aoc.input_lines(day=18) data = parse_data(lines) pprint.pprint(solve1(data)) pprint.pprint(solve2(data))
oldjump = jumps[offset] except IndexError: return steps steps += 1 jumps[offset] += 1 offset += oldjump def solve2(rows): steps = 0 offset = 0 jumps = list(rows) while 1: try: oldjump = jumps[offset] except IndexError: return steps steps += 1 if oldjump >= 3: jumps[offset] -= 1 else: jumps[offset] += 1 offset += oldjump if __name__ == '__main__': rows = tuple([0, 3, 0, 1, -3]) rows = tuple([int(row) for row in aoc.input_lines(day=5)]) print(solve1(rows)) print(solve2(rows))
wordset = set() for word in phrase.split(' '): if word in wordset: return False for scramble in itertools.permutations(word): wordset.add("".join(scramble)) return True def solve2(rows): count = 0 for row in rows: if valid2(row): count += 1 return count def solve2alt(rows): count = 0 for row in rows: words = ["".join(sorted(word)) for word in row.split(' ')] if len(words) == len(set(words)): count += 1 return count if __name__ == '__main__': rows = [row for row in aoc.input_lines(day=4)] print(solve1(rows)) print(solve2alt(rows))
count = len(particles) deltacount = 0 for t in itertools.count(): positions = [pos_at_tick(t, p) for p in particles] for p in set(positions): if positions.count(p) > 1: while p in positions: i = positions.index(p) del positions[i] del particles[i] if count != len(particles): count = len(particles) deltacount = 0 else: deltacount += 1 print("time:", t, "time since change:", deltacount, "num particles:", len(particles)) if deltacount >= 1000: return len(particles) lines = [ 'p=<3,0,0>, v=<2,0,0>, a=<-1,0,0>', 'p=<4,0,0>, v=<0,0,0>, a=<-2,0,0>' ] if __name__ == '__main__': lines = aoc.input_lines(day=20) data = parse_data(lines) pprint.pprint(solve1(data)) pprint.pprint(solve2(data))
import itertools import aoc def checksum(row): return max(row) - min(row) def solve1(rows): return sum(checksum(row) for row in rows) def checksum2(row): for a, b in itertools.combinations(row, 2): if a % b == 0: return a // b if b % a == 0: return b // a def solve2(rows): return sum(checksum2(row) for row in rows) if __name__ == '__main__': rows = [[int(col) for col in row.split('\t')] for row in aoc.input_lines(day=2)] print(solve1(rows)) print(solve2(rows))
y = y - 1 elif direction == 'W': x = x + 1 elif direction == 'E': x = x - 1 current = char_at(data, x, y) stepcount += 1 return "".join(path), stepcount def solve2(data): pass lines = [ " | ", " | +--+ ", " A | C ", " F---|----E|--+ ", " | | | D ", " +B-+ +--+ ", " ", ] if __name__ == '__main__': lines = aoc.input_lines(day=19, strip=False) data = parse_data(lines) pprint.pprint(solve1(data)) pprint.pprint(solve2(data))