My Advent of Code solutions in Python. kevinyap.ca/2019/12/going-fast-in-advent-of-code/
advent-of-code python
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add solution for 2016/02

+60
+55
2016/day02.py
··· 1 + import fileinput 2 + 3 + KEYPAD_1 = [ 4 + ['1', '2', '3'], 5 + ['4', '5', '6'], 6 + ['7', '8', '9'], 7 + ] 8 + 9 + KEYPAD_2 = [ 10 + [None, None, '1', None, None], 11 + [None, '2', '3', '4', None], 12 + ['5', '6', '7', '8', '9'], 13 + [None, 'A', 'B', 'C', None], 14 + [None, None, 'D', None, None], 15 + ] 16 + 17 + DIRS = { 18 + 'U': lambda (x, y), keypad: move(x, y, keypad, 0, -1), 19 + 'D': lambda (x, y), keypad: move(x, y, keypad, 0, 1), 20 + 'L': lambda (x, y), keypad: move(x, y, keypad, -1, 0), 21 + 'R': lambda (x, y), keypad: move(x, y, keypad, 1, 0), 22 + } 23 + 24 + 25 + def move(x, y, keypad, d_x, d_y): 26 + """Returns the (x, y) coordinate after (possibly) moving""" 27 + new_x = x + d_x 28 + new_y = y + d_y 29 + 30 + if new_x < 0 or new_x >= len(keypad[0]): 31 + return (x, y) 32 + elif new_y < 0 or new_y >= len(keypad): 33 + return (x, y) 34 + elif keypad[y + d_y][x + d_x] is None: 35 + return (x, y) 36 + else: 37 + return (x + d_x, y + d_y) 38 + 39 + 40 + pos_1 = (1, 1) # start in middle 41 + pos_2 = (0, 2) # start in middle-left 42 + 43 + code_1 = '' 44 + code_2 = '' 45 + 46 + for i, line in enumerate(fileinput.input()): 47 + for c in line.strip(): 48 + pos_1 = DIRS[c](pos_1, KEYPAD_1) 49 + pos_2 = DIRS[c](pos_2, KEYPAD_2) 50 + 51 + code_1 += KEYPAD_1[pos_1[1]][pos_1[0]] 52 + code_2 += KEYPAD_2[pos_2[1]][pos_2[0]] 53 + 54 + print "Theoretical bathroom code: {}".format(code_1) 55 + print "Actual bathroom code: {}".format(code_2)
+5
2016/input02.txt
··· 1 + DUURRDRRURUUUDLRUDDLLLURULRRLDULDRDUULULLUUUDRDUDDURRULDRDDDUDDURLDLLDDRRURRUUUDDRUDDLLDDDURLRDDDULRDUDDRDRLRDUULDLDRDLUDDDLRDRLDLUUUDLRDLRUUUDDLUURRLLLUUUUDDLDRRDRDRLDRLUUDUDLDRUDDUDLLUUURUUDLULRDRULURURDLDLLDLLDUDLDRDULLDUDDURRDDLLRLLLLDLDRLDDUULRDRURUDRRRDDDUULRULDDLRLLLLRLLLLRLURRRLRLRDLULRRLDRULDRRLRURDDLDDRLRDLDRLULLRRUDUURRULLLRLRLRRUDLRDDLLRRUDUDUURRRDRDLDRUDLDRDLUUULDLRLLDRULRULLRLRDRRLRLULLRURUULRLLRRRDRLULUDDUUULDULDUDDDUDLRLLRDRDLUDLRLRRDDDURUUUDULDLDDLDRDDDLURLDRLDURUDRURDDDDDDULLDLDLU 2 + LURLRUURDDLDDDLDDLULRLUUUDRDUUDDUDLDLDDLLUDURDRDRULULLRLDDUDRRDRUDLRLDDDURDUURLUURRLLDRURDRLDURUDLRLLDDLLRDRRLURLRRUULLLDRLULURULRRDLLLDLDLRDRRURUUUDUDRUULDLUDLURLRDRRLDRUDRUDURLDLDDRUULDURDUURLLUDRUUUUUURRLRULUDRDUDRLLDUDUDUULURUURURULLUUURDRLDDRLUURDLRULDRRRRLRULRDLURRUULURDRRLDLRUURUDRRRDRURRLDDURLUDLDRRLDRLLLLRDUDLULUDRLLLDULUDUULLULLRLURURURDRRDRUURDULRDDLRULLLLLLDLLURLRLLRDLLRLUDLRUDDRLLLDDUDRLDLRLDUDU 3 + RRDDLDLRRUULRDLLURLRURDLUURLLLUUDDULLDRURDUDRLRDRDDUUUULDLUDDLRDULDDRDDDDDLRRDDDRUULDLUDUDRRLUUDDRUDLUUDUDLUDURDURDLLLLDUUUUURUUURDURUUUUDDURULLDDLDLDLULUDRULULULLLDRLRRLLDLURULRDLULRLDRRLDDLULDDRDDRURLDLUULULRDRDRDRRLLLURLLDUUUDRRUUURDLLLRUUDDDULRDRRUUDDUUUDLRRURUDDLUDDDUDLRUDRRDLLLURRRURDRLLULDUULLURRULDLURRUURURRLRDULRLULUDUULRRULLLDDDDURLRRRDUDULLRRDURUURUUULUDLDULLUURDRDRRDURDLUDLULRULRLLURULDRUURRRRDUDULLLLLRRLRUDDUDLLURLRDDLLDLLLDDUDDDDRDURRL 4 + LLRURUDUULRURRUDURRDLUUUDDDDURUUDLLDLRULRUUDUURRLRRUDLLUDLDURURRDDLLRUDDUDLDUUDDLUUULUUURRURDDLUDDLULRRRUURLDLURDULULRULRLDUDLLLLDLLLLRLDLRLDLUULLDDLDRRRURDDRRDURUURLRLRDUDLLURRLDUULDRURDRRURDDDDUUUDDRDLLDDUDURDLUUDRLRDUDLLDDDDDRRDRDUULDDLLDLRUDULLRRLLDUDRRLRURRRRLRDUDDRRDDUUUDLULLRRRDDRUUUDUUURUULUDURUDLDRDRLDLRLLRLRDRDRULRURLDDULRURLRLDUURLDDLUDRLRUDDURLUDLLULDLDDULDUDDDUDRLRDRUUURDUULLDULUUULLLDLRULDULUDLRRURDLULUDUDLDDRDRUUULDLRURLRUURDLULUDLULLRD 5 + UURUDRRDDLRRRLULLDDDRRLDUDLRRULUUDULLDUDURRDLDRRRDLRDUUUDRDRRLLDULRLUDUUULRULULRUDURDRDDLDRULULULLDURULDRUDDDURLLDUDUUUULRUULURDDDUUUURDLDUUURUDDLDRDLLUDDDDULRDLRUDRLRUDDURDLDRLLLLRLULRDDUDLLDRURDDUDRRLRRDLDDUDRRLDLUURLRLLRRRDRLRLLLLLLURULUURRDDRRLRLRUURDLULRUUDRRRLRLRULLLLUDRULLRDDRDDLDLDRRRURLURDDURRLUDDULRRDULRURRRURLUURDDDUDLDUURRRLUDUULULURLRDDRULDLRLLUULRLLRLUUURUUDUURULRRRUULUULRULDDURLDRRULLRDURRDDDLLUDLDRRRRUULDDD