diff --git a/.github/workflows/update-docs.yaml b/.github/workflows/update-docs.yaml new file mode 100644 index 000000000..62acdb9ae --- /dev/null +++ b/.github/workflows/update-docs.yaml @@ -0,0 +1,53 @@ +name: Update Docs + +on: + push: + branches: + - master + +jobs: + update-docs: + runs-on: ubuntu-latest + + permissions: + # Give the default GITHUB_TOKEN write permission to commit and push the + # added or changed files to the repository. + contents: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Configure Git + run: | + # Configure Git + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: '16' # Update based on your project's requirements + + - name: Build + run: | + cd docs; + npm install + cd .. + ls -la + node docs/build.js + + + - name: Checkout docs repository + uses: actions/checkout@v3 + with: + path: distr + ref: docs + + - name: Deploy docs + run: | + rsync -av --exclude='.git/' --del build/ distr/ + cd distr + git add . + git commit -m "Update docs on $(date)" + git push --force origin docs diff --git a/.gitignore b/.gitignore index 7f6661789..f96db2252 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ bin obj aoc-crypt.key +docs/node_modules +build diff --git a/.vscode/launch.json b/.vscode/launch.json index 75419e564..86b12f55e 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -11,7 +11,7 @@ "request": "launch", "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. - "program": "${workspaceFolder}/bin/Debug/net8.0/adventofcode.dll", + "program": "${workspaceFolder}/bin/Debug/net9.0/adventofcode.dll", "args": ["${relativeFileDirname}"], "cwd": "${workspaceFolder}", // For more information about the 'console' field, see https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window diff --git a/2015/Day01/README.md b/2015/Day01/README.md index 8b729b0e2..e6654b029 100644 --- a/2015/Day01/README.md +++ b/2015/Day01/README.md @@ -3,4 +3,4 @@ Santa was hoping for a white Christmas, but his weather machine's "snow" functio 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! -Read the [full puzzle](https://adventofcode.com/2015/day/1). \ No newline at end of file +_Visit the website for the full story and [full puzzle](https://adventofcode.com/2015/day/1) description._ diff --git a/2015/Day01/illustration.jpeg b/2015/Day01/illustration.jpeg new file mode 100644 index 000000000..999d41141 Binary files /dev/null and b/2015/Day01/illustration.jpeg differ diff --git a/2015/Day02/illustration.jpeg b/2015/Day02/illustration.jpeg new file mode 100644 index 000000000..23432437a Binary files /dev/null and b/2015/Day02/illustration.jpeg differ diff --git a/2015/Day03/illustration.jpeg b/2015/Day03/illustration.jpeg new file mode 100644 index 000000000..60cacbd93 Binary files /dev/null and b/2015/Day03/illustration.jpeg differ diff --git a/2015/Day04/illustration.jpeg b/2015/Day04/illustration.jpeg new file mode 100644 index 000000000..243d89a1b Binary files /dev/null and b/2015/Day04/illustration.jpeg differ diff --git a/2015/Day05/illustration.jpeg b/2015/Day05/illustration.jpeg new file mode 100644 index 000000000..8ba151e3c Binary files /dev/null and b/2015/Day05/illustration.jpeg differ diff --git a/2015/Day06/illustration.jpeg b/2015/Day06/illustration.jpeg new file mode 100644 index 000000000..3b62f677b Binary files /dev/null and b/2015/Day06/illustration.jpeg differ diff --git a/2015/README.md b/2015/README.md index e642371f9..a98cc6d87 100644 --- a/2015/README.md +++ b/2015/README.md @@ -1,6 +1,4 @@ - # Advent of Code (2015) Check out https://adventofcode.com/2015. - diff --git a/2015/SplashScreen.cs b/2015/SplashScreen.cs index 1277b4ae5..64c664e9c 100644 --- a/2015/SplashScreen.cs +++ b/2015/SplashScreen.cs @@ -1,4 +1,3 @@ - using System; namespace AdventOfCode.Y2015; @@ -9,491 +8,507 @@ public void Show() { var color = Console.ForegroundColor; Write(0xcc00, false, " ▄█▄ ▄▄█ ▄ ▄ ▄▄▄ ▄▄ ▄█▄ ▄▄▄ ▄█ ▄▄ ▄▄▄ ▄▄█ ▄▄▄\n █▄█ █ █ █ █ █▄█ █ █ █ █ █ █▄ "); - Write(0xcc00, false, " █ █ █ █ █ █▄█\n █ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ $year = 2015\n "); - Write(0xcc00, false, "\n "); - Write(0xffff66, true, "| \n \\|/ "); - Write(0xffff66, true, "\n --*-- "); - Write(0xcccccc, true, "25 "); - Write(0xffff66, true, "**\n "); - Write(0x9900, false, " >"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "< "); - Write(0xcccccc, false, "24 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<<< "); - Write(0xcccccc, false, "23 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >>"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "< "); - Write(0xcccccc, false, "22 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >>"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<<<< "); - Write(0xcccccc, false, "21 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<< "); - Write(0xcccccc, false, "20 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<<"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "< "); - Write(0xcccccc, false, "19 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, ">"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<<< "); - Write(0xcccccc, false, "18 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, ">>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "< "); - Write(0xcccccc, false, "17 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >"); - Write(0x66ff, true, "O"); - Write(0x9900, false, ">>"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">>>"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "< "); - Write(0xcccccc, false, "16 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >>"); - Write(0x66ff, true, "O"); - Write(0x9900, false, ">>>"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">>"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">>>"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<< "); - Write(0xcccccc, false, "15 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<<<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<<<"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "< "); - Write(0xcccccc, false, "14 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >>"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<<<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">>"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">>>"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<<<< "); - Write(0xcccccc, false, "13 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">>"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, ">>"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<<"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, ">>>"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<<<< "); - Write(0xcccccc, false, "12 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">>"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">>>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<<<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, ">>>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">>>"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "< "); - Write(0xcccccc, false, "11 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">>"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<<<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<<<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">>>"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<< "); - Write(0xcccccc, false, "10 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >>"); - Write(0x66ff, true, "O"); - Write(0x9900, false, ">"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">>>"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">>>"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<<<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">>"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<< "); - Write(0xcccccc, false, " 9 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">>"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, ">>"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<<<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">>>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<< "); - Write(0xcccccc, false, " 8 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >>"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">>"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, ">>>"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, ">>>"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<<<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">>"); - Write(0x66ff, true, "O"); - Write(0x9900, false, ">>"); - Write(0x66ff, true, "O"); - Write(0x9900, false, ">>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "< "); - Write(0xcccccc, false, " 7 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">>>"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<<<"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<<<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">>>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">>"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">>"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<<< "); - Write(0xcccccc, false, " 6 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">>>"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<<<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">>"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<<<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">"); - Write(0x66ff, true, "O"); - Write(0x9900, false, ">>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">>"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<<<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<<< "); - Write(0xcccccc, false, " 5 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<<<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<<<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, ">"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<<<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<<<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<< "); - Write(0xcccccc, false, " 4 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<<<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">>>"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">>>"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">>>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<<<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">>"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<<"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">>"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<<< "); - Write(0xcccccc, false, " 3 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, " >>"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">>"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">>>"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">>>"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<<<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<<<"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">>"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<<<"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">>"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<< "); - Write(0xcccccc, false, " 2 "); - Write(0xffff66, false, "**\n "); - Write(0x9900, false, ">>"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<<<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">>"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<<<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">>>"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">>"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<<"); - Write(0xff9900, true, "o"); - Write(0x9900, false, ">>"); - Write(0xffff66, true, "*"); - Write(0x9900, false, ">>>"); - Write(0xffff66, true, "*"); - Write(0x9900, false, "<"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">>>"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<<<< "); - Write(0xcccccc, false, " 1 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, " | | \n | | "); - Write(0xcccccc, false, " \n _ _ __ ___|___|___ __ _ _ \n "); - Write(0xcccccc, false, " \n"); - + Write(0xcc00, false, " █ █ █ █ █ █▄█\n █ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ {:year 2015}\n "); + Write(0xcc00, false, "\n "); + Write(0xffff66, true, "| \n \\|/ "); + Write(0xffff66, true, "\n --*-- "); + Write(0xcccccc, true, "25 "); + Write(0xffff66, true, "**\n "); + Write(0x9900, false, " >"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "< "); + Write(0xcccccc, false, "24 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >>"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<< "); + Write(0xcccccc, false, "23 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">>>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "< "); + Write(0xcccccc, false, "22 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<< "); + Write(0xcccccc, false, "21 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >>"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">>"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<<< "); + Write(0xcccccc, false, "20 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<<<< "); + Write(0xcccccc, false, "19 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >>"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "<<<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<< "); + Write(0xcccccc, false, "18 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">>>"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">>>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "<<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<< "); + Write(0xcccccc, false, "17 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >>"); + Write(0xffff66, true, "*"); + Write(0x9900, false, ">>"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">>>"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<<<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "< "); + Write(0xcccccc, false, "16 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">>"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">"); + Write(0xffff66, true, "*"); + Write(0x9900, false, ">>>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<<<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<<< "); + Write(0xcccccc, false, "15 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "<<<"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">>"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<<"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "< "); + Write(0xcccccc, false, "14 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">>>"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<<<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<< "); + Write(0xcccccc, false, "13 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">>>"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">>>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">>>"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<<<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "< "); + Write(0xcccccc, false, "12 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<<<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, ">"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<<<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">>>"); + Write(0xffff66, true, "*"); + Write(0x9900, false, ">"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<< "); + Write(0xcccccc, false, "11 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">"); + Write(0xffff66, true, "*"); + Write(0x9900, false, ">>>"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">>>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">"); + Write(0xffff66, true, "*"); + Write(0x9900, false, ">"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "<<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "< "); + Write(0xcccccc, false, "10 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">>>"); + Write(0xffff66, true, "*"); + Write(0x9900, false, ">>"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">>>"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">>"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<<<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<<<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<< "); + Write(0xcccccc, false, " 9 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">>"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">>"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "<<<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, ">"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "< "); + Write(0xcccccc, false, " 8 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >>"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "<<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">>"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "<<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<<<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">>>"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "<<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "< "); + Write(0xcccccc, false, " 7 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">>>"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">>"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<<<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "<<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "<<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<<"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">>>"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "< "); + Write(0xcccccc, false, " 6 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">>>"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<<<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">"); + Write(0xffff66, true, "*"); + Write(0x9900, false, ">"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<<<"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, ">>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<< "); + Write(0xcccccc, false, " 5 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >>"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<<<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<<<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<<"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">>"); + Write(0xffff66, true, "*"); + Write(0x9900, false, ">>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "<<"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<<<< "); + Write(0xcccccc, false, " 4 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">>"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">>>"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">>>"); + Write(0xffff66, true, "*"); + Write(0x9900, false, ">"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">>>"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">>"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">>>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<< "); + Write(0xcccccc, false, " 3 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, " >>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "<<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "<<<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">>>"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, ">"); + Write(0xffff66, true, "*"); + Write(0x9900, false, ">>>"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">>>"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, ">"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">>"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "< "); + Write(0xcccccc, false, " 2 "); + Write(0xffff66, false, "**\n "); + Write(0x9900, false, ">>"); + Write(0xffff66, true, "*"); + Write(0x9900, false, ">>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<<<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<<"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">>"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, ">>>"); + Write(0xff9900, true, "o"); + Write(0x9900, false, ">>>"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<<"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<"); + Write(0xffff66, true, "*"); + Write(0x9900, false, ">>"); + Write(0xffff66, true, "*"); + Write(0x9900, false, "<<"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "<< "); + Write(0xcccccc, false, " 1 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, " | | \n | | "); + Write(0xcccccc, false, " \n _ _ __ ___|___|___ __ _ _ \n "); + Write(0xcccccc, false, " \n"); + Console.ForegroundColor = color; Console.WriteLine(); } - private static void Write(int rgb, bool bold, string text){ + private static void Write(int rgb, bool bold, string text){ Console.Write($"\u001b[38;2;{(rgb>>16)&255};{(rgb>>8)&255};{rgb&255}{(bold ? ";1" : "")}m{text}"); - } -} + } +} \ No newline at end of file diff --git a/2015/calendar.svg b/2015/calendar.svg index 433f90f6f..40356baaa 100644 --- a/2015/calendar.svg +++ b/2015/calendar.svg @@ -1,51 +1,51 @@ - - + + ▄█▄ ▄▄█ ▄ ▄ ▄▄▄ ▄▄ ▄█▄ ▄▄▄ ▄█ ▄▄ ▄▄▄ ▄▄█ ▄▄▄ █▄█ █ █ █ █ █▄█ █ █ █ █ █ █▄ █ █ █ █ █ █▄█ -█ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ $year = 2015 +█ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ {:year 2015} | \|/ - --*-- 25 ** - >o< 24 ** - >O<<< 23 ** - >>*<<O< 22 ** - >>@<o<<<< 21 ** - >*>>o>@>*<< 20 ** - >>o>o<O<o<<@< 19 ** - >>o>O<O>@<<*<<< 18 ** - >o<O<O>>o<@<<O<*< 17 ** - >O>>*<@<o>@>>>O<<O< 16 ** - >>O>>>@>>*>>o>>>@<O<< 15 ** - >>o>>o>o>o<<<o>*<<<@>*< 14 ** - >>O<<<o<o>>O<@<<o>>>*<<<< 13 ** - >>o>o>>@<<O>>*<<@<O>>>@<<<< 12 ** - >>o>@>*>>*>>>o<<<O>>>o<o>>>O< 11 ** - >O<<*>*>>@<<<*>>o<*<<<*<o>>>O<< 10 ** - >>O>o<*>O<@>>o<*>>>@>>>@<<<*>>@<< 9 ** - >@>>o<<o>>*>o<o<<O>>*<<<O<o>>>o<o<< 8 ** - >>*>>*<<O>>>@<o<O>>>@<<<O<@>>O>>O>>o< 7 ** - >>o>*>>>*<*>*<<<@<<<*>>>o<<*>>@>o>>@<<< 6 ** - >>o>>>@<<<o>>O<<<*<<*>>o>O>>o>o>>O<<<O<<< 5 ** - >@<*>@>@>o<<*>@<*<<O<<<*<<o<<<O>o<<<*<<<o<< 4 ** - >@<<<*<<o>>>*>>>*>>>o<<<*<<o>o>>*<<o<<@>>O<<< 3 ** - >>@<*>>*>@<o>>>@>>>*<o<<<o<<O<<<@>>O<<<@>>O<O<< 2 ** ->>@<o<<<*<*>>o>@>o<<<o>>>@>>*<<o>>*>>>*<@>>>O<<<< 1 ** + --*-- 25 ** + >o< 24 ** + >>O<< 23 ** + >o>>>@< 22 ** + >@<<*<O<< 21 ** + >>o>>O>@<<< 20 ** + >o>o>O>>@<<<< 19 ** + >>o<<<O<o>*<*<< 18 ** + >@>>>o>>>@>o<<O<< 17 ** + >>*>>O>@>>>*<<<o>O< 16 ** + >>@>>o>*>>>@<<<O<O<<< 15 ** + >>@<<o<<<@>>*<<@>@>@>O< 14 ** + >*<<O>>>*<<*<@<O<<<O<<O<< 13 ** + >@>>>o>>>@<o>>@<<O>>>O<<<o< 12 ** + >o>O<@<<<o<*>@<<O<<<O>>>*>O<< 11 ** + >@>*>>>o>>@<O>o>@<O>>>@>*>o<<O< 10 ** + >>@>>>*>>o<O>>>o>o>>o>O<<<*<<<O<< 9 ** + >>@<o>>O>O<*<<O>O>>*<*<o<<<*>*<o>o< 8 ** + >>O<O<o<<o>>@>>o<<*<<<o>>>O<o<<o>*<@< 7 ** + >>@<o>>>O>O<o>>O<<<*<o<<o<<*<<O<<@>>>o< 6 ** + >>@>>>O>@>*<<<o>*>o<o>>@<<<@<<*>>@<O<<*<< 5 ** + >>O<<O<<<*<*<<<*<<O<<@<<o>>*>>@<O<<o<<@<<<< 4 ** + >@<<O<@>>O>>>*<<o>>>*>@<<O>O>*<O>>>O>>o>>>@<< 3 ** + >>@<@>o<<o<<<o>>>O<@<<*>*>>>*<@<@>>>*<*>O<@>>O< 2 ** +>>*>>@>*<<<*<<@>>O<*<<*<<*>>>o>>>@<<O<*<*>>*<<o<< 1 ** | | | | - _ _ __ ___|___|___ __ _ _ + _ _ __ ___|___|___ __ _ _ - \ No newline at end of file + \ No newline at end of file diff --git a/2016/Day01/README.md b/2016/Day01/README.md index 2478c94c2..4c302f2ce 100644 --- a/2016/Day01/README.md +++ b/2016/Day01/README.md @@ -3,4 +3,4 @@ Santa's sleigh uses a very high-precision clock to guide its movements, and the 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! -Read the [full puzzle](https://adventofcode.com/2016/day/1). \ No newline at end of file +_Visit the website for the full story and [full puzzle](https://adventofcode.com/2016/day/1) description._ diff --git a/2016/README.md b/2016/README.md index 8212cc07f..d3ef6bd90 100644 --- a/2016/README.md +++ b/2016/README.md @@ -1,6 +1,4 @@ - # Advent of Code (2016) Check out https://adventofcode.com/2016. - diff --git a/2016/SplashScreen.cs b/2016/SplashScreen.cs index 33cb596bf..04fac5852 100644 --- a/2016/SplashScreen.cs +++ b/2016/SplashScreen.cs @@ -1,4 +1,3 @@ - using System; namespace AdventOfCode.Y2016; @@ -9,258 +8,258 @@ public void Show() { var color = Console.ForegroundColor; Write(0xcc00, false, " ▄█▄ ▄▄█ ▄ ▄ ▄▄▄ ▄▄ ▄█▄ ▄▄▄ ▄█ ▄▄ ▄▄▄ ▄▄█ ▄▄▄\n █▄█ █ █ █ █ █▄█ █ █ █ █ █ █▄ "); - Write(0xcc00, false, " █ █ █ █ █ █▄█\n █ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ // 2016\n \n "); - Write(0xcc00, false, " "); - Write(0xffff66, true, "( ( ( ( ((*)) ) ) ) ) \n "); - Write(0x666666, false, " | \n +-|---+ "); - Write(0x666666, false, " \n / | /| \n "); - Write(0x666666, false, " +-----+ | \n |"); - Write(0x333333, false, "::"); - Write(0xffff66, true, ":"); - Write(0x333333, false, "::"); - Write(0x666666, false, "| | "); - Write(0xcccccc, false, "25 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " +----+ |"); - Write(0x333333, false, "::"); - Write(0x9900, true, ":"); - Write(0x333333, false, "::"); - Write(0x666666, false, "| |---+ +-----------+ "); - Write(0xcccccc, false, "24 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " / / \\ |"); - Write(0x333333, false, ":"); - Write(0x9900, true, ":::"); - Write(0x333333, false, ":"); - Write(0x666666, false, "| | /| / \\\\\\\\\\\\ [] /| "); - Write(0xcccccc, false, "23 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " / / / \\|"); - Write(0x9900, true, ":::::"); - Write(0x666666, false, "| | / | / \\\\\\\\\\\\ [] / | "); - Write(0xcccccc, false, "22 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " / / / / \\"); - Write(0x333333, false, "::"); - Write(0x553322, true, ":"); - Write(0x333333, false, "::"); - Write(0x666666, false, "|/ / | +-----------+ | "); - Write(0xcccccc, false, "21 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " +----+ / / / \\------+ ------|"); - Write(0x333333, false, "::::"); - Write(0x66ff, true, ":"); - Write(0x333333, false, ":"); - Write(0x66ff, true, ":"); - Write(0x333333, false, "::::"); - Write(0x666666, false, "| | "); - Write(0xcccccc, false, "20 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " |-----\\ / / / \\=====| ------|"); - Write(0x333333, false, ":"); - Write(0x66ff, true, ":"); - Write(0x333333, false, ":::"); - Write(0x66ff, true, ":"); - Write(0x333333, false, ":::"); - Write(0x66ff, true, ":"); - Write(0x333333, false, ":"); - Write(0x666666, false, "| | "); - Write(0xcccccc, false, "19 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " |------\\ / / / \\====| | |"); - Write(0x66ff, true, ":::"); - Write(0x333333, false, ":"); - Write(0x66ff, true, ":::"); - Write(0x333333, false, ":"); - Write(0x66ff, true, ":::"); - Write(0x666666, false, "| | "); - Write(0xcccccc, false, "18 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " |-------\\ / / / +===| | |"); - Write(0x333333, false, ":::"); - Write(0x66ff, true, ":"); - Write(0x333333, false, ":::"); - Write(0x66ff, true, ":"); - Write(0x333333, false, ":::"); - Write(0x666666, false, "| | "); - Write(0xcccccc, false, "17 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " |--------\\ / / /|===| | |"); - Write(0x333333, false, ":::"); - Write(0x66ff, true, ":"); - Write(0x333333, false, ":::"); - Write(0x66ff, true, ":"); - Write(0x333333, false, ":::"); - Write(0x666666, false, "| | "); - Write(0xcccccc, false, "16 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " |---------\\ / / |===| | /|"); - Write(0x66ff, true, ":::"); - Write(0x333333, false, ":"); - Write(0x66ff, true, ":::"); - Write(0x333333, false, ":"); - Write(0x66ff, true, ":::"); - Write(0x666666, false, "| | "); - Write(0xcccccc, false, "15 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " |----------\\ / |===| / //|"); - Write(0x333333, false, ":"); - Write(0x66ff, true, ":"); - Write(0x333333, false, ":::"); - Write(0x66ff, true, ":"); - Write(0x333333, false, ":::"); - Write(0x66ff, true, ":"); - Write(0x333333, false, ":"); - Write(0x666666, false, "| / "); - Write(0xcccccc, false, "14 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " +-----------+ |===| / //||"); - Write(0x333333, false, "::::"); - Write(0x66ff, true, ":"); - Write(0x333333, false, ":"); - Write(0x66ff, true, ":"); - Write(0x333333, false, "::::"); - Write(0x666666, false, "|/ "); - Write(0xcccccc, false, "13 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " |"); - Write(0xff0000, true, ":"); - Write(0x333333, false, ":"); - Write(0xff0000, true, ":"); - Write(0x333333, false, "::::::::"); - Write(0x666666, false, "| |===|/__//___________________ "); - Write(0xcccccc, false, "12 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " |"); - Write(0xff0000, true, ":::"); - Write(0x333333, false, ":"); - Write(0x9900, true, ":::"); - Write(0x333333, false, "::::"); - Write(0x666666, false, "| |______//|_____...._________ "); - Write(0xcccccc, false, "11 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " |"); - Write(0xff0000, true, ":"); - Write(0x333333, false, ":"); - Write(0xff0000, true, ":"); - Write(0x333333, false, ":"); - Write(0x9900, true, ":"); - Write(0x333333, false, ":"); - Write(0x9900, true, ":"); - Write(0x333333, false, "::::"); - Write(0x666666, false, "| | //| ____/ /_/___ "); - Write(0xcccccc, false, "10 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " ---|"); - Write(0x333333, false, "::::"); - Write(0x9900, true, ":::"); - Write(0x333333, false, "::::"); - Write(0x666666, false, "| |--------|[][]|_|[][]_\\------ "); - Write(0xcccccc, false, " 9 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, "----|"); - Write(0x333333, false, "::"); - Write(0xff0000, true, ":"); - Write(0x333333, false, ":"); - Write(0xff0000, true, ":"); - Write(0x333333, false, "::::::"); - Write(0x666666, false, "| |--------------------------- "); - Write(0xcccccc, false, " 8 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " || |"); - Write(0x333333, false, "::"); - Write(0xff0000, true, ":::"); - Write(0x333333, false, ":"); - Write(0x9900, true, ":::"); - Write(0x333333, false, "::"); - Write(0x666666, false, "| | //| || / / / || || "); - Write(0xcccccc, false, " 7 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " || |"); - Write(0x333333, false, "::"); - Write(0xff0000, true, ":"); - Write(0x333333, false, ":"); - Write(0xff0000, true, ":"); - Write(0x333333, false, ":"); - Write(0x9900, true, ":"); - Write(0x333333, false, ":"); - Write(0x9900, true, ":"); - Write(0x333333, false, "::"); - Write(0x666666, false, "| | //| || / / || "); - Write(0xffff66, true, "*"); - Write(0x666666, false, " || "); - Write(0xcccccc, false, " 6 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " |"); - Write(0x333333, false, "::::::"); - Write(0x9900, true, ":::"); - Write(0x333333, false, "::"); - Write(0x666666, false, "| |//| / / / "); - Write(0x9900, false, ">"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "< "); - Write(0xcccccc, false, " 5 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " |"); - Write(0x333333, false, "::::"); - Write(0xff0000, true, ":"); - Write(0x333333, false, ":"); - Write(0xff0000, true, ":"); - Write(0x333333, false, "::::"); - Write(0x666666, false, "| //| / / ___"); - Write(0x9900, false, ">"); - Write(0xff0000, true, "@"); - Write(0x9900, false, ">"); - Write(0x66ff, true, "O"); - Write(0x9900, false, "<"); - Write(0x666666, false, "____ "); - Write(0xcccccc, false, " 4 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " |"); - Write(0x333333, false, "::::"); - Write(0xff0000, true, ":::"); - Write(0x333333, false, ":"); - Write(0x9900, true, ":::"); - Write(0x666666, false, "| //| / / / / "); - Write(0x9900, false, ">"); - Write(0x66ff, true, "O"); - Write(0x9900, false, ">"); - Write(0xff9900, true, "o"); - Write(0x9900, false, "<"); - Write(0xff0000, true, "@"); - Write(0x9900, false, "<"); - Write(0x666666, false, " / "); - Write(0xcccccc, false, " 3 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " |"); - Write(0x333333, false, "::::"); - Write(0xff0000, true, ":"); - Write(0x333333, false, ":"); - Write(0xff0000, true, ":"); - Write(0x333333, false, ":"); - Write(0x9900, true, ":"); - Write(0x333333, false, ":"); - Write(0x9900, true, ":"); - Write(0x666666, false, "| //| / / / "); - Write(0xaaaaaa, false, "_| |_"); - Write(0x666666, false, " / "); - Write(0xcccccc, false, " 2 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " |"); - Write(0x333333, false, "::::::::"); - Write(0x9900, true, ":::"); - Write(0x666666, false, "|//| / / / /___________/ "); - Write(0xcccccc, false, " 1 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " ==============//======+...+==================== \n - - - - - - -// - - -/ / - -"); - Write(0x666666, false, " - - - - - - - - \n ==============//|============================== \n "); - Write(0x666666, false, " //| \n \n"); - + Write(0xcc00, false, " █ █ █ █ █ █▄█\n █ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ // 2016\n \n "); + Write(0xcc00, false, " "); + Write(0xffff66, true, "( ( ( ( ((*)) ) ) ) ) \n "); + Write(0x666666, false, " | \n +-|---+ "); + Write(0x666666, false, " \n / | /| \n "); + Write(0x666666, false, " +-----+ | \n |"); + Write(0x333333, false, "::"); + Write(0xffff66, true, ":"); + Write(0x333333, false, "::"); + Write(0x666666, false, "| | "); + Write(0xcccccc, false, "25 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " +----+ |"); + Write(0x333333, false, "::"); + Write(0x9900, true, ":"); + Write(0x333333, false, "::"); + Write(0x666666, false, "| |---+ +-----------+ "); + Write(0xcccccc, false, "24 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " / / \\ |"); + Write(0x333333, false, ":"); + Write(0x9900, true, ":::"); + Write(0x333333, false, ":"); + Write(0x666666, false, "| | /| / \\\\\\\\\\\\ [] /| "); + Write(0xcccccc, false, "23 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " / / / \\|"); + Write(0x9900, true, ":::::"); + Write(0x666666, false, "| | / | / \\\\\\\\\\\\ [] / | "); + Write(0xcccccc, false, "22 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " / / / / \\"); + Write(0x333333, false, "::"); + Write(0x553322, true, ":"); + Write(0x333333, false, "::"); + Write(0x666666, false, "|/ / | +-----------+ | "); + Write(0xcccccc, false, "21 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " +----+ / / / \\------+ ------|"); + Write(0x333333, false, "::::"); + Write(0x66ff, true, ":"); + Write(0x333333, false, ":"); + Write(0x66ff, true, ":"); + Write(0x333333, false, "::::"); + Write(0x666666, false, "| | "); + Write(0xcccccc, false, "20 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " |-----\\ / / / \\=====| ------|"); + Write(0x333333, false, ":"); + Write(0x66ff, true, ":"); + Write(0x333333, false, ":::"); + Write(0x66ff, true, ":"); + Write(0x333333, false, ":::"); + Write(0x66ff, true, ":"); + Write(0x333333, false, ":"); + Write(0x666666, false, "| | "); + Write(0xcccccc, false, "19 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " |------\\ / / / \\====| | |"); + Write(0x66ff, true, ":::"); + Write(0x333333, false, ":"); + Write(0x66ff, true, ":::"); + Write(0x333333, false, ":"); + Write(0x66ff, true, ":::"); + Write(0x666666, false, "| | "); + Write(0xcccccc, false, "18 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " |-------\\ / / / +===| | |"); + Write(0x333333, false, ":::"); + Write(0x66ff, true, ":"); + Write(0x333333, false, ":::"); + Write(0x66ff, true, ":"); + Write(0x333333, false, ":::"); + Write(0x666666, false, "| | "); + Write(0xcccccc, false, "17 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " |--------\\ / / /|===| | |"); + Write(0x333333, false, ":::"); + Write(0x66ff, true, ":"); + Write(0x333333, false, ":::"); + Write(0x66ff, true, ":"); + Write(0x333333, false, ":::"); + Write(0x666666, false, "| | "); + Write(0xcccccc, false, "16 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " |---------\\ / / |===| | /|"); + Write(0x66ff, true, ":::"); + Write(0x333333, false, ":"); + Write(0x66ff, true, ":::"); + Write(0x333333, false, ":"); + Write(0x66ff, true, ":::"); + Write(0x666666, false, "| | "); + Write(0xcccccc, false, "15 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " |----------\\ / |===| / //|"); + Write(0x333333, false, ":"); + Write(0x66ff, true, ":"); + Write(0x333333, false, ":::"); + Write(0x66ff, true, ":"); + Write(0x333333, false, ":::"); + Write(0x66ff, true, ":"); + Write(0x333333, false, ":"); + Write(0x666666, false, "| / "); + Write(0xcccccc, false, "14 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " +-----------+ |===| / //||"); + Write(0x333333, false, "::::"); + Write(0x66ff, true, ":"); + Write(0x333333, false, ":"); + Write(0x66ff, true, ":"); + Write(0x333333, false, "::::"); + Write(0x666666, false, "|/ "); + Write(0xcccccc, false, "13 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " |"); + Write(0xff0000, true, ":"); + Write(0x333333, false, ":"); + Write(0xff0000, true, ":"); + Write(0x333333, false, "::::::::"); + Write(0x666666, false, "| |===|/__//___________________ "); + Write(0xcccccc, false, "12 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " |"); + Write(0xff0000, true, ":::"); + Write(0x333333, false, ":"); + Write(0x9900, true, ":::"); + Write(0x333333, false, "::::"); + Write(0x666666, false, "| |______//|_____...._________ "); + Write(0xcccccc, false, "11 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " |"); + Write(0xff0000, true, ":"); + Write(0x333333, false, ":"); + Write(0xff0000, true, ":"); + Write(0x333333, false, ":"); + Write(0x9900, true, ":"); + Write(0x333333, false, ":"); + Write(0x9900, true, ":"); + Write(0x333333, false, "::::"); + Write(0x666666, false, "| | //| ____/ /_/___ "); + Write(0xcccccc, false, "10 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " ---|"); + Write(0x333333, false, "::::"); + Write(0x9900, true, ":::"); + Write(0x333333, false, "::::"); + Write(0x666666, false, "| |--------|[][]|_|[][]_\\------ "); + Write(0xcccccc, false, " 9 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, "----|"); + Write(0x333333, false, "::"); + Write(0xff0000, true, ":"); + Write(0x333333, false, ":"); + Write(0xff0000, true, ":"); + Write(0x333333, false, "::::::"); + Write(0x666666, false, "| |--------------------------- "); + Write(0xcccccc, false, " 8 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " || |"); + Write(0x333333, false, "::"); + Write(0xff0000, true, ":::"); + Write(0x333333, false, ":"); + Write(0x9900, true, ":::"); + Write(0x333333, false, "::"); + Write(0x666666, false, "| | //| || / / / || || "); + Write(0xcccccc, false, " 7 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " || |"); + Write(0x333333, false, "::"); + Write(0xff0000, true, ":"); + Write(0x333333, false, ":"); + Write(0xff0000, true, ":"); + Write(0x333333, false, ":"); + Write(0x9900, true, ":"); + Write(0x333333, false, ":"); + Write(0x9900, true, ":"); + Write(0x333333, false, "::"); + Write(0x666666, false, "| | //| || / / || "); + Write(0xffff66, true, "*"); + Write(0x666666, false, " || "); + Write(0xcccccc, false, " 6 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " |"); + Write(0x333333, false, "::::::"); + Write(0x9900, true, ":::"); + Write(0x333333, false, "::"); + Write(0x666666, false, "| |//| / / / "); + Write(0x9900, false, ">"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "< "); + Write(0xcccccc, false, " 5 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " |"); + Write(0x333333, false, "::::"); + Write(0xff0000, true, ":"); + Write(0x333333, false, ":"); + Write(0xff0000, true, ":"); + Write(0x333333, false, "::::"); + Write(0x666666, false, "| //| / / ___"); + Write(0x9900, false, ">"); + Write(0xff0000, true, "@"); + Write(0x9900, false, ">"); + Write(0x66ff, true, "O"); + Write(0x9900, false, "<"); + Write(0x666666, false, "____ "); + Write(0xcccccc, false, " 4 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " |"); + Write(0x333333, false, "::::"); + Write(0xff0000, true, ":::"); + Write(0x333333, false, ":"); + Write(0x9900, true, ":::"); + Write(0x666666, false, "| //| / / / / "); + Write(0x9900, false, ">"); + Write(0x66ff, true, "O"); + Write(0x9900, false, ">"); + Write(0xff9900, true, "o"); + Write(0x9900, false, "<"); + Write(0xff0000, true, "@"); + Write(0x9900, false, "<"); + Write(0x666666, false, " / "); + Write(0xcccccc, false, " 3 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " |"); + Write(0x333333, false, "::::"); + Write(0xff0000, true, ":"); + Write(0x333333, false, ":"); + Write(0xff0000, true, ":"); + Write(0x333333, false, ":"); + Write(0x9900, true, ":"); + Write(0x333333, false, ":"); + Write(0x9900, true, ":"); + Write(0x666666, false, "| //| / / / "); + Write(0xaaaaaa, false, "_| |_"); + Write(0x666666, false, " / "); + Write(0xcccccc, false, " 2 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " |"); + Write(0x333333, false, "::::::::"); + Write(0x9900, true, ":::"); + Write(0x666666, false, "|//| / / / /___________/ "); + Write(0xcccccc, false, " 1 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " ==============//======+...+==================== \n - - - - - - -// - - -/ / - -"); + Write(0x666666, false, " - - - - - - - - \n ==============//|============================== \n "); + Write(0x666666, false, " //| \n \n"); + Console.ForegroundColor = color; Console.WriteLine(); } - private static void Write(int rgb, bool bold, string text){ + private static void Write(int rgb, bool bold, string text){ Console.Write($"\u001b[38;2;{(rgb>>16)&255};{(rgb>>8)&255};{rgb&255}{(bold ? ";1" : "")}m{text}"); - } -} + } +} \ No newline at end of file diff --git a/2016/calendar.svg b/2016/calendar.svg index cf103d895..001a5323e 100644 --- a/2016/calendar.svg +++ b/2016/calendar.svg @@ -1,15 +1,15 @@ - - + + ▄█▄ ▄▄█ ▄ ▄ ▄▄▄ ▄▄ ▄█▄ ▄▄▄ ▄█ ▄▄ ▄▄▄ ▄▄█ ▄▄▄ █▄█ █ █ █ █ █▄█ █ █ █ █ █ █▄ █ █ █ █ █ █▄█ @@ -20,36 +20,36 @@ +-|---+ / | /| +-----+ | - |:::::| | 25 ** - +----+ |:::::| |---+ +-----------+ 24 ** - / / \ |:::::| | /| / \\\\\\ [] /| 23 ** - / / / \|:::::| | / | / \\\\\\ [] / | 22 ** - / / / / \:::::|/ / | +-----------+ | 21 ** - +----+ / / / \------+ ------|:::::::::::| | 20 ** - |-----\ / / / \=====| ------|:::::::::::| | 19 ** - |------\ / / / \====| | |:::::::::::| | 18 ** - |-------\ / / / +===| | |:::::::::::| | 17 ** - |--------\ / / /|===| | |:::::::::::| | 16 ** - |---------\ / / |===| | /|:::::::::::| | 15 ** - |----------\ / |===| / //|:::::::::::| / 14 ** - +-----------+ |===| / //||:::::::::::|/ 13 ** - |:::::::::::| |===|/__//___________________ 12 ** - |:::::::::::| |______//|_____...._________ 11 ** - |:::::::::::| | //| ____/ /_/___ 10 ** - ---|:::::::::::| |--------|[][]|_|[][]_\------ 9 ** -----|:::::::::::| |--------------------------- 8 ** - || |:::::::::::| | //| || / / / || || 7 ** - || |:::::::::::| | //| || / / || * || 6 ** - |:::::::::::| |//| / / / >o< 5 ** - |:::::::::::| //| / / ___>@>O<____ 4 ** - |:::::::::::| //| / / / / >O>o<@< / 3 ** - |:::::::::::| //| / / / _| |_ / 2 ** - |:::::::::::|//| / / / /___________/ 1 ** + |:::::| | 25 ** + +----+ |:::::| |---+ +-----------+ 24 ** + / / \ |:::::| | /| / \\\\\\ [] /| 23 ** + / / / \|:::::| | / | / \\\\\\ [] / | 22 ** + / / / / \:::::|/ / | +-----------+ | 21 ** + +----+ / / / \------+ ------|:::::::::::| | 20 ** + |-----\ / / / \=====| ------|:::::::::::| | 19 ** + |------\ / / / \====| | |:::::::::::| | 18 ** + |-------\ / / / +===| | |:::::::::::| | 17 ** + |--------\ / / /|===| | |:::::::::::| | 16 ** + |---------\ / / |===| | /|:::::::::::| | 15 ** + |----------\ / |===| / //|:::::::::::| / 14 ** + +-----------+ |===| / //||:::::::::::|/ 13 ** + |:::::::::::| |===|/__//___________________ 12 ** + |:::::::::::| |______//|_____...._________ 11 ** + |:::::::::::| | //| ____/ /_/___ 10 ** + ---|:::::::::::| |--------|[][]|_|[][]_\------ 9 ** +----|:::::::::::| |--------------------------- 8 ** + || |:::::::::::| | //| || / / / || || 7 ** + || |:::::::::::| | //| || / / || * || 6 ** + |:::::::::::| |//| / / / >o< 5 ** + |:::::::::::| //| / / ___>@>O<____ 4 ** + |:::::::::::| //| / / / / >O>o<@< / 3 ** + |:::::::::::| //| / / / _| |_ / 2 ** + |:::::::::::|//| / / / /___________/ 1 ** ==============//======+...+==================== - - - - - - -// - - -/ / - - - - - - - - - - ==============//|============================== - //| + //| - \ No newline at end of file + \ No newline at end of file diff --git a/2017/Day01/README.md b/2017/Day01/README.md index e03493275..ceb540a18 100644 --- a/2017/Day01/README.md +++ b/2017/Day01/README.md @@ -3,4 +3,4 @@ The night before Christmas, one of Santa's Elves calls you in a panic. "The prin When your eyes can focus again, everything seems a lot more pixelated than before. She must have sent you inside the computer! You check the system clock: 25 milliseconds until midnight. With that much time, you should be able to collect all fifty stars by December 25th. -Read the [full puzzle](https://adventofcode.com/2017/day/1). \ No newline at end of file +_Visit the website for the full story and [full puzzle](https://adventofcode.com/2017/day/1) description._ diff --git a/2017/README.md b/2017/README.md index 0d7fa30de..33861dcbc 100644 --- a/2017/README.md +++ b/2017/README.md @@ -1,6 +1,4 @@ - # Advent of Code (2017) Check out https://adventofcode.com/2017. - diff --git a/2017/SplashScreen.cs b/2017/SplashScreen.cs index 1ee0b2d44..fb4ba3fb2 100644 --- a/2017/SplashScreen.cs +++ b/2017/SplashScreen.cs @@ -1,4 +1,3 @@ - using System; namespace AdventOfCode.Y2017; @@ -9,209 +8,210 @@ public void Show() { var color = Console.ForegroundColor; Write(0xcc00, false, " ▄█▄ ▄▄█ ▄ ▄ ▄▄▄ ▄▄ ▄█▄ ▄▄▄ ▄█ ▄▄ ▄▄▄ ▄▄█ ▄▄▄\n █▄█ █ █ █ █ █▄█ █ █ █ █ █ █▄ "); - Write(0xcc00, false, " █ █ █ █ █ █▄█\n █ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ 0x0000 | 2017\n "); - Write(0xcc00, false, " \n "); - Write(0x999999, false, "|O| "); - Write(0xcccccc, false, " Naughty | Nice "); - Write(0x999999, false, "|O| \n |O| "); - Write(0xcccccc, false, "-------------------+------------------- "); - Write(0x999999, false, "|O| \n |O| "); - Write(0xcccccc, false, "The Easter Bunny | encse "); - Write(0x999999, false, "|O| \n |O| "); - Write(0xcccccc, false, "lizthegrey | Kevin Yap "); - Write(0x999999, false, "|O| \n |O| "); - Write(0xcccccc, false, "Mihai Maruseac | Jean-Noël Monette "); - Write(0x999999, false, "|O| \n |O| "); - Write(0xcccccc, false, "jweinberg | Joe LeGasse "); - Write(0x999999, false, "|O| \n |O| "); - Write(0xcccccc, false, "zenithlight | Christopher Lorton "); - Write(0x999999, false, "|O| \n "); - Write(0xcccccc, false, ".-----------------------------------------------. \n | "); - Write(0x666666, false, "o──────┬───────"); - Write(0xaaaaaa, false, "[─]"); - Write(0x666666, false, "──────┐┌┬──o┌─────────"); - Write(0x9900, false, "oTo"); - Write(0x666666, false, "─"); - Write(0xffff66, true, "* "); - Write(0xcccccc, false, "| 25 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0x666666, false, "┌──────┘┌─────────┬────o││└───┘o┐"); - Write(0xffff66, true, "*"); - Write(0x666666, false, "────"); - Write(0x9900, false, "oTo"); - Write(0x666666, false, "───┘ "); - Write(0xcccccc, false, "| 24 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0x666666, false, "├─────┐o┴────────┐└─────┘│o──┬──┘└───"); - Write(0xff0000, false, "┤|├"); - Write(0x666666, false, "────"); - Write(0xffff66, true, "* "); - Write(0xcccccc, false, "| 23 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0x666666, false, "└────o└────────┐o┴──────o└┐┌─┘"); - Write(0xffff66, true, "*"); - Write(0x666666, false, "─────────────┘ "); - Write(0xcccccc, false, "| 22 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0x666666, false, "┌───────────"); - Write(0x66ff, false, "|("); - Write(0x666666, false, "─┘┌─────────┘└─┐└────"); - Write(0x66ff, false, "|("); - Write(0x666666, false, "───────"); - Write(0xffff66, true, "* "); - Write(0xcccccc, false, "| 21 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0x666666, false, "├───────────"); - Write(0x990099, false, "┤[]├"); - Write(0x666666, false, "┴────────────┴───o"); - Write(0xffff66, true, "*"); - Write(0x666666, false, "───"); - Write(0x66ff, false, "|("); - Write(0x666666, false, "────┤ "); - Write(0xcccccc, false, "| 20 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0x666666, false, "└───────┬┴┴┴┬o"); - Write(0xffff66, true, "*"); - Write(0x666666, false, "──────────"); - Write(0xff0000, false, "┤|├"); - Write(0x666666, false, "──────┘┌───┬───o│ "); - Write(0xcccccc, false, "| 19 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0xffff66, true, "*"); - Write(0x666666, false, "───────┤ ├┐└─────"); - Write(0x66ff, false, "|("); - Write(0x666666, false, "─────────┐┌──┘o─┐└────┘ "); - Write(0xcccccc, false, "| 18 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0x666666, false, "└──────"); - Write(0xffff66, true, "*"); - Write(0x666666, false, "┤ ├└───┐┌──"); - Write(0xff9900, false, "∧∧∧"); - Write(0x666666, false, "─"); - Write(0xff0000, false, "┤|├"); - Write(0x666666, false, "───┘└─────┴┐o───┐ "); - Write(0xcccccc, false, "| 17 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0x666666, false, "┌─"); - Write(0xffff66, true, "*"); - Write(0x666666, false, "────┘┤ ├───┬┘├┴┴┴┴┬──"); - Write(0xaaaaaa, false, "[─]"); - Write(0x666666, false, "────┐┌───o└─┐┌─┘ "); - Write(0xcccccc, false, "| 16 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0x666666, false, "└o└─────┴┬┬┬┴──"); - Write(0xffff66, true, "*"); - Write(0x666666, false, "└─┤ ├─┬┴┴┴┴┴┬─┘└────┐┌┘└─┐ "); - Write(0xcccccc, false, "| 15 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0xffff66, true, "*"); - Write(0x666666, false, "──────────────┘┌─┤NAND├─┤ 4├─┐┌──┬─┘└───┤ "); - Write(0xcccccc, false, "| 14 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0x666666, false, "└──────"); - Write(0xffff66, true, "*"); - Write(0x666666, false, "o───────┴─┤GATE├─┤ 3├─┼┴┴┴┤┌─────┘ "); - Write(0xcccccc, false, "| 13 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0xffff66, true, "*"); - Write(0x666666, false, "──"); - Write(0xff0000, false, "┤|├"); - Write(0x666666, false, "─┘┌─────────┴┬┬┬┬┘┌┤ V0├o┤ ├└┐┌──┬o "); - Write(0xcccccc, false, "| 12 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0x666666, false, "├──────"); - Write(0xffff66, true, "*"); - Write(0x666666, false, "└───────┬───┴o└┐└┤ R0├─┤ A├o│├─o└┐ "); - Write(0xcccccc, false, "| 11 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0x666666, false, "└─────o└───────"); - Write(0xffff66, true, "*"); - Write(0x666666, false, "└─┐┌───┴o┤ ├─┤ L├─┘=┌──┘ "); - Write(0xcccccc, false, "| 10 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0xffff66, true, "*"); - Write(0x666666, false, "────┬┴┴┴┴┬────┘┌─┘└─────┴┬┬┬┬┬┴┐┤ U├──┐└──┐ "); - Write(0xcccccc, false, "| 9 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0x666666, false, "├────┤ ├─"); - Write(0xffff66, true, "*"); - Write(0x666666, false, "o──┴─┐┌─────────┴─┐└┴┬┬┬┴──┘┌──┘ "); - Write(0xcccccc, false, "| 8 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0x666666, false, "└─o"); - Write(0xffff66, true, "*"); - Write(0x666666, false, "─┤PR2A├┐└────┐=└┐o──────┬──┘o┐┌┘o────┴──┐ "); - Write(0xcccccc, false, "| 7 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0x666666, false, "┌──┘┌┤ 03G├┴─────┘┌"); - Write(0xffff66, true, "*"); - Write(0x666666, false, "└─────┬┐└────┤└─────────┤ "); - Write(0xcccccc, false, "| 6 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0x666666, false, "├───┴┴┬┬┬┬┴───"); - Write(0xff9900, false, "∧∧∧"); - Write(0x666666, false, "─┘└─"); - Write(0x990099, false, "┤[]├"); - Write(0xffff66, true, "*"); - Write(0x666666, false, "│└──┐o─┴─────────o│ "); - Write(0xcccccc, false, "| 5 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0x666666, false, "└┐o┐"); - Write(0xffff66, true, "*"); - Write(0x666666, false, "─────────"); - Write(0xff9900, false, "∧∧∧"); - Write(0x666666, false, "────────┘└┐o┐└─────────────┘ "); - Write(0xcccccc, false, "| 4 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0x666666, false, "o┴─┘└──────────"); - Write(0xffff66, true, "*"); - Write(0x666666, false, "┌────┬────o└─┴┐┌──────┐o────┐ "); - Write(0xcccccc, false, "| 3 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0xffff66, true, "*"); - Write(0x666666, false, "──────────────┘└───o└─┬─────┐│└─┐┌──┐└─────┤ "); - Write(0xcccccc, false, "| 2 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "| "); - Write(0x666666, false, "└───────────"); - Write(0x66ff, false, "|("); - Write(0x666666, false, "─"); - Write(0xff9900, false, "∧∧∧"); - Write(0x666666, false, "────"); - Write(0xffff66, true, "*"); - Write(0x666666, false, "└────o└┴──┘└─o└──────┘ "); - Write(0xcccccc, false, "| 1 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "'-----------------------------------------------' \n \n"); - + Write(0xcc00, false, " █ █ █ █ █ █▄█\n █ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ {'year': 2017}\n "); + Write(0xcc00, false, " \n "); + Write(0x999999, false, "|O| "); + Write(0xcccccc, false, " Naughty | Nice "); + Write(0x999999, false, "|O| \n |O| "); + Write(0xcccccc, false, "-------------------+------------------- "); + Write(0x999999, false, "|O| \n |O| "); + Write(0xcccccc, false, "The Easter Bunny | encse "); + Write(0x999999, false, "|O| \n |O| "); + Write(0xcccccc, false, "Martin Galese | Szabolcs Sipos "); + Write(0x999999, false, "|O| \n |O| "); + Write(0xcccccc, false, "Balázs Dankó | wesen "); + Write(0x999999, false, "|O| \n |O| "); + Write(0xcccccc, false, "Gábor Gyebnár | Daniel Willenson "); + Write(0x999999, false, "|O| \n |O| "); + Write(0xcccccc, false, "Woodrow Hedberg | gkatai "); + Write(0x999999, false, "|O| \n "); + Write(0xcccccc, false, ".-----------------------------------------------. \n | "); + Write(0x666666, false, "┌───────────────o┌"); + Write(0xffff66, true, "*"); + Write(0x666666, false, "───────"); + Write(0xaaaaaa, false, "[─]"); + Write(0x666666, false, "────┐o─────────┐ "); + Write(0xcccccc, false, "| 25 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "└──────"); + Write(0x9900, false, "oTo"); + Write(0x666666, false, "───────┘└────"); + Write(0xffff66, true, "*"); + Write(0x666666, false, "┌o┌────┐┌┘┌─────────┤ "); + Write(0xcccccc, false, "| 24 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0xffff66, true, "*"); + Write(0x666666, false, "───────────────────"); + Write(0x66ff, false, "|("); + Write(0x666666, false, "─┘├─┘┌──o└┘┌┴──────┐o─┘ "); + Write(0xcccccc, false, "| 23 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "└───"); + Write(0xff0000, false, "┤|├"); + Write(0x666666, false, "───┬┴┴┴┴┬────"); + Write(0xffff66, true, "*"); + Write(0x666666, false, "┌─o│o─┴─────┴──────o└──┐ "); + Write(0xcccccc, false, "| 22 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0xffff66, true, "*"); + Write(0x666666, false, "─"); + Write(0xaaaaaa, false, "[─]"); + Write(0x666666, false, "─"); + Write(0xaaaaaa, false, "[─]"); + Write(0x666666, false, "─┤ DY├────┘└──┴────"); + Write(0xff9900, false, "∧∧∧"); + Write(0x666666, false, "────────────┤ "); + Write(0xcccccc, false, "| 21 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "├─────────┤ EP├─────┐┌──"); + Write(0xff9900, false, "∧∧∧"); + Write(0x666666, false, "──"); + Write(0x990099, false, "┤[]├"); + Write(0x666666, false, "───┐┌─"); + Write(0xffff66, true, "*"); + Write(0x666666, false, "o──┘ "); + Write(0xcccccc, false, "| 20 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "└─────────┤ CT├────┬┘│V┌────┬──────o└┴o└───"); + Write(0xffff66, true, "* "); + Write(0xcccccc, false, "| 19 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "┌─────────┤ RR├o───┘┌┘└┴──o┌┘"); + Write(0xffff66, true, "*"); + Write(0x666666, false, "─────┬┴┴┴┬───┘ "); + Write(0xcccccc, false, "| 18 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "├─────────┤ ├─────┘o┬────┘┌┘┌────┤ 30├───"); + Write(0xffff66, true, "* "); + Write(0xcccccc, false, "| 17 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "│o┬─┐"); + Write(0xffff66, true, "*"); + Write(0x666666, false, "────┼┬┬┬┬┴───"); + Write(0xff9900, false, "∧∧∧"); + Write(0x666666, false, "─┘┌───┐└─┴────┤ 29├┐┌─┘ "); + Write(0xcccccc, false, "| 16 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "└─┘┌┘└───"); + Write(0xffff66, true, "*"); + Write(0x666666, false, "└┬┴┴┴┴┬───────┘o──┴──────┐┤ 83├┘└─┐ "); + Write(0xcccccc, false, "| 15 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "┌──┘┌───o└─┤ ├──┐┌───────"); + Write(0xffff66, true, "*"); + Write(0x666666, false, "o─────┴┤ P6├───┘ "); + Write(0xcccccc, false, "| 14 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "└┬──┘┌─"); + Write(0x9900, false, "oTo"); + Write(0x666666, false, "─┤ ├─o└┘┌─────o└───────┴┬┬┬┴───"); + Write(0xffff66, true, "* "); + Write(0xcccccc, false, "| 13 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "o┘┌──┘┌────┤ v17├────┴─┐"); + Write(0xffff66, true, "*"); + Write(0x666666, false, "──"); + Write(0xaaaaaa, false, "[─]"); + Write(0x666666, false, "─────────┐┌───┤ "); + Write(0xcccccc, false, "| 12 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "┌─┘┌┴┴┴┴┴┬─┴┬┬┬┬┴──"); + Write(0x66ff, false, "|("); + Write(0x666666, false, "──┘└──────"); + Write(0xffff66, true, "*"); + Write(0x666666, false, "┌─o┌───┘└─┐V│ "); + Write(0xcccccc, false, "| 11 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "└──┤ ├"); + Write(0xffff66, true, "*"); + Write(0x666666, false, "──────"); + Write(0xff9900, false, "∧∧∧"); + Write(0x666666, false, "───────────┘└──┴──────┘└┘ "); + Write(0xcccccc, false, "| 10 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "┌──┤ ├┘┌─────"); + Write(0xff9900, false, "∧∧∧"); + Write(0x666666, false, "───────┐┌───────────────"); + Write(0xffff66, true, "* "); + Write(0xcccccc, false, "| 9 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "└──┤ 5 ├─┴─────o"); + Write(0xffff66, true, "*"); + Write(0x666666, false, "───────┐└┴o┌─────────"); + Write(0x66ff, false, "|("); + Write(0x666666, false, "──┤ "); + Write(0xcccccc, false, "| 8 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "┌"); + Write(0xffff66, true, "*"); + Write(0x666666, false, "─┤ 1P├────────┘o──"); + Write(0x66ff, false, "|("); + Write(0x666666, false, "──┴───┘o─────┬─o┌───┘ "); + Write(0xcccccc, false, "| 7 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "│└─┤ 2B├────────────────────────"); + Write(0xffff66, true, "*"); + Write(0x666666, false, "┌─┘┌─┘o──┐ "); + Write(0xcccccc, false, "| 6 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "└──┴┬┬┬┬┬┴───┐┌──o┌──────┐"); + Write(0xffff66, true, "*"); + Write(0x666666, false, "───────┘└──┴─────┘ "); + Write(0xcccccc, false, "| 5 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "V┌───────────┘└───┴───o┌─┘└──────┐┌────────"); + Write(0xffff66, true, "*"); + Write(0x666666, false, "o "); + Write(0xcccccc, false, "| 4 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "└┴───"); + Write(0xff0000, false, "┤|├"); + Write(0x666666, false, "──────────────┐└──┬───o┌─┘└┐"); + Write(0xffff66, true, "*"); + Write(0x666666, false, "─┐┌──┐└┐ "); + Write(0xcccccc, false, "| 3 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "┌─────────────o┌──────┴───┘"); + Write(0xffff66, true, "*"); + Write(0x666666, false, "──┐└───┘└┐│└─┐└─┤ "); + Write(0xcccccc, false, "| 2 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "| "); + Write(0x666666, false, "└──────────────┴─────o"); + Write(0xffff66, true, "*"); + Write(0x666666, false, "────┘o─┴──────┘└──┘o─┘ "); + Write(0xcccccc, false, "| 1 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "'-----------------------------------------------' \n \n"); + Console.ForegroundColor = color; Console.WriteLine(); } - private static void Write(int rgb, bool bold, string text){ + private static void Write(int rgb, bool bold, string text){ Console.Write($"\u001b[38;2;{(rgb>>16)&255};{(rgb>>8)&255};{rgb&255}{(bold ? ";1" : "")}m{text}"); - } -} + } +} \ No newline at end of file diff --git a/2017/calendar.svg b/2017/calendar.svg index 8d60d9172..8c532d567 100644 --- a/2017/calendar.svg +++ b/2017/calendar.svg @@ -1,55 +1,55 @@ - - - + + + ▄█▄ ▄▄█ ▄ ▄ ▄▄▄ ▄▄ ▄█▄ ▄▄▄ ▄█ ▄▄ ▄▄▄ ▄▄█ ▄▄▄ █▄█ █ █ █ █ █▄█ █ █ █ █ █ █▄ █ █ █ █ █ █▄█ -█ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ 0x0000 | 2017 +█ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ {'year': 2017} -|O| Naughty | Nice |O| -|O| -------------------+------------------- |O| -|O| The Easter Bunny | encse |O| -|O| lizthegrey | Kevin Yap |O| -|O| Mihai Maruseac | Jean-Noël Monette |O| -|O| jweinberg | Joe LeGasse |O| -|O| zenithlight | Christopher Lorton |O| -.-----------------------------------------------. -| o──────┬───────[─]──────┐┌┬──o┌─────────oTo─* | 25 ** -| ┌──────┘┌─────────┬────o││└───┘o┐*────oTo───┘ | 24 ** -| ├─────┐o┴────────┐└─────┘│o──┬──┘└───┤|├────* | 23 ** -| └────o└────────┐o┴──────o└┐┌─┘*─────────────┘ | 22 ** -| ┌───────────|(─┘┌─────────┘└─┐└────|(───────* | 21 ** -| ├───────────┤[]├┴────────────┴───o*───|(────┤ | 20 ** -| └───────┬┴┴┴┬o*──────────┤|├──────┘┌───┬───o│ | 19 ** -| *───────┤ ├┐└─────|(─────────┐┌──┘o─┐└────┘ | 18 ** -| └──────*┤ ├└───┐┌──∧∧∧─┤|├───┘└─────┴┐o───┐ | 17 ** -| ┌─*────┘┤ ├───┬┘├┴┴┴┴┬──[─]────┐┌───o└─┐┌─┘ | 16 ** -| └o└─────┴┬┬┬┴──*└─┤ ├─┬┴┴┴┴┴┬─┘└────┐┌┘└─┐ | 15 ** -| *──────────────┘┌─┤NAND├─┤ 4├─┐┌──┬─┘└───┤ | 14 ** -| └──────*o───────┴─┤GATE├─┤ 3├─┼┴┴┴┤┌─────┘ | 13 ** -| *──┤|├─┘┌─────────┴┬┬┬┬┘┌┤ V0├o┤ ├└┐┌──┬o | 12 ** -| ├──────*└───────┬───┴o└┐└┤ R0├─┤ A├o│├─o└┐ | 11 ** -| └─────o└───────*└─┐┌───┴o┤ ├─┤ L├─┘=┌──┘ | 10 ** -| *────┬┴┴┴┴┬────┘┌─┘└─────┴┬┬┬┬┬┴┐┤ U├──┐└──┐ | 9 ** -| ├────┤ ├─*o──┴─┐┌─────────┴─┐└┴┬┬┬┴──┘┌──┘ | 8 ** -| └─o*─┤PR2A├┐└────┐=└┐o──────┬──┘o┐┌┘o────┴──┐ | 7 ** -| ┌──┘┌┤ 03G├┴─────┘┌*└─────┬┐└────┤└─────────┤ | 6 ** -| ├───┴┴┬┬┬┬┴───∧∧∧─┘└─┤[]├*│└──┐o─┴─────────o│ | 5 ** -| └┐o┐*─────────∧∧∧────────┘└┐o┐└─────────────┘ | 4 ** -| o┴─┘└──────────*┌────┬────o└─┴┐┌──────┐o────┐ | 3 ** -| *──────────────┘└───o└─┬─────┐│└─┐┌──┐└─────┤ | 2 ** -| └───────────|(─∧∧∧────*└────o└┴──┘└─o└──────┘ | 1 ** -'-----------------------------------------------' +|O| Naughty | Nice |O| +|O| -------------------+------------------- |O| +|O| The Easter Bunny | encse |O| +|O| Martin Galese | Szabolcs Sipos |O| +|O| Balázs Dankó | wesen |O| +|O| Gábor Gyebnár | Daniel Willenson |O| +|O| Woodrow Hedberg | gkatai |O| +.-----------------------------------------------. +| ┌───────────────o┌*───────[─]────┐o─────────┐ | 25 ** +| └──────oTo───────┘└────*┌o┌────┐┌┘┌─────────┤ | 24 ** +| *───────────────────|(─┘├─┘┌──o└┘┌┴──────┐o─┘ | 23 ** +| └───┤|├───┬┴┴┴┴┬────*┌─o│o─┴─────┴──────o└──┐ | 22 ** +| *─[─]─[─]─┤ DY├────┘└──┴────∧∧∧────────────┤ | 21 ** +| ├─────────┤ EP├─────┐┌──∧∧∧──┤[]├───┐┌─*o──┘ | 20 ** +| └─────────┤ CT├────┬┘│V┌────┬──────o└┴o└───* | 19 ** +| ┌─────────┤ RR├o───┘┌┘└┴──o┌┘*─────┬┴┴┴┬───┘ | 18 ** +| ├─────────┤ ├─────┘o┬────┘┌┘┌────┤ 30├───* | 17 ** +| │o┬─┐*────┼┬┬┬┬┴───∧∧∧─┘┌───┐└─┴────┤ 29├┐┌─┘ | 16 ** +| └─┘┌┘└───*└┬┴┴┴┴┬───────┘o──┴──────┐┤ 83├┘└─┐ | 15 ** +| ┌──┘┌───o└─┤ ├──┐┌───────*o─────┴┤ P6├───┘ | 14 ** +| └┬──┘┌─oTo─┤ ├─o└┘┌─────o└───────┴┬┬┬┴───* | 13 ** +| o┘┌──┘┌────┤ v17├────┴─┐*──[─]─────────┐┌───┤ | 12 ** +| ┌─┘┌┴┴┴┴┴┬─┴┬┬┬┬┴──|(──┘└──────*┌─o┌───┘└─┐V│ | 11 ** +| └──┤ ├*──────∧∧∧───────────┘└──┴──────┘└┘ | 10 ** +| ┌──┤ ├┘┌─────∧∧∧───────┐┌───────────────* | 9 ** +| └──┤ 5 ├─┴─────o*───────┐└┴o┌─────────|(──┤ | 8 ** +| ┌*─┤ 1P├────────┘o──|(──┴───┘o─────┬─o┌───┘ | 7 ** +| │└─┤ 2B├────────────────────────*┌─┘┌─┘o──┐ | 6 ** +| └──┴┬┬┬┬┬┴───┐┌──o┌──────┐*───────┘└──┴─────┘ | 5 ** +| V┌───────────┘└───┴───o┌─┘└──────┐┌────────*o | 4 ** +| └┴───┤|├──────────────┐└──┬───o┌─┘└┐*─┐┌──┐└┐ | 3 ** +| ┌─────────────o┌──────┴───┘*──┐└───┘└┐│└─┐└─┤ | 2 ** +| └──────────────┴─────o*────┘o─┴──────┘└──┘o─┘ | 1 ** +'-----------------------------------------------' - \ No newline at end of file + \ No newline at end of file diff --git a/2018/Day01/README.md b/2018/Day01/README.md index f6c7e948e..8ccecebb9 100644 --- a/2018/Day01/README.md +++ b/2018/Day01/README.md @@ -3,4 +3,4 @@ "The good news is that the changes won't propagate to our time stream for another 25 days, and we have a device" - she attaches something to your wrist - "that will let you fix the changes with no such propagation delay. It's configured to send you 500 years further into the past every few days; that was the best we could do on such short notice." -Read the [full puzzle](https://adventofcode.com/2018/day/1). \ No newline at end of file +_Visit the website for the full story and [full puzzle](https://adventofcode.com/2018/day/1) description._ diff --git a/2018/Day21/Solution.cs b/2018/Day21/Solution.cs index c762cecca..f7ed345ae 100644 --- a/2018/Day21/Solution.cs +++ b/2018/Day21/Solution.cs @@ -1,112 +1,65 @@ using System; using System.Collections.Generic; -using System.IO; using System.Linq; -using System.Reflection; -using System.Runtime.Loader; -using System.Text; -using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.CSharp; -using Microsoft.CodeAnalysis.Emit; namespace AdventOfCode.Y2018.Day21; [ProblemName("Chronal Conversion")] class Solution : Solver { - public object PartOne(string input) => Run("one", input).First(); - public object PartTwo(string input) => Run("two", input).Last(); + public object PartOne(string input) => Run(input).First(); + public object PartTwo(string input) => Run(input).Last(); - IEnumerable Run(string name, string input) { - var run = Compile>(name, input, new int[]{28}); + public IEnumerable Run(string input) { + var breakpoint = 28; + var seen = new List(); - var seen = new List(); - foreach(var r in run(new int[] { 0, 0, 0, 0, 0, 0 })){ - if (seen.Contains(r[3])) { + foreach (var regs in Trace(input, breakpoint)) { + if (seen.Contains(regs[3])) { break; } - seen.Add(r[3]); - yield return r[3]; + seen.Add(regs[3]); + yield return regs[3]; } } - public Func Compile(string name, string input, int[] breakpoints) { - var code = CompileToCSharp(input, breakpoints); - var tree = SyntaxFactory.ParseSyntaxTree(code); - var systemRefLocation = typeof(object).GetTypeInfo().Assembly.Location; - var systemReference = MetadataReference.CreateFromFile(systemRefLocation); - var compilation = CSharpCompilation.Create(name) - .WithOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)) - .AddReferences(systemReference) - .AddSyntaxTrees(tree); + public IEnumerable Trace(string input, int breakpoint) { + var lines = input.Split("\n"); + var ipReg = int.Parse(lines.First().Split(" ")[1]); + var program = lines.Skip(1).Select(Compile).ToArray(); + var regs = new long[] { 0, 0, 0, 0, 0, 0 }; - var ms = new MemoryStream(); - EmitResult compilationResult = compilation.Emit(ms); - if (compilationResult.Success) { - ms.Seek(0, SeekOrigin.Begin); - var asm = AssemblyLoadContext.Default.LoadFromStream(ms); - var m = asm.GetType("RoslynCore.Helper").GetMethod("Run"); - return (Func)Delegate.CreateDelegate(typeof(Func), null, m); - } else { - foreach (Diagnostic codeIssue in compilationResult.Diagnostics) { - string issue = $"ID: {codeIssue.Id}, Message: {codeIssue.GetMessage()}, Location: { codeIssue.Location.GetLineSpan()}, Severity: { codeIssue.Severity}"; - Console.WriteLine(issue); + while (true) { + if (regs[ipReg] == breakpoint) { + yield return regs; } - - throw new Exception(); + program[regs[ipReg]](regs); + regs[ipReg]++; } } - string CompileToCSharp(string input, int[] breakpoints) { - var ipReg = int.Parse(input.Split("\n").First().Substring("#ip ".Length)); - var srcLines = input.Split("\n").Skip(1).ToArray(); - - var compiledStatements = new StringBuilder(); - - for (var ip = 0; ip < srcLines.Length; ip++) { - var line = srcLines[ip]; - var parts = line.Split(";")[0].Trim().Split(" "); - var stm = parts.Skip(1).Select(int.Parse).ToArray(); - var compiledStm = parts[0] switch { - "addr" => $"r[{stm[2]}] = r[{stm[0]}] + r[{stm[1]}]", - "addi" => $"r[{stm[2]}] = r[{stm[0]}] + {stm[1]}", - "mulr" => $"r[{stm[2]}] = r[{stm[0]}] * r[{stm[1]}]", - "muli" => $"r[{stm[2]}] = r[{stm[0]}] * {stm[1]}", - "banr" => $"r[{stm[2]}] = r[{stm[0]}] & r[{stm[1]}]", - "bani" => $"r[{stm[2]}] = r[{stm[0]}] & {stm[1]}", - "borr" => $"r[{stm[2]}] = r[{stm[0]}] | r[{stm[1]}]", - "bori" => $"r[{stm[2]}] = r[{stm[0]}] | {stm[1]}", - "setr" => $"r[{stm[2]}] = r[{stm[0]}]", - "seti" => $"r[{stm[2]}] = {stm[0]}", - "gtir" => $"r[{stm[2]}] = {stm[0]} > r[{stm[1]}] ? 1 : 0", - "gtri" => $"r[{stm[2]}] = r[{stm[0]}] > {stm[1]} ? 1 : 0", - "gtrr" => $"r[{stm[2]}] = r[{stm[0]}] > r[{stm[1]}] ? 1 : 0", - "eqir" => $"r[{stm[2]}] = {stm[0]} == r[{stm[1]}] ? 1 : 0", - "eqri" => $"r[{stm[2]}] = r[{stm[0]}] == {stm[1]} ? 1 : 0", - "eqrr" => $"r[{stm[2]}] = r[{stm[0]}] == r[{stm[1]}] ? 1 : 0", - _ => throw new ArgumentException() - }; - var brk = breakpoints.Contains(ip) ? "yield return r;" : ""; - compiledStatements.AppendLine($"\t\tcase {ip}: {brk} {compiledStm}; r[{ipReg}]++; break;"); - } - - return $@" - using System; - using System.Collections.Generic; - namespace RoslynCore - {{ - public static class Helper - {{ - public static IEnumerable Run(int[] r) {{ - while(true) {{ - switch (r[{ipReg}]) {{ - {compiledStatements.ToString()} - }} - }} - }} - }} - }} - "; + Action Compile(string line) { + var parts = line.Split(" "); + var op = parts[0]; + var args = parts.Skip(1).Select(long.Parse).ToArray(); + return op switch { + "addr" => regs => regs[args[2]] = regs[args[0]] + regs[args[1]], + "addi" => regs => regs[args[2]] = regs[args[0]] + args[1], + "mulr" => regs => regs[args[2]] = regs[args[0]] * regs[args[1]], + "muli" => regs => regs[args[2]] = regs[args[0]] * args[1], + "banr" => regs => regs[args[2]] = regs[args[0]] & regs[args[1]], + "bani" => regs => regs[args[2]] = regs[args[0]] & args[1], + "borr" => regs => regs[args[2]] = regs[args[0]] | regs[args[1]], + "bori" => regs => regs[args[2]] = regs[args[0]] | args[1], + "setr" => regs => regs[args[2]] = regs[args[0]], + "seti" => regs => regs[args[2]] = args[0], + "gtir" => regs => regs[args[2]] = args[0] > regs[args[1]] ? 1 : 0, + "gtri" => regs => regs[args[2]] = regs[args[0]] > args[1] ? 1 : 0, + "gtrr" => regs => regs[args[2]] = regs[args[0]] > regs[args[1]] ? 1 : 0, + "eqir" => regs => regs[args[2]] = args[0] == regs[args[1]] ? 1 : 0, + "eqri" => regs => regs[args[2]] = regs[args[0]] == args[1] ? 1 : 0, + "eqrr" => regs => regs[args[2]] = regs[args[0]] == regs[args[1]] ? 1 : 0, + _ => throw new ArgumentException() + }; } - } diff --git a/2018/README.md b/2018/README.md index ad9b93160..1d7ec08e1 100644 --- a/2018/README.md +++ b/2018/README.md @@ -1,6 +1,4 @@ - # Advent of Code (2018) Check out https://adventofcode.com/2018. - diff --git a/2018/SplashScreen.cs b/2018/SplashScreen.cs index 144ab8e5d..56bcdf187 100644 --- a/2018/SplashScreen.cs +++ b/2018/SplashScreen.cs @@ -1,4 +1,3 @@ - using System; namespace AdventOfCode.Y2018; @@ -9,163 +8,163 @@ public void Show() { var color = Console.ForegroundColor; Write(0xcc00, false, " ▄█▄ ▄▄█ ▄ ▄ ▄▄▄ ▄▄ ▄█▄ ▄▄▄ ▄█ ▄▄ ▄▄▄ ▄▄█ ▄▄▄\n █▄█ █ █ █ █ █▄█ █ █ █ █ █ █▄ "); - Write(0xcc00, false, " █ █ █ █ █ █▄█\n █ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ $year = 2018\n "); - Write(0xcc00, false, "\n "); - Write(0xcccccc, false, ". . . . . 25 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, ". . . . "); - Write(0x886655, false, "\\ / "); - Write(0xcccccc, false, ". 24 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, ". . "); - Write(0x886655, false, "\\_\\_\\|_/__/ "); - Write(0xcccccc, false, "23 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, ". . . "); - Write(0xff0000, true, "o"); - Write(0x886655, false, "-_/"); - Write(0xcccccc, false, ".()"); - Write(0x886655, false, "__------- "); - Write(0xcccccc, false, "22 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, ". . "); - Write(0xffff66, true, "* "); - Write(0x886655, false, "\\____ "); - Write(0xcccccc, false, "21 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, ". "); - Write(0xff0000, false, "|"); - Write(0xcccccc, false, "\\| \\_"); - Write(0x886655, false, "\\_ "); - Write(0xcccccc, false, "___ / 20 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, ". |"); - Write(0xff0000, false, "\\| "); - Write(0x886655, false, "/ | || "); - Write(0xcccccc, false, "19 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, ". "); - Write(0x66ff, false, "_________"); - Write(0xff0000, false, "|"); - Write(0xcccccc, false, "\\|"); - Write(0x66ff, false, "_________ "); - Write(0x886655, false, "/ | || "); - Write(0xcccccc, false, "18 "); - Write(0xffff66, false, "**\n "); - Write(0x66ff, false, "___----- "); - Write(0xcccccc, false, "########### ##### "); - Write(0x66ff, false, "-----___ "); - Write(0xcccccc, false, "17 "); - Write(0xffff66, false, "**\n "); - Write(0x66ff, false, "___--- "); - Write(0xcccccc, false, "### ##### ######### ##### "); - Write(0x66ff, false, "---___ "); - Write(0xcccccc, false, "16 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, ") )) ) ) __"); - Write(0xff0000, false, "__ "); - Write(0xcccccc, false, "15 "); - Write(0xffff66, false, "**\n "); - Write(0xff0000, false, ".-"); - Write(0xcccccc, false, "("); - Write(0xff0000, false, "-"); - Write(0xcccccc, false, "(("); - Write(0xff0000, false, "-. "); - Write(0x9900, false, ".--"); - Write(0xcccccc, false, "("); - Write(0x9900, false, "-"); - Write(0xcccccc, false, "("); - Write(0x9900, false, "-. "); - Write(0xff0000, false, "/ "); - Write(0xcccccc, false, "_"); - Write(0xff0000, false, "\\ "); - Write(0xcccccc, false, "\\ 14 "); - Write(0xffff66, false, "**\n "); - Write(0xff0000, false, "'------'_ "); - Write(0x9900, false, "'------'_ "); - Write(0xff0000, false, "|"); - Write(0xcccccc, false, "/| |/"); - Write(0xff0000, false, "| "); - Write(0xcccccc, false, "13 "); - Write(0xffff66, false, "**\n "); - Write(0xff0000, false, "| | ) "); - Write(0x9900, false, "| | ) "); - Write(0xcccccc, false, "|_| "); - Write(0xff0000, false, "|/"); - Write(0xcccccc, false, "| 12 "); - Write(0xffff66, false, "**\n "); - Write(0xff0000, false, "| |/ "); - Write(0x9900, false, "| |/ "); - Write(0xcccccc, false, "|/"); - Write(0xff0000, false, "| "); - Write(0xcccccc, false, "11 "); - Write(0xffff66, false, "**\n "); - Write(0xff0000, false, "'------' "); - Write(0x9900, false, "'------' "); - Write(0xff0000, false, "|/"); - Write(0xcccccc, false, "| 10 "); - Write(0xffff66, false, "**\n "); - Write(0xff0000, false, "_ __ "); - Write(0xcccccc, false, "|/"); - Write(0xff0000, false, "| "); - Write(0xcccccc, false, " 9 "); - Write(0xffff66, false, "**\n "); - Write(0xff0000, false, ".---_ _ "); - Write(0x880000, false, "| "); - Write(0xff0000, false, "|\\__"); - Write(0x880000, false, "/"); - Write(0xff0000, false, "_/) |/"); - Write(0xcccccc, false, "| 8 "); - Write(0xffff66, false, "**\n "); - Write(0xff0000, false, "/ "); - Write(0x880000, false, "/ "); - Write(0xff0000, false, "/\\| "); - Write(0x999999, false, "__ "); - Write(0x880000, false, ") "); - Write(0xff0000, false, ")__ "); - Write(0x880000, false, "_|"); - Write(0xff0000, false, "_| / "); - Write(0xcccccc, false, "|/"); - Write(0xff0000, false, "| "); - Write(0xcccccc, false, " 7 "); - Write(0xffff66, false, "**\n "); - Write(0xff0000, false, "/ "); - Write(0x880000, false, "/ | "); - Write(0xff0000, false, "\\ "); - Write(0xffff66, true, "* "); - Write(0x999999, false, "/ / \\ "); - Write(0x880000, false, "( "); - Write(0xff0000, false, "( \\_"); - Write(0x880000, false, "/"); - Write(0xff0000, false, "_/ / |/"); - Write(0xcccccc, false, "| 6 "); - Write(0xffff66, false, "**\n "); - Write(0xff0000, false, "/ "); - Write(0x880000, false, "/ \\ "); - Write(0xff0000, false, "\\ "); - Write(0x999999, false, "| | \\/ "); - Write(0x880000, false, "\\_"); - Write(0xff0000, false, "\\____________/ "); - Write(0xcccccc, false, "|_| 5 "); - Write(0xffff66, false, "**\n "); - Write(0xff0000, false, "/ "); - Write(0x880000, false, "/ / \\ "); - Write(0xff0000, false, "\\ "); - Write(0x999999, false, "\\_\\______X_____X_____X_, "); - Write(0xcccccc, false, " 4 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "./~~~~~~~~~~~\\. 3 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "( .\",^. -\". '.~ ) 2 "); - Write(0xffff66, false, "**\n "); - Write(0xcccccc, false, "_'~~~~~~~~~~~~~'_________ ___ __ _ _ _ _ 1 "); - Write(0xffff66, false, "**\n \n"); - + Write(0xcc00, false, " █ █ █ █ █ █▄█\n █ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ 0x0000 | 2018\n "); + Write(0xcc00, false, " \n "); + Write(0xcccccc, false, ". . . . . 25 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, ". . . . "); + Write(0x886655, false, "\\ / "); + Write(0xcccccc, false, ". 24 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, ". . "); + Write(0x886655, false, "\\_\\_\\|_/__/ "); + Write(0xcccccc, false, "23 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, ". . . "); + Write(0xff0000, true, "o"); + Write(0x886655, false, "-_/"); + Write(0xcccccc, false, ".()"); + Write(0x886655, false, "__------- "); + Write(0xcccccc, false, "22 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, ". . "); + Write(0xffff66, true, "* "); + Write(0x886655, false, "\\____ "); + Write(0xcccccc, false, "21 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, ". "); + Write(0xff0000, false, "|"); + Write(0xcccccc, false, "\\| \\_"); + Write(0x886655, false, "\\_ "); + Write(0xcccccc, false, "___ / 20 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, ". |"); + Write(0xff0000, false, "\\| "); + Write(0x886655, false, "/ | || "); + Write(0xcccccc, false, "19 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, ". "); + Write(0x66ff, false, "_________"); + Write(0xff0000, false, "|"); + Write(0xcccccc, false, "\\|"); + Write(0x66ff, false, "_________ "); + Write(0x886655, false, "/ | || "); + Write(0xcccccc, false, "18 "); + Write(0xffff66, false, "**\n "); + Write(0x66ff, false, "___----- "); + Write(0xcccccc, false, "########### ##### "); + Write(0x66ff, false, "-----___ "); + Write(0xcccccc, false, "17 "); + Write(0xffff66, false, "**\n "); + Write(0x66ff, false, "___--- "); + Write(0xcccccc, false, "### ##### ######### ##### "); + Write(0x66ff, false, "---___ "); + Write(0xcccccc, false, "16 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, ") )) ) ) __"); + Write(0xff0000, false, "__ "); + Write(0xcccccc, false, "15 "); + Write(0xffff66, false, "**\n "); + Write(0xff0000, false, ".-"); + Write(0xcccccc, false, "("); + Write(0xff0000, false, "-"); + Write(0xcccccc, false, "(("); + Write(0xff0000, false, "-. "); + Write(0x9900, false, ".--"); + Write(0xcccccc, false, "("); + Write(0x9900, false, "-"); + Write(0xcccccc, false, "("); + Write(0x9900, false, "-. "); + Write(0xff0000, false, "/ "); + Write(0xcccccc, false, "_"); + Write(0xff0000, false, "\\ "); + Write(0xcccccc, false, "\\ 14 "); + Write(0xffff66, false, "**\n "); + Write(0xff0000, false, "'------'_ "); + Write(0x9900, false, "'------'_ "); + Write(0xff0000, false, "|"); + Write(0xcccccc, false, "/| |/"); + Write(0xff0000, false, "| "); + Write(0xcccccc, false, "13 "); + Write(0xffff66, false, "**\n "); + Write(0xff0000, false, "| | ) "); + Write(0x9900, false, "| | ) "); + Write(0xcccccc, false, "|_| "); + Write(0xff0000, false, "|/"); + Write(0xcccccc, false, "| 12 "); + Write(0xffff66, false, "**\n "); + Write(0xff0000, false, "| |/ "); + Write(0x9900, false, "| |/ "); + Write(0xcccccc, false, "|/"); + Write(0xff0000, false, "| "); + Write(0xcccccc, false, "11 "); + Write(0xffff66, false, "**\n "); + Write(0xff0000, false, "'------' "); + Write(0x9900, false, "'------' "); + Write(0xff0000, false, "|/"); + Write(0xcccccc, false, "| 10 "); + Write(0xffff66, false, "**\n "); + Write(0xff0000, false, "_ __ "); + Write(0xcccccc, false, "|/"); + Write(0xff0000, false, "| "); + Write(0xcccccc, false, " 9 "); + Write(0xffff66, false, "**\n "); + Write(0xff0000, false, ".---_ _ "); + Write(0x880000, false, "| "); + Write(0xff0000, false, "|\\__"); + Write(0x880000, false, "/"); + Write(0xff0000, false, "_/) |/"); + Write(0xcccccc, false, "| 8 "); + Write(0xffff66, false, "**\n "); + Write(0xff0000, false, "/ "); + Write(0x880000, false, "/ "); + Write(0xff0000, false, "/\\| "); + Write(0x999999, false, "__ "); + Write(0x880000, false, ") "); + Write(0xff0000, false, ")__ "); + Write(0x880000, false, "_|"); + Write(0xff0000, false, "_| / "); + Write(0xcccccc, false, "|/"); + Write(0xff0000, false, "| "); + Write(0xcccccc, false, " 7 "); + Write(0xffff66, false, "**\n "); + Write(0xff0000, false, "/ "); + Write(0x880000, false, "/ | "); + Write(0xff0000, false, "\\ "); + Write(0xffff66, true, "* "); + Write(0x999999, false, "/ / \\ "); + Write(0x880000, false, "( "); + Write(0xff0000, false, "( \\_"); + Write(0x880000, false, "/"); + Write(0xff0000, false, "_/ / |/"); + Write(0xcccccc, false, "| 6 "); + Write(0xffff66, false, "**\n "); + Write(0xff0000, false, "/ "); + Write(0x880000, false, "/ \\ "); + Write(0xff0000, false, "\\ "); + Write(0x999999, false, "| | \\/ "); + Write(0x880000, false, "\\_"); + Write(0xff0000, false, "\\____________/ "); + Write(0xcccccc, false, "|_| 5 "); + Write(0xffff66, false, "**\n "); + Write(0xff0000, false, "/ "); + Write(0x880000, false, "/ / \\ "); + Write(0xff0000, false, "\\ "); + Write(0x999999, false, "\\_\\______X_____X_____X_, "); + Write(0xcccccc, false, " 4 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "./~~~~~~~~~~~\\. 3 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "( .\",^. -\". '.~ ) 2 "); + Write(0xffff66, false, "**\n "); + Write(0xcccccc, false, "_'~~~~~~~~~~~~~'_________ ___ __ _ _ _ _ 1 "); + Write(0xffff66, false, "**\n \n"); + Console.ForegroundColor = color; Console.WriteLine(); } - private static void Write(int rgb, bool bold, string text){ + private static void Write(int rgb, bool bold, string text){ Console.Write($"\u001b[38;2;{(rgb>>16)&255};{(rgb>>8)&255};{rgb&255}{(bold ? ";1" : "")}m{text}"); - } -} + } +} \ No newline at end of file diff --git a/2018/calendar.svg b/2018/calendar.svg index dcce84fe2..341b34a67 100644 --- a/2018/calendar.svg +++ b/2018/calendar.svg @@ -1,46 +1,46 @@ - - - + + + ▄█▄ ▄▄█ ▄ ▄ ▄▄▄ ▄▄ ▄█▄ ▄▄▄ ▄█ ▄▄ ▄▄▄ ▄▄█ ▄▄▄ █▄█ █ █ █ █ █▄█ █ █ █ █ █ █▄ █ █ █ █ █ █▄█ -█ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ $year = 2018 +█ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ 0x0000 | 2018 - . . . . . 25 ** - . . . . \ / . 24 ** - . . \_\_\|_/__/ 23 ** - . . . o-_/.()__------- 22 ** - . . * \____ 21 ** - . |\| \_\_ ___ / 20 ** - . |\| / | || 19 ** - . _________|\|_________ / | || 18 ** - ___----- ########### ##### -----___ 17 ** -___--- ### ##### ######### ##### ---___ 16 ** - ) )) ) ) ____ 15 ** - .-(-((-. .--(-(-. / _\ \ 14 ** - '------'_ '------'_ |/| |/| 13 ** - | | ) | | ) |_| |/| 12 ** - | |/ | |/ |/| 11 ** - '------' '------' |/| 10 ** - _ __ |/| 9 ** - .---_ _ | |\__/_/) |/| 8 ** - / / /\| __ ) )__ _|_| / |/| 7 ** - / / | \ * / / \ ( ( \_/_/ / |/| 6 ** - / / \ \ | | \/ \_\____________/ |_| 5 ** - / / / \ \ \_\______X_____X_____X_, 4 ** - ./~~~~~~~~~~~\. 3 ** -( .",^. -". '.~ ) 2 ** -_'~~~~~~~~~~~~~'_________ ___ __ _ _ _ _ 1 ** + . . . . . 25 ** + . . . . \ / . 24 ** + . . \_\_\|_/__/ 23 ** + . . . o-_/.()__------- 22 ** + . . * \____ 21 ** + . |\| \_\_ ___ / 20 ** + . |\| / | || 19 ** + . _________|\|_________ / | || 18 ** + ___----- ########### ##### -----___ 17 ** +___--- ### ##### ######### ##### ---___ 16 ** + ) )) ) ) ____ 15 ** + .-(-((-. .--(-(-. / _\ \ 14 ** + '------'_ '------'_ |/| |/| 13 ** + | | ) | | ) |_| |/| 12 ** + | |/ | |/ |/| 11 ** + '------' '------' |/| 10 ** + _ __ |/| 9 ** + .---_ _ | |\__/_/) |/| 8 ** + / / /\| __ ) )__ _|_| / |/| 7 ** + / / | \ * / / \ ( ( \_/_/ / |/| 6 ** + / / \ \ | | \/ \_\____________/ |_| 5 ** + / / / \ \ \_\______X_____X_____X_, 4 ** + ./~~~~~~~~~~~\. 3 ** +( .",^. -". '.~ ) 2 ** +_'~~~~~~~~~~~~~'_________ ___ __ _ _ _ _ 1 ** - \ No newline at end of file + \ No newline at end of file diff --git a/2019/Day01/README.md b/2019/Day01/README.md index c17785a59..0cca1558b 100644 --- a/2019/Day01/README.md +++ b/2019/Day01/README.md @@ -3,4 +3,4 @@ Santa has become stranded at the edge of the Solar System while delivering prese 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! -Read the [full puzzle](https://adventofcode.com/2019/day/1). \ No newline at end of file +_Visit the website for the full story and [full puzzle](https://adventofcode.com/2019/day/1) description._ diff --git a/2019/README.md b/2019/README.md index 4bd1241ac..27bdfaccb 100644 --- a/2019/README.md +++ b/2019/README.md @@ -1,6 +1,4 @@ - # Advent of Code (2019) Check out https://adventofcode.com/2019. - diff --git a/2019/SplashScreen.cs b/2019/SplashScreen.cs index 9e68101b8..9025b076f 100644 --- a/2019/SplashScreen.cs +++ b/2019/SplashScreen.cs @@ -1,4 +1,3 @@ - using System; namespace AdventOfCode.Y2019; @@ -9,185 +8,178 @@ public void Show() { var color = Console.ForegroundColor; Write(0xcc00, false, " ▄█▄ ▄▄█ ▄ ▄ ▄▄▄ ▄▄ ▄█▄ ▄▄▄ ▄█ ▄▄ ▄▄▄ ▄▄█ ▄▄▄\n █▄█ █ █ █ █ █▄█ █ █ █ █ █ █▄ "); - Write(0xcc00, false, " █ █ █ █ █ █▄█\n █ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ $year = 2019\n "); - Write(0xcc00, false, "\n "); - Write(0x666666, false, " ''.. ':. '. "); - Write(0x333333, false, ". "); - Write(0xcccccc, false, "25 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, "....... "); - Write(0x333333, false, ".."); - Write(0x666666, false, " ''. '. "); - Write(0x333333, false, ". "); - Write(0xbebcbc, true, ". "); - Write(0xcccccc, false, "24 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " '''''... "); - Write(0x333333, false, "."); - Write(0x666666, false, " ''. '. "); - Write(0x333333, false, "."); - Write(0x666666, false, " ' "); - Write(0xcccccc, false, "23 "); - Write(0xffff66, false, "**\n "); - Write(0x333333, false, "."); - Write(0x666666, false, " ''.. '. '. "); - Write(0xffffff, true, ". "); - Write(0xcccccc, false, "22 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, "...... ''. '. "); - Write(0x333333, false, "."); - Write(0x666666, false, " '. "); - Write(0xcccccc, false, "21 "); - Write(0xffff66, false, "**\n "); - Write(0x333333, false, ".."); - Write(0x666666, false, " ''''... '. '."); - Write(0x333333, false, "."); - Write(0x666666, false, " : "); - Write(0xcdc1b2, true, ". "); - Write(0xcccccc, false, "20 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " ''.. "); - Write(0x333333, false, ". ."); - Write(0x666666, false, "'. "); - Write(0x333333, false, "."); - Write(0x666666, false, " '. "); - Write(0x333333, false, "."); - Write(0x666666, false, "'. "); - Write(0xcccccc, false, "19 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, "..... ''. "); - Write(0x333333, false, "."); - Write(0x666666, false, " '. "); - Write(0x333333, false, "."); - Write(0x666666, false, "'. '"); - Write(0x456efe, true, "o "); - Write(0xcccccc, false, "18 "); - Write(0xffff66, false, "**\n "); - Write(0x333333, false, "."); - Write(0x666666, false, " ''''... '. '. ': '. "); - Write(0xcccccc, false, "17 "); - Write(0xffff66, false, "**\n "); - Write(0x333333, false, "."); - Write(0x666666, false, " '.. "); - Write(0x333333, false, "."); - Write(0x666666, false, " '. '. "); - Write(0xbee4e7, true, "o"); - Write(0x666666, false, " : "); - Write(0xcccccc, false, "16 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " '. '. '. : : "); - Write(0xcccccc, false, "15 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, "'''''... '. "); - Write(0x333333, false, "."); - Write(0x666666, false, " '. "); - Write(0xebc982, true, "(O)"); - Write(0x666666, false, " : '. "); - Write(0xcccccc, false, "14 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " ''.. '. '. '. "); - Write(0x333333, false, "."); - Write(0x666666, false, " '. :"); - Write(0x333333, false, ". "); - Write(0xcccccc, false, "13 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, "''''..."); - Write(0x333333, false, "."); - Write(0x666666, false, " '. "); - Write(0x333333, false, "."); - Write(0x666666, false, " '. '"); - Write(0xd2beab, true, "O"); - Write(0x666666, false, " '. : : "); - Write(0xcccccc, false, "12 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " ''. '. : '. : '. : "); - Write(0xcccccc, false, "11 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, "'''''.. '. '. "); - Write(0x333333, false, ". "); - Write(0xbabdb6, true, "."); - Write(0x333333, false, ". ."); - Write(0x666666, false, " : '. : '. "); - Write(0xcccccc, false, "10 "); - Write(0xffff66, false, "**\n "); - Write(0x333333, false, ".."); - Write(0x666666, false, " '. '. '. '. : : : : "); - Write(0xcccccc, false, " 9 "); - Write(0xffff66, false, "**\n "); - Write(0x333333, false, ". ."); - Write(0x666666, false, " : '. "); - Write(0x333333, false, ". "); - Write(0xf7a859, true, ". "); - Write(0x333333, false, "."); - Write(0x666666, false, " : : "); - Write(0x333333, false, "."); - Write(0x666666, false, " : "); - Write(0x333333, false, "."); - Write(0x666666, false, " : : "); - Write(0xcccccc, false, " 8 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, "'''. "); - Write(0x333333, false, ".."); - Write(0x666666, false, " : : : : : : "); - Write(0x333333, false, ". ."); - Write(0x666666, false, ": : "); - Write(0xcccccc, false, " 7 "); - Write(0xffff66, false, "**\n "); - Write(0xffff66, true, "* "); - Write(0xbebcbe, true, ". "); - Write(0x333333, false, "."); - Write(0x666666, false, ": : : "); - Write(0x333333, false, "."); - Write(0x666666, false, ": : : "); - Write(0x333333, false, "."); - Write(0x666666, false, ": : "); - Write(0xcccccc, false, " 6 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, "...' : : : : : "); - Write(0x333333, false, "."); - Write(0x666666, false, " : : "); - Write(0x333333, false, "."); - Write(0x666666, false, " : "); - Write(0xcccccc, false, " 5 "); - Write(0xffff66, false, "**\n "); - Write(0xe3e2e0, true, "."); - Write(0x666666, false, " .' : "); - Write(0x333333, false, "."); - Write(0x666666, false, " : : "); - Write(0x333333, false, "."); - Write(0x666666, false, " : : : "); - Write(0xcccccc, false, " 4 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " .' .' "); - Write(0x333333, false, "."); - Write(0x666666, false, ".' .' : : : : "); - Write(0xcccccc, false, " 3 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, ".....'' "); - Write(0x333333, false, "."); - Write(0x91a5bd, true, "."); - Write(0x666666, false, "' "); - Write(0x333333, false, "."); - Write(0x666666, false, " .' : :"); - Write(0x333333, false, "."); - Write(0x666666, false, " .' : "); - Write(0x333333, false, "."); - Write(0x666666, false, " .' "); - Write(0xcccccc, false, " 2 "); - Write(0xffff66, false, "**\n "); - Write(0x666666, false, " ..' .' :"); - Write(0x333333, false, "."); - Write(0x666666, false, " .' "); - Write(0x333333, false, "."); - Write(0x666666, false, " : .' : "); - Write(0xcccccc, false, " 1 "); - Write(0xffff66, false, "**\n \n"); - + Write(0xcc00, false, " █ █ █ █ █ █▄█\n █ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ sub y{2019}\n \n"); + Write(0xcc00, false, " "); + Write(0x666666, false, " ''.. ':. '. "); + Write(0xcccccc, false, "25 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, "....... "); + Write(0x333333, false, "."); + Write(0x666666, false, " ''. '. "); + Write(0xbebcbc, true, ". "); + Write(0xcccccc, false, "24 "); + Write(0xffff66, false, "**\n "); + Write(0x333333, false, "."); + Write(0x666666, false, " '''''... ''. '. "); + Write(0x333333, false, "."); + Write(0x666666, false, " ' "); + Write(0xcccccc, false, "23 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " ''.. '. '. "); + Write(0xffffff, true, ". "); + Write(0xcccccc, false, "22 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, "...... "); + Write(0x333333, false, "."); + Write(0x666666, false, " ''."); + Write(0x333333, false, ". ."); + Write(0x666666, false, " '. "); + Write(0x333333, false, "."); + Write(0x666666, false, " '. "); + Write(0xcccccc, false, "21 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " ''''... "); + Write(0x333333, false, "."); + Write(0x666666, false, "'. "); + Write(0x333333, false, "."); + Write(0x666666, false, " '. : "); + Write(0xcdc1b2, true, ". "); + Write(0x333333, false, ". "); + Write(0xcccccc, false, "20 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " ''.. '. "); + Write(0x333333, false, "."); + Write(0x666666, false, " '."); + Write(0x333333, false, "."); + Write(0x666666, false, " '. "); + Write(0xcccccc, false, "19 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, "..... ''. '. '. '"); + Write(0x456efe, true, "o "); + Write(0x333333, false, ". "); + Write(0xcccccc, false, "18 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " ''''... '. '. ': '."); + Write(0x333333, false, ". "); + Write(0xcccccc, false, "17 "); + Write(0xffff66, false, "**\n "); + Write(0x333333, false, "."); + Write(0x666666, false, " '.. '. '. "); + Write(0xbee4e7, true, "o"); + Write(0x333333, false, "."); + Write(0x666666, false, " : "); + Write(0xcccccc, false, "16 "); + Write(0xffff66, false, "**\n "); + Write(0x333333, false, ". ."); + Write(0x666666, false, " '. '. "); + Write(0x333333, false, "."); + Write(0x666666, false, " '. "); + Write(0x333333, false, "."); + Write(0x666666, false, " : : "); + Write(0xcccccc, false, "15 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, "'''''... '. "); + Write(0x333333, false, ". ."); + Write(0x666666, false, " '. "); + Write(0xebc982, true, "(O)"); + Write(0x666666, false, " : '. "); + Write(0xcccccc, false, "14 "); + Write(0xffff66, false, "**\n "); + Write(0x333333, false, "."); + Write(0x666666, false, " ''.. '. '. "); + Write(0x333333, false, ".."); + Write(0x666666, false, " '. '. : "); + Write(0xcccccc, false, "13 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, "''''... '. '. '"); + Write(0xd2beab, true, "O"); + Write(0x666666, false, " '. : :"); + Write(0x333333, false, ". "); + Write(0xcccccc, false, "12 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " ''. '."); + Write(0x333333, false, ". ."); + Write(0x666666, false, " : '. : '. : "); + Write(0xcccccc, false, "11 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, "'''''.. '. '. "); + Write(0x333333, false, ". . "); + Write(0xbabdb6, true, "."); + Write(0x666666, false, " : "); + Write(0x333333, false, "."); + Write(0x666666, false, " '. : '. "); + Write(0xcccccc, false, "10 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " '. '. '. '. "); + Write(0x333333, false, "."); + Write(0x666666, false, " : : : : "); + Write(0xcccccc, false, " 9 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " : '."); + Write(0x333333, false, ". "); + Write(0xf7a859, true, ". "); + Write(0x333333, false, "."); + Write(0x666666, false, " : :"); + Write(0x333333, false, "."); + Write(0x666666, false, " : : : "); + Write(0xcccccc, false, " 8 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, "'''. "); + Write(0x333333, false, "."); + Write(0x666666, false, ":"); + Write(0x333333, false, "."); + Write(0x666666, false, " : :"); + Write(0x333333, false, "."); + Write(0x666666, false, " : : : : : "); + Write(0xcccccc, false, " 7 "); + Write(0xffff66, false, "**\n "); + Write(0xffff66, true, "* "); + Write(0xbebcbe, true, "."); + Write(0x666666, false, " : : : : : : "); + Write(0x333333, false, "."); + Write(0x666666, false, " : : "); + Write(0xcccccc, false, " 6 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, "...' "); + Write(0x333333, false, "."); + Write(0x666666, false, ": : : : "); + Write(0x333333, false, "."); + Write(0x666666, false, ": : "); + Write(0x333333, false, "."); + Write(0x666666, false, ": : "); + Write(0xcccccc, false, " 5 "); + Write(0xffff66, false, "**\n "); + Write(0x333333, false, ". "); + Write(0xe3e2e0, true, "."); + Write(0x333333, false, "."); + Write(0x666666, false, " .' : : : : : : "); + Write(0xcccccc, false, " 4 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " .' .' .' "); + Write(0x333333, false, "."); + Write(0x666666, false, " .' : : : : "); + Write(0xcccccc, false, " 3 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, ".....'' "); + Write(0x91a5bd, true, "."); + Write(0x666666, false, "' .' : : .' "); + Write(0x333333, false, "."); + Write(0x666666, false, " : .' "); + Write(0xcccccc, false, " 2 "); + Write(0xffff66, false, "**\n "); + Write(0x666666, false, " ..' .' : "); + Write(0x333333, false, "."); + Write(0x666666, false, " .' : .'"); + Write(0x333333, false, "."); + Write(0x666666, false, " : "); + Write(0xcccccc, false, " 1 "); + Write(0xffff66, false, "**\n \n"); + Console.ForegroundColor = color; Console.WriteLine(); } - private static void Write(int rgb, bool bold, string text){ + private static void Write(int rgb, bool bold, string text){ Console.Write($"\u001b[38;2;{(rgb>>16)&255};{(rgb>>8)&255};{rgb&255}{(bold ? ";1" : "")}m{text}"); - } -} + } +} \ No newline at end of file diff --git a/2019/calendar.svg b/2019/calendar.svg index 80ce35dab..171bad8d6 100644 --- a/2019/calendar.svg +++ b/2019/calendar.svg @@ -1,46 +1,46 @@ - - - + + + ▄█▄ ▄▄█ ▄ ▄ ▄▄▄ ▄▄ ▄█▄ ▄▄▄ ▄█ ▄▄ ▄▄▄ ▄▄█ ▄▄▄ █▄█ █ █ █ █ █▄█ █ █ █ █ █ █▄ █ █ █ █ █ █▄█ -█ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ $year = 2019 +█ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ sub y{2019} - ''.. ':. '. . 25 ** -....... .. ''. '. . . 24 ** - '''''... . ''. '. . ' 23 ** - . ''.. '. '. . 22 ** -...... ''. '. . '. 21 ** - .. ''''... '. '.. : . 20 ** - ''.. . .'. . '. .'. 19 ** -..... ''. . '. .'. 'o 18 ** -. ''''... '. '. ': '. 17 ** - . '.. . '. '. o : 16 ** - '. '. '. : : 15 ** -'''''... '. . '. (O) : '. 14 ** - ''.. '. '. '. . '. :. 13 ** -''''.... '. . '. 'O '. : : 12 ** - ''. '. : '. : '. : 11 ** -'''''.. '. '. . .. . : '. : '. 10 ** - .. '. '. '. '. : : : : 9 ** -. . : '. . . . : : . : . : : 8 ** -'''. .. : : : : : : . .: : 7 ** - * . .: : : .: : : .: : 6 ** -...' : : : : : . : : . : 5 ** - . .' : . : : . : : : 4 ** - .' .' ..' .' : : : : 3 ** -.....'' ..' . .' : :. .' : . .' 2 ** - ..' .' :. .' . : .' : 1 ** + ''.. ':. '. 25 ** +....... . ''. '. . 24 ** +. '''''... ''. '. . ' 23 ** + ''.. '. '. . 22 ** +...... . ''.. . '. . '. 21 ** + ''''... .'. . '. : . . 20 ** + ''.. '. . '.. '. 19 ** +..... ''. '. '. 'o . 18 ** + ''''... '. '. ': '.. 17 ** + . '.. '. '. o. : 16 ** + . . '. '. . '. . : : 15 ** +'''''... '. . . '. (O) : '. 14 ** + . ''.. '. '. .. '. '. : 13 ** +''''... '. '. 'O '. : :. 12 ** + ''. '.. . : '. : '. : 11 ** +'''''.. '. '. . . . : . '. : '. 10 ** + '. '. '. '. . : : : : 9 ** + : '.. . . : :. : : : 8 ** +'''. .:. : :. : : : : : 7 ** + * . : : : : : : . : : 6 ** +...' .: : : : .: : .: : 5 ** + . .. .' : : : : : : 4 ** + .' .' .' . .' : : : : 3 ** +.....'' .' .' : : .' . : .' 2 ** + ..' .' : . .' : .'. : 1 ** - \ No newline at end of file + \ No newline at end of file diff --git a/2020/Day01/README.md b/2020/Day01/README.md index 9197ad1e0..afa2c5f0e 100644 --- a/2020/Day01/README.md +++ b/2020/Day01/README.md @@ -3,4 +3,4 @@ After saving Christmas [five years in a row](/events), you've decided to take a The tropical island has its own currency and is entirely cash-only. The gold coins used there have a little picture of a starfish; the locals just call them stars. None of the currency exchanges seem to have heard of them, but somehow, you'll need to find fifty of these coins by the time you arrive so you can pay the deposit on your room. -Read the [full puzzle](https://adventofcode.com/2020/day/1). \ No newline at end of file +_Visit the website for the full story and [full puzzle](https://adventofcode.com/2020/day/1) description._ diff --git a/2020/README.md b/2020/README.md index 909ac8d77..6e92a1b05 100644 --- a/2020/README.md +++ b/2020/README.md @@ -1,6 +1,4 @@ - # Advent of Code (2020) Check out https://adventofcode.com/2020. - diff --git a/2020/SplashScreen.cs b/2020/SplashScreen.cs index cbd79a46e..0152b71a8 100644 --- a/2020/SplashScreen.cs +++ b/2020/SplashScreen.cs @@ -1,4 +1,3 @@ - using System; namespace AdventOfCode.Y2020; @@ -9,8 +8,8 @@ public void Show() { var color = Console.ForegroundColor; Write(0xcc00, false, " ▄█▄ ▄▄█ ▄ ▄ ▄▄▄ ▄▄ ▄█▄ ▄▄▄ ▄█ ▄▄ ▄▄▄ ▄▄█ ▄▄▄\n █▄█ █ █ █ █ █▄█ █ █ █ █ █ █▄ "); - Write(0xcc00, false, " █ █ █ █ █ █▄█\n █ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ 0x0000 | 2020\n "); - Write(0xcc00, false, " \n "); + Write(0xcc00, false, " █ █ █ █ █ █▄█\n █ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ /* 2020 */\n \n "); + Write(0xcc00, false, " "); Write(0xccccff, false, ".........."); Write(0xff0000, false, "|"); Write(0xccccff, false, ".......... "); @@ -233,7 +232,7 @@ public void Show() { Console.WriteLine(); } - private static void Write(int rgb, bool bold, string text){ + private static void Write(int rgb, bool bold, string text){ Console.Write($"\u001b[38;2;{(rgb>>16)&255};{(rgb>>8)&255};{rgb&255}{(bold ? ";1" : "")}m{text}"); - } -} + } +} \ No newline at end of file diff --git a/2020/calendar.svg b/2020/calendar.svg index e81df0d3f..645d8f67e 100644 --- a/2020/calendar.svg +++ b/2020/calendar.svg @@ -1,4 +1,4 @@ - + + +▄█▄ ▄▄█ ▄ ▄ ▄▄▄ ▄▄ ▄█▄ ▄▄▄ ▄█ ▄▄ ▄▄▄ ▄▄█ ▄▄▄ +█▄█ █ █ █ █ █▄█ █ █ █ █ █ █▄ █ █ █ █ █ █▄█ +█ █ █▄█ ▀▄▀ █▄▄ █ █ █▄ █▄█ █ █▄ █▄█ █▄█ █▄▄ /* 2024 */ + + .-----. .------------------. + .--'~ ~ ~| .-' * \ / '-. 1 ** + .--'~ ,* ~ | | >o< \_\_\|_/__/ | 2 ** +.---': ~ '(~), ~| | >@>O< o-_/.()__------| 3 ** +|@..@'. ~ " ' ~ | |>O>o<@< \____ .'| 4 ** +|_.~._@'.. ~ ~ *| | _| |_ ..\_\_ ..'* | 5 ** +| ||| @ '''...| |... .' '.'''../..| 6 ** +|@~~~@@##@# @# | |/\ ''. | | -/ :| 7 ** +|~~..--. _____ | |* /~\ '.| | - / .'| 8 ** +'---' ||[][]_\-| |~/ * \ :| | *..' | 9 ** + |------- | | /\ .'| |'''~~~~~| 10 ** + |.......|| |/\ ..' | | . . .| 11 ** + | - - | |''':::::| | . . ..| 12 ** + |'. - -| | :::::| |. .' . .| 13 ** + |...'..''| |. .:::::| |..|\..''| 14 ** + |. ''. | |. :::::| |──┬┴┴┴┬─| 15 ** + | '.~ '.| | : :::::| |──┤AoC├o| 16 ** + |. *'.~ :| | '. | |┬o┤ten├─| 17 ** + | '..' .'| | 'o | |┘*┤yrs├─| 18 ** + | ~ ..' | |: '...| |─┘├┬┬┬┴─| 19 ** + |''')) | | o * : '. .'──┘>>o<<| 20 ** +.------'.-((---.'------. | :|\| ~ _'' O> >>@<o<| 21 ** +| .---_ '------'_ .~' | | |\|\ / \ /~ >@<<*<O| 22 ** +|/ / /\|| | )/~\ | |___|\|________>O>>o>>o| 23 ** +|/ | \ *| |// / \ | | ----@ _|%%%=%%|_ | 24 ** +|/ \ \ '------'/ / \ \| '-.! /^\ / \.~~./ \.-' 25 ** +'----------------------' '------------------' + + + + \ No newline at end of file diff --git a/App.cs b/App.cs index f34502567..75d69d14d 100644 --- a/App.cs +++ b/App.cs @@ -56,22 +56,22 @@ var tsolversSelected = tsolvers.First(tsolver => SolverExtensions.Year(tsolver) == year && SolverExtensions.Day(tsolver) == day); - return () => Runner.RunAll(GetSolvers(tsolversSelected)); + return () => Runner.RunAll(true, true, true, GetSolvers(tsolversSelected)); }) ?? Command(args, Args("[0-9]+"), m => { var year = int.Parse(m[0]); var tsolversSelected = tsolvers.Where(tsolver => SolverExtensions.Year(tsolver) == year); - return () => Runner.RunAll(GetSolvers(tsolversSelected.ToArray())); + return () => Runner.RunAll(true, true, true, GetSolvers(tsolversSelected.ToArray())); }) ?? Command(args, Args("([0-9]+)/all"), m => { var year = int.Parse(m[0]); var tsolversSelected = tsolvers.Where(tsolver => SolverExtensions.Year(tsolver) == year); - return () => Runner.RunAll(GetSolvers(tsolversSelected.ToArray())); + return () => Runner.RunAll(true, true, true, GetSolvers(tsolversSelected.ToArray())); }) ?? Command(args, Args("all"), m => { - return () => Runner.RunAll(GetSolvers(tsolvers)); + return () => Runner.RunAll(true, true, true, GetSolvers(tsolvers)); }) ?? Command(args, Args("today"), m => { var dt = DateTime.UtcNow.AddHours(-5); @@ -82,26 +82,17 @@ SolverExtensions.Day(tsolver) == dt.Day); return () => - Runner.RunAll(GetSolvers(tsolversSelected)); + Runner.RunAll(true, true, true, GetSolvers(tsolversSelected)); } else { throw new AocCommuncationError("Event is not active. This option works in Dec 1-25 only)"); } }) ?? Command(args, Args("calendars"), _ => { - return () => { - var tsolversSelected = ( - from tsolver in tsolvers - group tsolver by SolverExtensions.Year(tsolver) into g - orderby SolverExtensions.Year(g.First()) descending - select g.First() - ).ToArray(); - - var solvers = GetSolvers(tsolversSelected); - foreach (var solver in solvers) { - solver.SplashScreen().Show(); - } - }; + return () => Runner.RunAll(false, true, false, GetSolvers(tsolvers)); + }) ?? + Command(args, Args("loc"), _ => { + return () => Runner.RunAll(false, false, true, GetSolvers(tsolvers)); }) ?? new Action(() => { Console.WriteLine(Usage.Get()); @@ -156,6 +147,7 @@ [year] Solve the whole year all Solve everything calendars Show the calendars + loc Show the line of code charts 2) To start working on new problems: login to https://adventofcode.com, then copy your session cookie, and export diff --git a/Lib/Generator/ReadmeGenerator.cs b/Lib/Generator/ReadmeGenerator.cs index 9860a9fa4..5b88fe66a 100644 --- a/Lib/Generator/ReadmeGenerator.cs +++ b/Lib/Generator/ReadmeGenerator.cs @@ -1,83 +1,7 @@ -using System.Linq; using AdventOfCode.Model; namespace AdventOfCode.Generator; -class ProjectReadmeGenerator { - public string Generate(int firstYear, int lastYear) { - - return $""" - # Advent of Code ({firstYear}-{lastYear}) - C# solutions to the [Advent of Code](https://adventofcode.com) problems. - - - - This project is best used as a template for your own AoC repository and a guide in solving - the puzzles. I put a lot of effort into my solutions. I aim for clarity which means that - they are not super effective or super short, but hopefully more readable. - - Due to copyright requirements I'm not allowed to include my input files within this repository - so you cannot just clone it and run. However I wanted to have a self contained documentary - for myself that I can later refactor, so I decided to commit the encrypted version of the - input files. It doesn't violate the copyright since it's just random garbage for everyone else - but when I check it out, a plugin called `git-crypt` decrypts all my inputs transparently, - so I can work with them freely. On commit the whole process is reversed and the files get - encrypted again. - - If you find this useful, please [support](https://github.com/sponsors/encse) me. - - ## Dependencies - - - This project is based on `.NET 8` and `C# 12`. - - `AngleSharp` is used for problem download. - - ## Use it as a solution template: - - 1. Install .NET Core - 2. Clone the repo - 3. Remove all solution folders - - ``` - > cd repo-dir - > rm -fr 20* - ``` - - 4. Install and initialize git-crypt: - - ``` - > brew install git-crypt - > cd repo-dir - > git-crypt init - > git-crypt export-key ~/aoc-crypt.key - ``` - - 5. Don't commit `aoc-crypt.key` into a public repo, back it up in some protected place. - If you need to clone your repo later you will need to unlock it using this key such as: - - ``` - > git clone ... - > cd repo-dir - > git-crypt unlock ~/aoc-crypt.key - ``` - - 6. Get help with `dotnet run` and start coding. - ``` - {Usage.Get()} - ``` - - ## Working in Visual Studio Code - If you prefer, you can work directly in VSCode as well. - - Open the command Palette (⇧ ⌘ P), select `Tasks: Run Task` then e.g. `update today`. - - Work on part 1. Check the solution with the `upload today` task. Continue with part 2. - - **Note:** this feature relies on the "Memento Inputs" extension to store your session cookie, you need - to set it up in advance from the Command Palette with `Install Extensions`. - """; - } -} - class ReadmeGeneratorForYear { public string Generate(Calendar calendar) { return $""" diff --git a/Lib/Generator/SolutionTemplateGenerator.cs b/Lib/Generator/SolutionTemplateGenerator.cs index 331851f67..8b67a4ed3 100644 --- a/Lib/Generator/SolutionTemplateGenerator.cs +++ b/Lib/Generator/SolutionTemplateGenerator.cs @@ -13,6 +13,7 @@ namespace AdventOfCode.Y{{problem.Year}}.Day{{problem.Day:00}}; using System.Linq; using System.Text.RegularExpressions; using System.Text; + using System.Numerics; [ProblemName("{{problem.Title}}")] class Solution : Solver { diff --git a/Lib/Model/Calendar.cs b/Lib/Model/Calendar.cs index 119fd5d68..2d6fcc714 100644 --- a/Lib/Model/Calendar.cs +++ b/Lib/Model/Calendar.cs @@ -5,6 +5,7 @@ using System.Text.RegularExpressions; using System.Text; using AngleSharp.Dom; +using System.Globalization; namespace AdventOfCode.Model; @@ -97,7 +98,7 @@ public static Calendar Parse(int year, IDocument document) { foreach (var textNode in GetText(calendar)) { var text = textNode.Text(); var style = textNode.ParentElement.ComputeCurrentStyle(); - var rgbaColor = style["color"]; + var rgbaColor = !string.IsNullOrEmpty(style["color"]) ? style["color"]: "rgba(204,204,204,1)"; var bold = !string.IsNullOrEmpty(style["text-shadow"]); if (style["position"] == "absolute" || @@ -111,7 +112,7 @@ public static Calendar Parse(int year, IDocument document) { var m = Regex.Match(widthSpec, "[.0-9]+"); if (m.Success) { - var width = double.Parse(m.Value) * 1.7; + var width = double.Parse(m.Value, CultureInfo.InvariantCulture) * 1.7; var c = (int)Math.Round(width - text.Length, MidpointRounding.AwayFromZero); if (c > 0) { text += new string(' ', c); diff --git a/Lib/Model/Problem.cs b/Lib/Model/Problem.cs index ffe5ce651..b1ae3a94f 100644 --- a/Lib/Model/Problem.cs +++ b/Lib/Model/Problem.cs @@ -4,7 +4,6 @@ using System.Linq; using System.Text.RegularExpressions; using AngleSharp.Dom; -using Microsoft.CodeAnalysis.CSharp.Syntax; namespace AdventOfCode.Model; class Problem { @@ -17,7 +16,7 @@ class Problem { public static Problem Parse(int year, int day, string url, IDocument document, string input) { - var md = ParseMdIntro(document, 3, url); + var md = ParseMdIntro(document, 2, url); var answers = ParseAnswers(document); var title = document.QuerySelector("h2").TextContent; @@ -32,7 +31,7 @@ public static Problem Parse(int year, int day, string url, IDocument document, s static string ParseMdIntro(IDocument document, int paragraphs, string url) { var article = ParseMd(document).Split("\n\n").ToList(); article = article.Take(Math.Min(paragraphs, article.Count)).ToList(); - article.Add($"Read the [full puzzle]({url}).\n"); + article.Add($"_Visit the website for the full story and [full puzzle]({url}) description._\n"); return string.Join("\n\n", article); } diff --git a/Lib/Runner.cs b/Lib/Runner.cs index ed65b8dd4..4ae3e3792 100644 --- a/Lib/Runner.cs +++ b/Lib/Runner.cs @@ -150,7 +150,7 @@ public static SolverResult RunSolver(Solver solver) { return new SolverResult(answers.ToArray(), errors.ToArray()); } - public static void RunAll(params Solver[] solvers) { + public static void RunAll(bool executeSolvers, bool showSplashScreen, bool showLocChart, params Solver[] solvers) { var errors = new List(); @@ -159,19 +159,27 @@ public static void RunAll(params Solver[] solvers) { foreach (var solver in solvers) { if (lastYear != solver.Year()) { - SlocChart.Show(slocs); + if (showLocChart){ + SlocChart.Show(lastYear, slocs); + } slocs.Clear(); - - solver.SplashScreen().Show(); + + if (showSplashScreen){ + solver.SplashScreen().Show(); + } lastYear = solver.Year(); } slocs.Add((solver.Day(), solver.Sloc())); - var result = RunSolver(solver); + if (executeSolvers){ + var result = RunSolver(solver); + WriteLine(); + errors.AddRange(result.errors); + } + } + if (showLocChart){ + SlocChart.Show(lastYear, slocs); WriteLine(); - errors.AddRange(result.errors); } - SlocChart.Show(slocs); - WriteLine(); if (errors.Any()) { WriteLine(ConsoleColor.Red, "Errors:\n" + string.Join("\n", errors)); @@ -182,12 +190,10 @@ public static void RunAll(params Solver[] solvers) { } private static void WriteLine(ConsoleColor color = ConsoleColor.Gray, string text = "") { - Write(color, text + "\n"); + Terminal.WriteLine(color, text); } private static void Write(ConsoleColor color = ConsoleColor.Gray, string text = "") { - var c = Console.ForegroundColor; - Console.ForegroundColor = color; - Console.Write(text); - Console.ForegroundColor = c; + Terminal.Write(color, text); } + } diff --git a/Lib/SlocChart.cs b/Lib/SlocChart.cs index 9a86c8569..f4a667a77 100644 --- a/Lib/SlocChart.cs +++ b/Lib/SlocChart.cs @@ -1,21 +1,26 @@ using System; using System.Collections.Generic; using System.Linq; +using Microsoft.VisualBasic; namespace AdventOfCode; class SlocChart { - public static void Show(List<(int day, int sloc)> slocs) { + public static void Show(int year, List<(int day, int sloc)> slocs) { if (slocs.Count < 2) { return; } - Console.WriteLine(" In code lines"); - Console.WriteLine(""); var chars = "█▁▂▃▄▅▆▇"; - var max = slocs.Select(sloc => sloc.sloc).Max(); + var max = slocs.Max(sloc => sloc.sloc); + var min = slocs.Min(sloc => sloc.sloc); + var total = slocs.Sum(sloc => sloc.sloc); + + Console.WriteLine($" {year } in code lines total: {total} max: {max} min: {min}"); + Console.WriteLine(""); + var columns = new List>(); @@ -67,15 +72,12 @@ public static void Show(List<(int day, int sloc)> slocs) { rows.Insert(0, row); } - var c = Console.ForegroundColor; foreach (var row in rows) { foreach (var item in row) { - Console.ForegroundColor = item.c; - Console.Write(item.st); + Terminal.Write(item.c, item.st); } Console.WriteLine(); } - Console.ForegroundColor = c; Console.WriteLine(""); } } \ No newline at end of file diff --git a/Lib/Terminal.cs b/Lib/Terminal.cs new file mode 100644 index 000000000..6f9a3d1d9 --- /dev/null +++ b/Lib/Terminal.cs @@ -0,0 +1,36 @@ + +using System; + +class Terminal { + public static void WriteLine(ConsoleColor color = ConsoleColor.Gray, string text = "") { + Write(color, text + "\n"); + } + public static void Write(ConsoleColor color = ConsoleColor.Gray, string text = "") { + + Console.Write($"\u001b[{ToAnsiColorCode(color)}"); + Console.Write(text); + Console.Write("\u001b[0m"); + } + + private static string ToAnsiColorCode(ConsoleColor color) { + switch(color) { + case ConsoleColor.Black: return "30m"; + case ConsoleColor.DarkRed: return "31m"; + case ConsoleColor.DarkGreen: return "32m"; + case ConsoleColor.DarkYellow: return "33m"; + case ConsoleColor.DarkBlue: return "34m"; + case ConsoleColor.DarkMagenta: return "35m"; + case ConsoleColor.DarkCyan: return "36m"; + case ConsoleColor.DarkGray: return "37m"; + case ConsoleColor.Gray: return "90m"; + case ConsoleColor.Red: return "91m"; + case ConsoleColor.Green: return "92m"; + case ConsoleColor.Yellow: return "93m"; + case ConsoleColor.Blue: return "94m"; + case ConsoleColor.Magenta: return "95m"; + case ConsoleColor.Cyan: return "96m"; + case ConsoleColor.White: return "97m"; + } + throw new Exception($"unhandled color code {color}"); + } +} \ No newline at end of file diff --git a/Lib/Updater.cs b/Lib/Updater.cs index 30c9e33f5..62d2dde2a 100644 --- a/Lib/Updater.cs +++ b/Lib/Updater.cs @@ -49,7 +49,6 @@ public async Task Update(int year, int day) { years = new int[] { year }; } - UpdateProjectReadme(years.Min(), years.Max()); UpdateReadmeForYear(calendar); UpdateSplashScreen(calendar); UpdateReadmeForDay(problem); @@ -205,11 +204,6 @@ void UpdateSolutionTemplate(Problem problem) { } } - void UpdateProjectReadme(int firstYear, int lastYear) { - var file = Path.Combine("README.md"); - WriteFile(file, new ProjectReadmeGenerator().Generate(firstYear, lastYear)); - } - void UpdateReadmeForYear(Calendar calendar) { var file = Path.Combine(SolverExtensions.WorkingDir(calendar.Year), "README.md"); WriteFile(file, new ReadmeGeneratorForYear().Generate(calendar)); diff --git a/README.md b/README.md index 5d2720cdc..8b616b4f6 100644 --- a/README.md +++ b/README.md @@ -1,97 +1,18 @@ -# Advent of Code (2015-2023) -C# solutions to the [Advent of Code](https://adventofcode.com) problems. + # Advent of Code (2015-2024) + C# solutions to the [Advent of Code](https://adventofcode.com) problems. - + -This project is best used as a template for your own AoC repository and a guide in solving -the puzzles. I put a lot of effort into my solutions. I aim for clarity which means that -they are not super effective or super short, but hopefully more readable. + I'm making a [website](https://aoc.csokavar.hu) out of this. + + A lot of effort goes into my solutions to present things in an easy to understand and elegant way. Clarity first also means less emphasis on speed, but I try to balance it until each puzzle's runtime fits into a second. + + The framework I'm using is freely available and it's pretty streamlined by now. You can start with the + https://github.com/encse/adventofcode-template repository. -Due to copyright requirements I'm not allowed to include my input files within this repository -so you cannot just clone it and run. However I wanted to have a self contained documentary -for myself that I can later refactor, so I decided to commit the encrypted version of the -input files. It doesn't violate the copyright since it's just random garbage for everyone else -but when I check it out, a plugin called `git-crypt` decrypts all my inputs transparently, -so I can work with them freely. On commit the whole process is reversed and the files get -encrypted again. + Like what you see? Consider [sponsoring](https://github.com/sponsors/encse) me. -## Dependencies - -- This project is based on `.NET 8` and `C# 12`. -- `AngleSharp` is used for problem download. - -## Use it as a solution template: - -1. Install .NET Core -2. Clone the repo -3. Remove all solution folders - -``` -> cd repo-dir -> rm -fr 20* -``` - -4. Install and initialize git-crypt: - -``` -> brew install git-crypt -> cd repo-dir -> git-crypt init -> git-crypt export-key ~/aoc-crypt.key -``` - -5. Don't commit `aoc-crypt.key` into a public repo, back it up in some protected place. -If you need to clone your repo later you will need to unlock it using this key such as: - -``` -> git clone ... -> cd repo-dir -> git-crypt unlock ~/aoc-crypt.key -``` - -6. Get help with `dotnet run` and start coding. -``` -Usage: dotnet run [arguments] -1) To run the solutions and admire your advent calendar: - - [year]/[day|all] Solve the specified problems - today Shortcut to the above - [year] Solve the whole year - all Solve everything - - calendars Show the calendars - -2) To start working on new problems: -login to https://adventofcode.com, then copy your session cookie, and export -it in your console like this - - export SESSION=73a37e9a72a... - -then run the app with - - update [year]/[day] Prepares a folder for the given day, updates the input, - the readme and creates a solution template. - update today Shortcut to the above. - -3) To upload your answer: -set up your SESSION variable as above. - - upload [year]/[day] Upload the answer for the selected year and day. - upload today Shortcut to the above. - -4) Don't forget to tip the maintainer https://github.com/sponsors/encse. -``` - -## Working in Visual Studio Code -If you prefer, you can work directly in VSCode as well. - - Open the command Palette (⇧ ⌘ P), select `Tasks: Run Task` then e.g. `update today`. - - Work on part 1. Check the solution with the `upload today` task. Continue with part 2. - - **Note:** this feature relies on the "Memento Inputs" extension to store your session cookie, you need - to set it up in advance from the Command Palette with `Install Extensions`. - -## How can I help? - -If you find this useful, please [support](https://github.com/sponsors/encse) me. + ## Dependencies + - Based on `.NET 9` and `C# 13`. + - `AngleSharp` is used for problem download. + - git-crypt to store the input files in an encrypted form diff --git a/adventofcode.csproj b/adventofcode.csproj index b7d412597..426add6a1 100755 --- a/adventofcode.csproj +++ b/adventofcode.csproj @@ -1,14 +1,13 @@ Exe - net8.0 - 12 + net9.0 + 13 true false - \ No newline at end of file diff --git a/docs/build.js b/docs/build.js new file mode 100644 index 000000000..4a0efdc78 --- /dev/null +++ b/docs/build.js @@ -0,0 +1,185 @@ +const fs = require('fs'); +const path = require('path'); +const marked = require('marked'); + + +function media(dir){ + const files = fs.readdirSync(dir); + return files.filter(file => + path.extname(file).toLowerCase() === '.gif' || + path.extname(file).toLowerCase() === '.png' + ).map(file => path.join(dir, file)); +} + +function* findReadmes(dir) { + const entries = fs.readdirSync(dir, { withFileTypes: true }); + + for (const entry of entries) { + const fullPath = path.join(dir, entry.name); + + if (entry.isDirectory()) { + const match = fullPath.match(/(\d{4})\/Day(\d{1,2})/i); + if (match) { + const year = parseInt(match[1], 10); + const day = parseInt(match[2], 10); + + // Check the directory for a readme.md file + const readmePath = path.join(fullPath, 'README.md'); + const solutionPath = path.join(fullPath, 'Solution.cs'); + const illustrationPath = path.join(fullPath, 'illustration.jpeg'); + if (fs.existsSync(readmePath) && fs.existsSync(solutionPath)) { + + const rawContent = fs.readFileSync(readmePath, 'utf8'); + + let name = ''; + const match = rawContent.match(/^## --- Day \d+: (.+?) ---/); + if (match) { + name = match[1]; + } + + let lines = rawContent.split('\n'); + while (lines.length > 0) { + let line = lines.shift(); + if (line.match(/^## --- Day \d+: (.+?) ---/)) { + break; + } + } + + + yield { + year, + day, + path: readmePath, + name: name, + notes: marked.parse(lines.join('\n')), + code: fs.readFileSync(solutionPath, 'utf8'), + illustration: fs.existsSync(illustrationPath) ? illustrationPath : 'docs/elf.jpeg', + media: media(fullPath) + }; + } + } + + // Recursively search within this directory + yield* findReadmes(fullPath); + } + } +} + + +function copyDirectory(src, dest) { + if (!fs.existsSync(src)) { + throw new Error(`Source directory does not exist: ${src}`); + } + + if (!fs.existsSync(dest)) { + fs.mkdirSync(dest, { recursive: true }); + } + + const items = fs.readdirSync(src); + + items.forEach(item => { + const srcPath = path.join(src, item); + const destPath = path.join(dest, item); + + if (fs.statSync(srcPath).isDirectory()) { + copyDirectory(srcPath, destPath); + } else { + fs.copyFileSync(srcPath, destPath); + } + }); + }; + + +function loadTemplate(templatePath) { + return fs.readFileSync(templatePath, 'utf8'); +} + + +function fillTemplate(template, replacements) { + return template.replace(/{{\s*([\w-]+)\s*}}/g, (_, key) => replacements[key] || ''); +} + +function generateYearPicker(year, day, yearToDays) { + let options = ''; + for (let y of Object.keys(yearToDays).sort()){ + let lastDay = yearToDays[y][yearToDays[y].length-1]; + let target = `/${y}/${lastDay}/` + options += `${y}` + } + + return ` + + ${year} + ${options} + + `; +} + +function generateDayPicker(year, day, yearToDays) { + let res = ''; + for (i = 1; i <= yearToDays[year].length; i++) { + const link = `${i.toString().padStart(2, '0')}`; + res += i == day ? `${link}` : `${link}`; + } + return res; +} + +function escapeHtml(st) { + const map = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + return st.replace(/[&<>"']/g, (char) => map[char]); +} + +const template = loadTemplate('docs/template.html'); +const redirectTemplate = loadTemplate('docs/redirect_template.html') + +const yearToDays = {}; +for (const { year, day } of findReadmes('.')) { + if (!yearToDays[year]) { + yearToDays[year] = []; + } + yearToDays[year].push(day); +} + +for(const year of Object.keys(yearToDays)){ + yearToDays[year] = yearToDays[year].sort((a,b) => a-b); +} + +const lastYear = Math.max(...Object.keys(yearToDays)) +const lastDay = Math.max(...yearToDays[lastYear]); + +copyDirectory('docs/static', 'build'); + +const filledRedirectTemplate = fillTemplate(redirectTemplate, { + 'default-page': `/${lastYear}/${lastDay}/`, +}); + +fs.writeFileSync(path.join('build', 'index.html'), filledRedirectTemplate); + +const currentYear = new Date().getFullYear(); +// Iterate over readme.md files and print filled templates +for (const { year, day, name, notes, code, illustration, media } of findReadmes('.')) { + const filledHtml = fillTemplate(template, { + url: `https://aoc.csokavar.hu/${year}/${day}/`, + 'problem-id': `${year}/${day}`, + 'problem-name': `${name}`, + 'year-picker': generateYearPicker(year,day, yearToDays), + 'day-picker': generateDayPicker(year, day, yearToDays), + 'current-year': `${currentYear}`, + notes, + code: escapeHtml(code), + }); + const dst = `build/${year}/${day}`; + fs.mkdirSync(dst, { recursive: true }); + fs.writeFileSync(path.join(dst, 'index.html'), filledHtml); + fs.copyFileSync(illustration, path.join(dst, 'illustration.jpeg')); + for(let file of media) { + fs.copyFileSync(file, path.join(dst, path.basename(file))); + } +} + diff --git a/docs/elf.jpeg b/docs/elf.jpeg new file mode 100644 index 000000000..d61c3abb0 Binary files /dev/null and b/docs/elf.jpeg differ diff --git a/docs/package-lock.json b/docs/package-lock.json new file mode 100644 index 000000000..a398ad371 --- /dev/null +++ b/docs/package-lock.json @@ -0,0 +1,28 @@ +{ + "name": "docs", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "docs", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "marked": "^15.0.3" + } + }, + "node_modules/marked": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.3.tgz", + "integrity": "sha512-Ai0cepvl2NHnTcO9jYDtcOEtVBNVYR31XnEA3BndO7f5As1wzpcOceSUM8FDkNLJNIODcLpDTWay/qQhqbuMvg==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + } + } +} diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 000000000..d90559306 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,14 @@ +{ + "name": "docs", + "version": "1.0.0", + "main": "build.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "marked": "^15.0.3" + } +} diff --git a/docs/redirect_template.html b/docs/redirect_template.html new file mode 100644 index 000000000..cc99add5e --- /dev/null +++ b/docs/redirect_template.html @@ -0,0 +1,10 @@ + + + diff --git a/docs/static/404.html b/docs/static/404.html new file mode 100644 index 000000000..9c931b102 --- /dev/null +++ b/docs/static/404.html @@ -0,0 +1,2 @@ + + diff --git a/docs/static/CNAME b/docs/static/CNAME new file mode 100644 index 000000000..dfac70bb5 --- /dev/null +++ b/docs/static/CNAME @@ -0,0 +1 @@ +aoc.csokavar.hu \ No newline at end of file diff --git a/docs/static/android-chrome-192x192.png b/docs/static/android-chrome-192x192.png new file mode 100644 index 000000000..00444eee3 Binary files /dev/null and b/docs/static/android-chrome-192x192.png differ diff --git a/docs/static/android-chrome-512x512.png b/docs/static/android-chrome-512x512.png new file mode 100644 index 000000000..ac878c39a Binary files /dev/null and b/docs/static/android-chrome-512x512.png differ diff --git a/docs/static/apple-touch-icon.png b/docs/static/apple-touch-icon.png new file mode 100644 index 000000000..bf6729c6a Binary files /dev/null and b/docs/static/apple-touch-icon.png differ diff --git a/docs/static/browserconfig.xml b/docs/static/browserconfig.xml new file mode 100644 index 000000000..b3930d0f0 --- /dev/null +++ b/docs/static/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #da532c + + + diff --git a/docs/static/favicon-16x16.png b/docs/static/favicon-16x16.png new file mode 100644 index 000000000..ca6fbddd6 Binary files /dev/null and b/docs/static/favicon-16x16.png differ diff --git a/docs/static/favicon-32x32.png b/docs/static/favicon-32x32.png new file mode 100644 index 000000000..d4fac82eb Binary files /dev/null and b/docs/static/favicon-32x32.png differ diff --git a/docs/static/favicon.ico b/docs/static/favicon.ico new file mode 100644 index 000000000..70d3d947b Binary files /dev/null and b/docs/static/favicon.ico differ diff --git a/docs/static/mstile-150x150.png b/docs/static/mstile-150x150.png new file mode 100644 index 000000000..f1d02c0d4 Binary files /dev/null and b/docs/static/mstile-150x150.png differ diff --git a/docs/static/safari-pinned-tab.svg b/docs/static/safari-pinned-tab.svg new file mode 100644 index 000000000..46cebff23 --- /dev/null +++ b/docs/static/safari-pinned-tab.svg @@ -0,0 +1,110 @@ + + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + + + + + + diff --git a/docs/static/site.webmanifest b/docs/static/site.webmanifest new file mode 100644 index 000000000..b20abb7cb --- /dev/null +++ b/docs/static/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/docs/template.html b/docs/template.html new file mode 100644 index 000000000..a512a3981 --- /dev/null +++ b/docs/template.html @@ -0,0 +1,314 @@ + + + + + + + + + + + + + + + + + + Advent of Code {{problem-id}} '{{problem-name}}'' in C# by encse + + + + + + + + + + + + + + + + {{year-picker}} + {{day-picker}} + + + + + + + + + Advent of Code + {{problem-id}} + {{problem-name}} + in C# + + by encse + + + + + + {{notes}} + {{code}} + Please ☆ my repo if you like it! + + + + + © {{current-year}} + Advent of Code is a registered trademark in the US + Images provided by Bing image creator + + + + + + + + + \ No newline at end of file
Advent of Code
in C#
by encse
{{code}}
Please ☆ my repo if you like it!