Skip to content

Instantly share code, notes, and snippets.

@SimonHauguel
Last active December 4, 2023 22:15
Show Gist options
  • Save SimonHauguel/d7c4f8e8d632afe2676cff2f65bed355 to your computer and use it in GitHub Desktop.
Save SimonHauguel/d7c4f8e8d632afe2676cff2f65bed355 to your computer and use it in GitHub Desktop.
Advent Of Code 2023 as a single expression
_ = (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"))
_ = (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