From 7b23e4ab4b86b24b2ce3e46d14d032996ae1dba2 Mon Sep 17 00:00:00 2001 From: FrederikBaerentsen Date: Sat, 2 Nov 2024 18:13:20 +0100 Subject: [PATCH] Added template and 2016 --- 2015/01/1.md | 63 +++++++++++++++ 2015/01/debug-full-aoc-response.html | 111 +++++++++++++++++++++++++++ 2015/01/part1.py | 17 ++++ 2015/07/7.md | 70 +++++++++++++++++ 2016/01/1.md | 62 +++++++++++++++ 2016/01/solution.py | 84 ++++++++++++++++++++ solution.py | 24 ++++++ 7 files changed, 431 insertions(+) create mode 100644 2015/01/1.md create mode 100644 2015/01/debug-full-aoc-response.html create mode 100644 2015/01/part1.py create mode 100644 2015/07/7.md create mode 100644 2016/01/1.md create mode 100644 2016/01/solution.py create mode 100644 solution.py diff --git a/2015/01/1.md b/2015/01/1.md new file mode 100644 index 0000000..c7d53c7 --- /dev/null +++ b/2015/01/1.md @@ -0,0 +1,63 @@ +## \-\-- Day 1: Not Quite Lisp \-\-- + +Santa was hoping for a white Christmas, but his weather machine\'s +\"snow\" function is powered by stars, and he\'s fresh out! To save +Christmas, he needs you to collect *fifty stars* by December 25th. + +Collect stars by helping Santa solve puzzles. Two puzzles will be made +available on each day in the Advent calendar; the second puzzle is +unlocked when you complete the first. Each puzzle grants *one star*. +[Good +luck!]{title="Also, some puzzles contain Easter eggs like this one. Yes, I know it's not traditional to do Advent calendars for Easter."} + +Here\'s an easy puzzle to warm you up. + +Santa is trying to deliver presents in a large apartment building, but +he can\'t find the right floor - the directions he got are a little +confusing. He starts on the ground floor (floor `0`) and then follows +the instructions one character at a time. + +An opening parenthesis, `(`, means he should go up one floor, and a +closing parenthesis, `)`, means he should go down one floor. + +The apartment building is very tall, and the basement is very deep; he +will never find the top or bottom floors. + +For example: + +- `(())` and `()()` both result in floor `0`. +- `(((` and `(()(()(` both result in floor `3`. +- `))(((((` also results in floor `3`. +- `())` and `))(` both result in floor `-1` (the first basement + level). +- `)))` and `)())())` both result in floor `-3`. + +To *what floor* do the instructions take Santa? + +Your puzzle answer was `232`. + +## \-\-- Part Two \-\-- {#part2} + +Now, given the same instructions, find the *position* of the first +character that causes him to enter the basement (floor `-1`). The first +character in the instructions has position `1`, the second character has +position `2`, and so on. + +For example: + +- `)` causes him to enter the basement at character position `1`. +- `()())` causes him to enter the basement at character position `5`. + +What is the *position* of the character that causes Santa to first enter +the basement? + +Your puzzle answer was `1783`. + +Both parts of this puzzle are complete! They provide two gold stars: +\*\* + +At this point, you should [return to your Advent calendar](/2015) and +try another puzzle. + +If you still want to see it, you can [get your puzzle +input](1/input). diff --git a/2015/01/debug-full-aoc-response.html b/2015/01/debug-full-aoc-response.html new file mode 100644 index 0000000..7bc7fb7 --- /dev/null +++ b/2015/01/debug-full-aoc-response.html @@ -0,0 +1,111 @@ + + + + +Day 1 - Advent of Code 2015 + + + + + + +

Advent of Code

Frederik Baerentsen 11*

   $year=2015;

+ + + +
+

You don't seem to be solving the right level. Did you already complete it? [Return to Day 1]

+
+ + + + + + \ No newline at end of file diff --git a/2015/01/part1.py b/2015/01/part1.py new file mode 100644 index 0000000..e5375aa --- /dev/null +++ b/2015/01/part1.py @@ -0,0 +1,17 @@ +#!/bin/python3 + +import sys +from pprint import pprint + +input_f = sys.argv[1] + +result = 0 + +with open(input_f) as file: + for line in file: + for idx,i in enumerate(line): + if i == '(': + result += 1 + if i == ')': + result -= 1 +print(result) diff --git a/2015/07/7.md b/2015/07/7.md new file mode 100644 index 0000000..66d1143 --- /dev/null +++ b/2015/07/7.md @@ -0,0 +1,70 @@ +## \-\-- Day 7: Some Assembly Required \-\-- + +This year, Santa brought little Bobby Tables a set of wires and [bitwise +logic gates](https://en.wikipedia.org/wiki/Bitwise_operation)! +Unfortunately, little Bobby is a little under the recommended age range, +and he needs help [assembling the +circuit]{title="You had one of these as a kid, right?"}. + +Each wire has an identifier (some lowercase letters) and can carry a +[16-bit](https://en.wikipedia.org/wiki/16-bit) signal (a number from `0` +to `65535`). A signal is provided to each wire by a gate, another wire, +or some specific value. Each wire can only get a signal from one source, +but can provide its signal to multiple destinations. A gate provides no +signal until all of its inputs have a signal. + +The included instructions booklet describes how to connect the parts +together: `x AND y -> z` means to connect wires `x` and `y` to an AND +gate, and then connect its output to wire `z`. + +For example: + +- `123 -> x` means that the signal `123` is provided to wire `x`. +- `x AND y -> z` means that the [bitwise + AND](https://en.wikipedia.org/wiki/Bitwise_operation#AND) of wire + `x` and wire `y` is provided to wire `z`. +- `p LSHIFT 2 -> q` means that the value from wire `p` is + [left-shifted](https://en.wikipedia.org/wiki/Logical_shift) by `2` + and then provided to wire `q`. +- `NOT e -> f` means that the [bitwise + complement](https://en.wikipedia.org/wiki/Bitwise_operation#NOT) of + the value from wire `e` is provided to wire `f`. + +Other possible gates include `OR` ([bitwise +OR](https://en.wikipedia.org/wiki/Bitwise_operation#OR)) and `RSHIFT` +([right-shift](https://en.wikipedia.org/wiki/Logical_shift)). If, for +some reason, you\'d like to *emulate* the circuit instead, almost all +programming languages (for example, +[C](https://en.wikipedia.org/wiki/Bitwise_operations_in_C), +[JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators), +or [Python](https://wiki.python.org/moin/BitwiseOperators)) provide +operators for these gates. + +For example, here is a simple circuit: + + 123 -> x + 456 -> y + x AND y -> d + x OR y -> e + x LSHIFT 2 -> f + y RSHIFT 2 -> g + NOT x -> h + NOT y -> i + +After it is run, these are the signals on the wires: + + d: 72 + e: 507 + f: 492 + g: 114 + h: 65412 + i: 65079 + x: 123 + y: 456 + +In little Bobby\'s kit\'s instructions booklet (provided as your puzzle +input), what signal is ultimately provided to *wire `a`*? + +To begin, [get your puzzle input](7/input). + +Answer: diff --git a/2016/01/1.md b/2016/01/1.md new file mode 100644 index 0000000..f098f17 --- /dev/null +++ b/2016/01/1.md @@ -0,0 +1,62 @@ +## \-\-- Day 1: No Time for a Taxicab \-\-- + +Santa\'s sleigh uses a [very high-precision +clock]{title="An atomic clock is too inaccurate; he might end up in a wall!"} +to guide its movements, and the clock\'s oscillator is regulated by +stars. Unfortunately, the stars have been stolen\... by the Easter +Bunny. To save Christmas, Santa needs you to retrieve all *fifty stars* +by December 25th. + +Collect stars by solving puzzles. Two puzzles will be made available on +each day in the Advent calendar; the second puzzle is unlocked when you +complete the first. Each puzzle grants *one star*. Good luck! + +You\'re airdropped near *Easter Bunny Headquarters* in a city somewhere. +\"Near\", unfortunately, is as close as you can get - the instructions +on the Easter Bunny Recruiting Document the Elves intercepted start +here, and nobody had time to work them out further. + +The Document indicates that you should start at the given coordinates +(where you just landed) and face North. Then, follow the provided +sequence: either turn left (`L`) or right (`R`) 90 degrees, then walk +forward the given number of blocks, ending at a new intersection. + +There\'s no time to follow such ridiculous instructions on foot, though, +so you take a moment and work out the destination. Given that you can +only walk on the [street grid of the +city](https://en.wikipedia.org/wiki/Taxicab_geometry), how far is the +shortest path to the destination? + +For example: + +- Following `R2, L3` leaves you `2` blocks East and `3` blocks North, + or `5` blocks away. +- `R2, R2, R2` leaves you `2` blocks due South of your starting + position, which is `2` blocks away. +- `R5, L5, R5, R3` leaves you `12` blocks away. + +*How many blocks away* is Easter Bunny HQ? + +Your puzzle answer was `236`. + +## \-\-- Part Two \-\-- {#part2} + +Then, you notice the instructions continue on the back of the Recruiting +Document. Easter Bunny HQ is actually at the first location you visit +twice. + +For example, if your instructions are `R8, R4, R4, R8`, the first +location you visit twice is `4` blocks away, due East. + +How many blocks away is the *first location you visit twice*? + +Your puzzle answer was `182`. + +Both parts of this puzzle are complete! They provide two gold stars: +\*\* + +At this point, you should [return to your Advent calendar](/2016) and +try another puzzle. + +If you still want to see it, you can [get your puzzle +input](1/input). diff --git a/2016/01/solution.py b/2016/01/solution.py new file mode 100644 index 0000000..2ac6a3b --- /dev/null +++ b/2016/01/solution.py @@ -0,0 +1,84 @@ +#!/bin/python3 +import sys +from pprint import pprint + +# Read instructions from file +with open("input", "r") as file: + instructions = file.read().strip().split(", ") + + +######################################### +# # +# Part 1 # +# # +######################################### + +# Define directions and movements in terms of (x, y) vectors +directions = [(0, 1), (1, 0), (0, -1), (-1, 0)] # North, East, South, West + +# Starting position and direction +x, y = 0, 0 +current_direction = 0 # Start facing North (index 0 in directions) + +# Process each instruction +for instruction in instructions: + turn, steps = instruction[0], int(instruction[1:]) + + # Update direction based on the turn + if turn == 'R': + current_direction = (current_direction + 1) % 4 # Turn right + elif turn == 'L': + current_direction = (current_direction - 1) % 4 # Turn left + + # Move in the current direction + dx, dy = directions[current_direction] + x += dx * steps + y += dy * steps + +# Calculate Manhattan distance from the origin +distance = abs(x) + abs(y) +print(distance) + + +######################################### +# # +# Part 2 # +# # +######################################### + + +# Define directions and movements in terms of (x, y) vectors +directions = [(0, 1), (1, 0), (0, -1), (-1, 0)] # North, East, South, West + +# Starting position and direction +x, y = 0, 0 +current_direction = 0 # Start facing North (index 0 in directions) +visited = set() # To track visited positions +visited.add((x, y)) # Starting point is visited + +# Read instructions from file +with open("input", "r") as file: + instructions = file.read().strip().split(", ") + +# Process each instruction +for instruction in instructions: + turn, steps = instruction[0], int(instruction[1:]) + + # Update direction based on the turn + if turn == 'R': + current_direction = (current_direction + 1) % 4 # Turn right + elif turn == 'L': + current_direction = (current_direction - 1) % 4 # Turn left + + # Move step by step in the current direction + dx, dy = directions[current_direction] + for _ in range(steps): + x += dx + y += dy + if (x, y) in visited: + # Found the first location visited twice + distance = abs(x) + abs(y) + print(distance) + exit() + visited.add((x, y)) + diff --git a/solution.py b/solution.py new file mode 100644 index 0000000..cb3908c --- /dev/null +++ b/solution.py @@ -0,0 +1,24 @@ +#!/bin/python3 +import sys +from pprint import pprint + +input_f = "input" #sys.argv[1] + +with open(input_f) as file: + for line in file: + + +######################################### +# # +# Part 1 # +# # +######################################### + + + + +######################################### +# # +# Part 2 # +# # +#########################################