Initial commit

This commit is contained in:
yxzzy-wtf
2023-12-01 15:13:45 +02:00
committed by GitHub
commit a474acea1e
9 changed files with 779 additions and 0 deletions

77
README.md Normal file
View File

@@ -0,0 +1,77 @@
# Advent of Code in Go
A handy template repository to hold your [Advent of Code](https://adventofcode.com) solutions in Go (golang).
Advent of Code (https://adventofcode.com) is a yearly series of programming questions based on the [Advent Calendar](https://en.wikipedia.org/wiki/Advent_calendar). For each day leading up to christmas, there is one question released, and from the second it is released, there is a timer running and a leaderboard showing who solved it first.
---
### Features
* A directory per question `<year>/<day>`
* Auto-download questions into `<year>/<day>/README.md`
* Auto-download example input into `<year>/<day>/input-example.txt`
* With env variable `AOC_SESSION` set:
* Auto-download part 2 of questions into `<year>/<day>/README.md`
* Auto-download user input into `<year>/<day>/input-user.md`
* When you save `code.go`, it will execute your `run` function 4 times:
* Input `input-example.txt` and `part2=false`
* Input `input-example.txt` and `part2=true`
* Input `input-user.txt` and `part2=false`
* Input `input-user.txt` and `part2=true`
* and, will show the results and timing of each
---
### Usage
1. Click "**Use this template**" above to fork it into your account
1. Setup repo, either locally or in codespaces
* Locally
* Install Go from https://go.dev/dl/ or from brew, etc
* Git clone your fork
* Open in VS Code, and install the Go extension
* Codespaces
* Click "Open in Codespaces"
1. Open a terminal and `./run.sh <year> <day>` like this:
```sh
$ ./run.sh 2023 1
[run.sh] created ./2023/01
[run.sh] created ./2023/01/code.go
Created file README.md
Created file input-example.txt
run(part1, input-example) returned in 616µs => 42
```
1. Implement your solution in `./2023/01/code.go` inside the `run` function
* I have provided solutions for year `2022`, days `2`,`4`,`7` however you can delete them and do them yourself if you'd like
1. Changes will re-run the code
* For example, update `code.go` to `return 43` instead you should see:
```sh
file changed code.go
run(part1, input-example) returned in 34µs => 43
```
1. The question is downloaded to `./2023/01/README.md`
1. Login to https://adventofcode.com
1. Find your question (e.g. https://adventofcode.com/2023/day/1) and **[get your puzzle input](https://adventofcode.com/2023/day/1/input)** and save it to `./2023/01/input-user.txt`
* See **Session** below to automate this step
1. Iterate on `code.go` until you get the answer
1. Submit it to https://adventofcode.com/2023/day/1
---
#### Session
**Optionally**, you can set `export AOC_SESSION=<session>` to your adventofcode.com `session` cookie. That is:
* Login with your browser
* Open developer tools > Application/Storage > Cookies
* Retrieve the contents of `session`
* Export it as `AOC_SESSION`
With your session set, running `code.go` will download your user-specifc `input-user.txt` and also update `README.md` with part 2 of the question once you've completed part 1.
Currently, your session is NOT used to submit your answer. You still need to login to https://adventofcode.com to submit.