Last active
December 4, 2023 22:15
-
-
Save SimonHauguel/d7c4f8e8d632afe2676cff2f65bed355 to your computer and use it in GitHub Desktop.
Advent Of Code 2023 as a single expression
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
_ = (lambda sys, functools, operator:(lambda parse_file:(lambda *all_solutions: [print(f"\n\nDAY{i+1} PART1 : {s(parse_file(i+1))[0]()}\nDAY{i+1} PART2 : {s(parse_file(i+1))[1]()}") for i, s in enumerate(all_solutions)] if ("all" in sys.argv) else (lambda i: print(f"\n\nDAY{i} PART2 : {all_solutions[i-1](parse_file(i))[0]()}\nDAY{i} PART1 : {all_solutions[i-1](parse_file(i))[1]()}"))(int(sys.argv[-1])))(lambda parsed_input:(lambda: functools.reduce(lambda acc, v: int(v[0] + v[-1]) + acc, map(lambda s: "".join(filter(str.isdigit, s)), parsed_input), 0), lambda: (lambda map_parse: functools.reduce(lambda acc, v: (lambda parsed_res: int(parsed_res[0] + parsed_res[-1]) + acc)(functools.reduce(lambda acc, v: ("", "", "", acc[3] + v) if v.isdigit() else(v, v, v, acc[3] + map_parse[(acc[0]+v)[-3:]]) if (acc[0]+v)[-3:] in map_parse else(v, v, v, acc[3] + map_parse[(acc[1]+v)[-4:]]) if (acc[1]+v)[-4:] in map_parse else(v, v, v, acc[3] + map_parse[(acc[2]+v)[-5:]]) if (acc[2]+v)[-5:] in map_parse else((acc[0]+v)[-3:], (acc[1]+v)[-4:], (acc[2]+v)[-5:], acc[3]), v, ("", "", "", ""))[3]),parsed_input,0))({"one": "1", "two": "2", "three" : "3", "four": "4", "five": "5", "six": "6", "seven" : "7", "eight" : "8", "nine": "9"})),lambda parsed_input:(lambda: sum(i+1 if k==0 else 0 for i, k in enumerate(sum(sum((lambda number: (lambda color: (0 if color == "red" and number <= 12 or color == "green" and number <= 13 or color == "blue" and number <= 14 else 1))(e[number//10+1:]))(int("".join(filter(str.isdigit, e)))) for e in s1.split(",")) for s1 in "".join(filter(lambda x: x!=" ", s.lstrip("Game 0123456789")[2:])).split(";")) for s in parsed_input)),lambda: sum(map(lambda x: functools.reduce(operator.mul, x), (functools.reduce(lambda acc, v: tuple(map(max, zip(acc, v))),(functools.reduce(lambda acc, v:(max(acc[0], v[1]), acc[1], acc[2]) if v[0] == "red" else(acc[0], max(acc[1], v[1]), acc[2]) if v[0] == "green" else(acc[0], acc[1], max(acc[2], v[1])) if v[0] == "blue" else (0, 0, 0),((lambda number: ((lambda color: (color, int(number))))(e[len(number):]))("".join(filter(str.isdigit, e))) for e in s1.split(",")),(0, 0, 0)) for s1 in "".join(filter(lambda x: x!=" ", s.lstrip("Game 0123456789")[2:])).split(";")),(0, 0, 0)) for s in parsed_input)))),lambda parsed_input: (lambda: (lambda inp:(lambda find_all_adjacent, find_all_pos_number: (functools.reduce(lambda acc, v:(lambda value, x1, x2, y: (lambda all_index:acc + functools.reduce(lambda acc, v:acc+int(value) if inp[v[1]][v[0]] not in ".0123456789" else acc,all_index,0))(find_all_adjacent(len(inp)-1, len(inp[0])-1, x1, x2, y)))(v[0], v[1], v[2], v[3]),find_all_pos_number(inp),0)))(lambda w, h, x1, x2, y: list(filter(lambda pos: 0 <= pos[0] <= w and 0 <= pos[1] <= h, [(nx, y-1) for nx in range(x1-1, x2+2)] + [(nx, y+1) for nx in range(x1-1, x2+2)] + [(x1-1, y), (x2+1, y)])), lambda mat:filter(lambda x: x[0], functools.reduce(lambda res, v:(res + (lambda i, line:functools.reduce(lambda acc, v, i=i: acc[:-1] + [(acc[-1][0]+v[1], v[0], 0, 0)] if v[1].isdigit() and acc[-1][1]==None else acc[:-1] + [(acc[-1][0]+v[1], acc[-1][1], 0, 0)] if v[1].isdigit() and acc[-1][1]!=None else acc[:-1] + [(acc[-1][0], acc[-1][1], v[0]-1, i)] + [("", None, 0, 0)] if acc[-1][0] else acc,enumerate(line),[("", None, 0, 0)]))(v[0], v[1])),enumerate(mat),[]))))((lambda val: [x+"." for x in val + ["." * len(val[0])]])(list(parsed_input))), lambda: "TODO"),lambda parsed_input: (lambda: sum((((lambda x:functools.reduce(lambda acc, v: max(acc * 2, 1) if v in x[1] else acc,x[0],0))([[int(x2) for x2 in x.strip().split()] for x in v.lstrip("Card 0123456789")[2:].split("|")])) for _, v in enumerate(parsed_input))), lambda: (lambda matches: sum(functools.reduce(lambda acc, v:(lambda i, n: [x+acc[i] if i2 in range(i+1, i+n+1) else x for (i2, x) in enumerate(acc)])(v[0], v[1]), enumerate(matches), [1] * len(matches))))([sum(v in y for v in x) for x, y in [[[int(x2) for x2 in x.strip().split()] for x in v.lstrip("Card 0123456789")[2:].split("|")] for v in parsed_input]]))))(lambda n: (s.strip() for s in open(f"input{n}.txt", "r").readlines())))(__import__("sys"),__import__("functools"),__import__("operator")) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
_ = (lambda sys, functools, operator: # Import | |
(lambda parse_file: # Utils | |
(lambda *all_solutions: # All solutions | |
[print(f"\n\nDAY{i+1} PART1 : {s(parse_file(i+1))[0]()}\nDAY{i+1} PART2 : {s(parse_file(i+1))[1]()}") for i, s in enumerate(all_solutions)] if ("all" in sys.argv) else | |
(lambda i: print(f"\n\nDAY{i} PART2 : {all_solutions[i-1](parse_file(i))[0]()}\nDAY{i} PART1 : {all_solutions[i-1](parse_file(i))[1]()}"))(int(sys.argv[-1])) | |
)( | |
# Day 1 | |
lambda parsed_input:( | |
# Part 1 | |
lambda: functools.reduce(lambda acc, v: int(v[0] + v[-1]) + acc, map(lambda s: "".join(filter(str.isdigit, s)), parsed_input), 0), | |
#Part 2 | |
lambda: (lambda map_parse: functools.reduce(lambda acc, v: (lambda parsed_res: int(parsed_res[0] + parsed_res[-1]) + acc)(functools.reduce(lambda acc, v: ("", "", "", acc[3] + v) if v.isdigit() else(v, v, v, acc[3] + map_parse[(acc[0]+v)[-3:]]) if (acc[0]+v)[-3:] in map_parse else(v, v, v, acc[3] + map_parse[(acc[1]+v)[-4:]]) if (acc[1]+v)[-4:] in map_parse else(v, v, v, acc[3] + map_parse[(acc[2]+v)[-5:]]) if (acc[2]+v)[-5:] in map_parse else((acc[0]+v)[-3:], (acc[1]+v)[-4:], (acc[2]+v)[-5:], acc[3]), v, ("", "", "", ""))[3]),parsed_input,0))({"one": "1", "two": "2", "three" : "3", "four": "4", "five": "5", "six": "6", "seven" : "7", "eight" : "8", "nine": "9"}) | |
), | |
# Day 2 | |
lambda parsed_input:( | |
#Part 1 | |
lambda: sum(i+1 if k==0 else 0 for i, k in enumerate(sum(sum((lambda number: (lambda color: (0 if color == "red" and number <= 12 or color == "green" and number <= 13 or color == "blue" and number <= 14 else 1))(e[number//10+1:]))(int("".join(filter(str.isdigit, e)))) for e in s1.split(",")) for s1 in "".join(filter(lambda x: x!=" ", s.lstrip("Game 0123456789")[2:])).split(";")) for s in parsed_input)), | |
# Part 2 | |
lambda: sum(map(lambda x: functools.reduce(operator.mul, x), (functools.reduce(lambda acc, v: tuple(map(max, zip(acc, v))),(functools.reduce(lambda acc, v:(max(acc[0], v[1]), acc[1], acc[2]) if v[0] == "red" else(acc[0], max(acc[1], v[1]), acc[2]) if v[0] == "green" else(acc[0], acc[1], max(acc[2], v[1])) if v[0] == "blue" else (0, 0, 0),((lambda number: ((lambda color: (color, int(number))))(e[len(number):]))("".join(filter(str.isdigit, e))) for e in s1.split(",")),(0, 0, 0)) for s1 in "".join(filter(lambda x: x!=" ", s.lstrip("Game 0123456789")[2:])).split(";")),(0, 0, 0)) for s in parsed_input))) | |
), | |
# Day 3 | |
lambda parsed_input: ( | |
# Part 1 | |
lambda: (lambda inp:(lambda find_all_adjacent, find_all_pos_number: (functools.reduce(lambda acc, v:(lambda value, x1, x2, y: (lambda all_index:acc + functools.reduce(lambda acc, v:acc+int(value) if inp[v[1]][v[0]] not in ".0123456789" else acc,all_index,0))(find_all_adjacent(len(inp)-1, len(inp[0])-1, x1, x2, y)))(v[0], v[1], v[2], v[3]),find_all_pos_number(inp),0)))(lambda w, h, x1, x2, y: list(filter(lambda pos: 0 <= pos[0] <= w and 0 <= pos[1] <= h, [(nx, y-1) for nx in range(x1-1, x2+2)] + [(nx, y+1) for nx in range(x1-1, x2+2)] + [(x1-1, y), (x2+1, y)])), lambda mat:filter(lambda x: x[0], functools.reduce(lambda res, v:(res + (lambda i, line:functools.reduce(lambda acc, v, i=i: acc[:-1] + [(acc[-1][0]+v[1], v[0], 0, 0)] if v[1].isdigit() and acc[-1][1]==None else acc[:-1] + [(acc[-1][0]+v[1], acc[-1][1], 0, 0)] if v[1].isdigit() and acc[-1][1]!=None else acc[:-1] + [(acc[-1][0], acc[-1][1], v[0]-1, i)] + [("", None, 0, 0)] if acc[-1][0] else acc,enumerate(line),[("", None, 0, 0)]))(v[0], v[1])),enumerate(mat),[]))))((lambda val: [x+"." for x in val + ["." * len(val[0])]])(list(parsed_input))), | |
# Part 2 | |
lambda: "TODO" | |
), | |
# Day 4 | |
lambda parsed_input: ( | |
# Part 1 | |
lambda: sum((((lambda x:functools.reduce(lambda acc, v: max(acc * 2, 1) if v in x[1] else acc,x[0],0))([[int(x2) for x2 in x.strip().split()] for x in v.lstrip("Card 0123456789")[2:].split("|")])) for _, v in enumerate(parsed_input))), | |
# Part 2 | |
lambda: (lambda matches: sum(functools.reduce(lambda acc, v:(lambda i, n: [x+acc[i] if i2 in range(i+1, i+n+1) else x for (i2, x) in enumerate(acc)])(v[0], v[1]), enumerate(matches), [1] * len(matches))))([sum(v in y for v in x) for x, y in [[[int(x2) for x2 in x.strip().split()] for x in v.lstrip("Card 0123456789")[2:].split("|")] for v in parsed_input]]) | |
) | |
) | |
)( # Utils | |
lambda n: (s.strip() for s in open(f"input{n}.txt", "r").readlines()) | |
) | |
)( # import list | |
__import__("sys"), | |
__import__("functools"), | |
__import__("operator") | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment