From c2b35be668e7d8ae2d0c82f7dca6bbbfa3f9f478 Mon Sep 17 00:00:00 2001 From: javalsai Date: Sun, 1 Dec 2024 16:42:05 +0100 Subject: [PATCH] add stuff form last year (gave up quickly) --- 2023/.gitignore | 2 + 2023/01/.gitignore | 175 ++++++++++++++++++++++++++++++++++++++++++ 2023/01/README.md | 15 ++++ 2023/01/bun.lockb | Bin 0 -> 1692 bytes 2023/01/index.ts | 70 +++++++++++++++++ 2023/01/package.json | 14 ++++ 2023/01/tsconfig.json | 22 ++++++ 2023/02/.gitignore | 175 ++++++++++++++++++++++++++++++++++++++++++ 2023/02/README.md | 15 ++++ 2023/02/bun.lockb | Bin 0 -> 1692 bytes 2023/02/index.ts | 71 +++++++++++++++++ 2023/02/package.json | 14 ++++ 2023/02/tsconfig.json | 22 ++++++ 2023/03/.gitignore | 175 ++++++++++++++++++++++++++++++++++++++++++ 2023/03/README.md | 15 ++++ 2023/03/bun.lockb | Bin 0 -> 1692 bytes 2023/03/index.ts | 58 ++++++++++++++ 2023/03/package.json | 14 ++++ 2023/03/sample.txt | 10 +++ 2023/03/tsconfig.json | 22 ++++++ 2023/04/.gitignore | 1 + 2023/04/main.c | 72 +++++++++++++++++ 2023/04/sample.txt | 6 ++ 23 files changed, 968 insertions(+) create mode 100644 2023/.gitignore create mode 100644 2023/01/.gitignore create mode 100644 2023/01/README.md create mode 100755 2023/01/bun.lockb create mode 100644 2023/01/index.ts create mode 100644 2023/01/package.json create mode 100644 2023/01/tsconfig.json create mode 100644 2023/02/.gitignore create mode 100644 2023/02/README.md create mode 100755 2023/02/bun.lockb create mode 100644 2023/02/index.ts create mode 100644 2023/02/package.json create mode 100644 2023/02/tsconfig.json create mode 100644 2023/03/.gitignore create mode 100644 2023/03/README.md create mode 100755 2023/03/bun.lockb create mode 100644 2023/03/index.ts create mode 100644 2023/03/package.json create mode 100644 2023/03/sample.txt create mode 100644 2023/03/tsconfig.json create mode 100644 2023/04/.gitignore create mode 100644 2023/04/main.c create mode 100644 2023/04/sample.txt diff --git a/2023/.gitignore b/2023/.gitignore new file mode 100644 index 0000000..817fc52 --- /dev/null +++ b/2023/.gitignore @@ -0,0 +1,2 @@ +/*/input.txt +/*/big.txt diff --git a/2023/01/.gitignore b/2023/01/.gitignore new file mode 100644 index 0000000..468f82a --- /dev/null +++ b/2023/01/.gitignore @@ -0,0 +1,175 @@ +# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore + +# Logs + +logs +_.log +npm-debug.log_ +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Caches + +.cache + +# Diagnostic reports (https://nodejs.org/api/report.html) + +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# Runtime data + +pids +_.pid +_.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover + +lib-cov + +# Coverage directory used by tools like istanbul + +coverage +*.lcov + +# nyc test coverage + +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) + +.grunt + +# Bower dependency directory (https://bower.io/) + +bower_components + +# node-waf configuration + +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) + +build/Release + +# Dependency directories + +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) + +web_modules/ + +# TypeScript cache + +*.tsbuildinfo + +# Optional npm cache directory + +.npm + +# Optional eslint cache + +.eslintcache + +# Optional stylelint cache + +.stylelintcache + +# Microbundle cache + +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history + +.node_repl_history + +# Output of 'npm pack' + +*.tgz + +# Yarn Integrity file + +.yarn-integrity + +# dotenv environment variable files + +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) + +.parcel-cache + +# Next.js build output + +.next +out + +# Nuxt.js build / generate output + +.nuxt +dist + +# Gatsby files + +# Comment in the public line in if your project uses Gatsby and not Next.js + +# https://nextjs.org/blog/next-9-1#public-directory-support + +# public + +# vuepress build output + +.vuepress/dist + +# vuepress v2.x temp and cache directory + +.temp + +# Docusaurus cache and generated files + +.docusaurus + +# Serverless directories + +.serverless/ + +# FuseBox cache + +.fusebox/ + +# DynamoDB Local files + +.dynamodb/ + +# TernJS port file + +.tern-port + +# Stores VSCode versions used for testing VSCode extensions + +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/2023/01/README.md b/2023/01/README.md new file mode 100644 index 0000000..c71d524 --- /dev/null +++ b/2023/01/README.md @@ -0,0 +1,15 @@ +# advent-2023-01 + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run index.ts +``` + +This project was created using `bun init` in bun v1.0.14. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/2023/01/bun.lockb b/2023/01/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..d5055495f1632704cd23534af11100f77e5e8cc7 GIT binary patch literal 1692 zcmY#Z)GsYA(of3F(@)JSQ%EY!<4P*c)6L0G&Q8nBN!3luFUn0U(JeFJVq#!m&@rjg z-!R3Vd3y8_uTP!xqIFpQf6_j_=9~oU^EyXM&rlvV1~6a-lMD1R8HUMtO4ZP3wfO-*71>mZ*1`2wU{ zk%581nt`DKW**31kT@X>)1Se>z+l6`(7?*TzyR_LOq`H@kUU5&2*cPQ8iYY&APi%J zXa4#DBAOmS?J1&KXFy>AGZ*F$kYib1#ZNqOXZHfe z!}S6?#7#Pj?epiEoI1AYB~PBu&FCE-C81_~8_zAve6dZ){m$c+Ebl&;+Sku1IO^`e z^HO?E>$gUbAw*&ps5%%8<&s1phY3j z(+ep|O|?@nGEgYatV+#K(@`){NX*Gh&&yBaLbB`Me+U2xfx{i@c@8MeWm9TwWT#+) z%M_4*Eud;0pfn*pAbUXi3ZUwjKxra1FQsq<#-OJoWzpU;t~di4^XoWKnV;~KA;3vacXW^YLT96MM-K=USdvgNl|8A zx}Aa{!g>pY^$aD&$)I3jIPhC!Y0;DkBA|i~B*uSlvCTW#!d)fB#i>PQsYS7u6&i!m zynnI5n(7(r8G+0JJ9H2d0Ne>D9smFU literal 0 HcmV?d00001 diff --git a/2023/01/index.ts b/2023/01/index.ts new file mode 100644 index 0000000..57fa8d7 --- /dev/null +++ b/2023/01/index.ts @@ -0,0 +1,70 @@ +const args = Bun.argv.slice(2) + +if(args.length !== 1) { + console.error('Please, provide an input file'); + process.exit(1); +} + +const filename = args[0]; + + +const input = Bun.file(filename) +const text = await input.text() + +const start = new Date(); +const result = text.split('\n').map(e => e.trim()).map(line => { + if(!line) return; + + const match = matchOverlap(line, /(?:[0-9]|one|two|three|four|five|six|seven|eight|nine)/gi) ?? [] + console.log(match) + const [leftmost, rightmost] = [match[0] ?? 0, match.slice(-1)[0] ?? 0]; + + console.log(line, leftmost, rightmost, toNum(leftmost), toNum(rightmost)) + + return toNum(leftmost) * 10 + toNum(rightmost); +}).reduce((a = 0, b = 0) => a + b, 0) +const end = new Date(); +console.log(result) +console.log(end - start); + +function toNum(n: number | string): number { + if(typeof n == 'number') return n; + else { + switch(n.toLowerCase()) { + case 'one': + return 1; + case 'two': + return 2; + case 'three': + return 3; + case 'four': + return 4; + case 'five': + return 5; + case 'six': + return 6; + case 'seven': + return 7; + case 'eight': + return 8; + case 'nine': + return 9; + default: + return parseInt(n) + } + } +} + +function matchOverlap(input, re) { + var r = [], m; + // Prevent infinite loops + if (!re.global) re = new RegExp( + re.source, (re+'').split('/').pop() + 'g' + ); + while (m = re.exec(input)) { + re.lastIndex -= m[0].length - 1; + r.push(m[0]); + } + return r; +} + diff --git a/2023/01/package.json b/2023/01/package.json new file mode 100644 index 0000000..63c89af --- /dev/null +++ b/2023/01/package.json @@ -0,0 +1,14 @@ +{ + "name": "advent-2023-01", + "module": "index.ts", + "type": "module", + "scripts": { + "start": "bun ." + }, + "devDependencies": { + "bun-types": "latest" + }, + "peerDependencies": { + "typescript": "^5.0.0" + } +} diff --git a/2023/01/tsconfig.json b/2023/01/tsconfig.json new file mode 100644 index 0000000..7556e1d --- /dev/null +++ b/2023/01/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "lib": ["ESNext"], + "module": "esnext", + "target": "esnext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "allowImportingTsExtensions": true, + "noEmit": true, + "composite": true, + "strict": true, + "downlevelIteration": true, + "skipLibCheck": true, + "jsx": "react-jsx", + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "types": [ + "bun-types" // add Bun global + ] + } +} diff --git a/2023/02/.gitignore b/2023/02/.gitignore new file mode 100644 index 0000000..468f82a --- /dev/null +++ b/2023/02/.gitignore @@ -0,0 +1,175 @@ +# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore + +# Logs + +logs +_.log +npm-debug.log_ +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Caches + +.cache + +# Diagnostic reports (https://nodejs.org/api/report.html) + +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# Runtime data + +pids +_.pid +_.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover + +lib-cov + +# Coverage directory used by tools like istanbul + +coverage +*.lcov + +# nyc test coverage + +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) + +.grunt + +# Bower dependency directory (https://bower.io/) + +bower_components + +# node-waf configuration + +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) + +build/Release + +# Dependency directories + +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) + +web_modules/ + +# TypeScript cache + +*.tsbuildinfo + +# Optional npm cache directory + +.npm + +# Optional eslint cache + +.eslintcache + +# Optional stylelint cache + +.stylelintcache + +# Microbundle cache + +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history + +.node_repl_history + +# Output of 'npm pack' + +*.tgz + +# Yarn Integrity file + +.yarn-integrity + +# dotenv environment variable files + +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) + +.parcel-cache + +# Next.js build output + +.next +out + +# Nuxt.js build / generate output + +.nuxt +dist + +# Gatsby files + +# Comment in the public line in if your project uses Gatsby and not Next.js + +# https://nextjs.org/blog/next-9-1#public-directory-support + +# public + +# vuepress build output + +.vuepress/dist + +# vuepress v2.x temp and cache directory + +.temp + +# Docusaurus cache and generated files + +.docusaurus + +# Serverless directories + +.serverless/ + +# FuseBox cache + +.fusebox/ + +# DynamoDB Local files + +.dynamodb/ + +# TernJS port file + +.tern-port + +# Stores VSCode versions used for testing VSCode extensions + +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/2023/02/README.md b/2023/02/README.md new file mode 100644 index 0000000..c71d524 --- /dev/null +++ b/2023/02/README.md @@ -0,0 +1,15 @@ +# advent-2023-01 + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run index.ts +``` + +This project was created using `bun init` in bun v1.0.14. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/2023/02/bun.lockb b/2023/02/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..d5055495f1632704cd23534af11100f77e5e8cc7 GIT binary patch literal 1692 zcmY#Z)GsYA(of3F(@)JSQ%EY!<4P*c)6L0G&Q8nBN!3luFUn0U(JeFJVq#!m&@rjg z-!R3Vd3y8_uTP!xqIFpQf6_j_=9~oU^EyXM&rlvV1~6a-lMD1R8HUMtO4ZP3wfO-*71>mZ*1`2wU{ zk%581nt`DKW**31kT@X>)1Se>z+l6`(7?*TzyR_LOq`H@kUU5&2*cPQ8iYY&APi%J zXa4#DBAOmS?J1&KXFy>AGZ*F$kYib1#ZNqOXZHfe z!}S6?#7#Pj?epiEoI1AYB~PBu&FCE-C81_~8_zAve6dZ){m$c+Ebl&;+Sku1IO^`e z^HO?E>$gUbAw*&ps5%%8<&s1phY3j z(+ep|O|?@nGEgYatV+#K(@`){NX*Gh&&yBaLbB`Me+U2xfx{i@c@8MeWm9TwWT#+) z%M_4*Eud;0pfn*pAbUXi3ZUwjKxra1FQsq<#-OJoWzpU;t~di4^XoWKnV;~KA;3vacXW^YLT96MM-K=USdvgNl|8A zx}Aa{!g>pY^$aD&$)I3jIPhC!Y0;DkBA|i~B*uSlvCTW#!d)fB#i>PQsYS7u6&i!m zynnI5n(7(r8G+0JJ9H2d0Ne>D9smFU literal 0 HcmV?d00001 diff --git a/2023/02/index.ts b/2023/02/index.ts new file mode 100644 index 0000000..f65b42d --- /dev/null +++ b/2023/02/index.ts @@ -0,0 +1,71 @@ +const args = Bun.argv.slice(2) + +if(args.length !== 1) { + console.error('Please, provide an input file') + process.exit(1) +} + +const filename = args[0]; + + +const input = Bun.file(filename) +const text = await input.text() + +let count = 0 +text.split('\n').map(e => e.trim()).filter(line => line) + .forEach(line => { + const [gameID, gameData] = line.split(':') + const min = gameData.split(';') + .map(set => set.trim()) + .map(set => addArraysToObj( + set.split(',').map(color => + color.trim().split(' ').reverse() as [string, string] + ) + ) + ).reduce((acc, object) => { + for(const key of Object.keys(object)) { + acc[key] = Math.max(acc[key] ?? 0, object[key] ?? 0) + } + return acc + }, {}) + + count += Object.values(min).reduce((a=1, b=1) => a * b, 1) + }) + +console.log(count) + +function addArraysToObj(array: Array<[string, number | string]>) { + const object: { [key: string]: number } = {} + array.forEach(([key, val]) => object[key] = (object[key] ?? 0) + toNum(val)) + + return object +} + + +function toNum(n: number | string): number { + if(typeof n == 'number') return n; + else { + switch(n.toLowerCase()) { + case 'one': + return 1; + case 'two': + return 2; + case 'three': + return 3; + case 'four': + return 4; + case 'five': + return 5; + case 'six': + return 6; + case 'seven': + return 7; + case 'eight': + return 8; + case 'nine': + return 9; + default: + return parseInt(n) + } + } +} diff --git a/2023/02/package.json b/2023/02/package.json new file mode 100644 index 0000000..49e86e0 --- /dev/null +++ b/2023/02/package.json @@ -0,0 +1,14 @@ +{ + "name": "advent-2023-01", + "module": "index.ts", + "type": "module", + "scripts": { + "start": "bun run ." + }, + "devDependencies": { + "bun-types": "latest" + }, + "peerDependencies": { + "typescript": "^5.0.0" + } +} diff --git a/2023/02/tsconfig.json b/2023/02/tsconfig.json new file mode 100644 index 0000000..7556e1d --- /dev/null +++ b/2023/02/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "lib": ["ESNext"], + "module": "esnext", + "target": "esnext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "allowImportingTsExtensions": true, + "noEmit": true, + "composite": true, + "strict": true, + "downlevelIteration": true, + "skipLibCheck": true, + "jsx": "react-jsx", + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "types": [ + "bun-types" // add Bun global + ] + } +} diff --git a/2023/03/.gitignore b/2023/03/.gitignore new file mode 100644 index 0000000..468f82a --- /dev/null +++ b/2023/03/.gitignore @@ -0,0 +1,175 @@ +# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore + +# Logs + +logs +_.log +npm-debug.log_ +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Caches + +.cache + +# Diagnostic reports (https://nodejs.org/api/report.html) + +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# Runtime data + +pids +_.pid +_.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover + +lib-cov + +# Coverage directory used by tools like istanbul + +coverage +*.lcov + +# nyc test coverage + +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) + +.grunt + +# Bower dependency directory (https://bower.io/) + +bower_components + +# node-waf configuration + +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) + +build/Release + +# Dependency directories + +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) + +web_modules/ + +# TypeScript cache + +*.tsbuildinfo + +# Optional npm cache directory + +.npm + +# Optional eslint cache + +.eslintcache + +# Optional stylelint cache + +.stylelintcache + +# Microbundle cache + +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history + +.node_repl_history + +# Output of 'npm pack' + +*.tgz + +# Yarn Integrity file + +.yarn-integrity + +# dotenv environment variable files + +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) + +.parcel-cache + +# Next.js build output + +.next +out + +# Nuxt.js build / generate output + +.nuxt +dist + +# Gatsby files + +# Comment in the public line in if your project uses Gatsby and not Next.js + +# https://nextjs.org/blog/next-9-1#public-directory-support + +# public + +# vuepress build output + +.vuepress/dist + +# vuepress v2.x temp and cache directory + +.temp + +# Docusaurus cache and generated files + +.docusaurus + +# Serverless directories + +.serverless/ + +# FuseBox cache + +.fusebox/ + +# DynamoDB Local files + +.dynamodb/ + +# TernJS port file + +.tern-port + +# Stores VSCode versions used for testing VSCode extensions + +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/2023/03/README.md b/2023/03/README.md new file mode 100644 index 0000000..a03857c --- /dev/null +++ b/2023/03/README.md @@ -0,0 +1,15 @@ +# advent-2023-03 + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run index.ts +``` + +This project was created using `bun init` in bun v1.0.14. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/2023/03/bun.lockb b/2023/03/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..f40592762c243b1078dfc2132c5a449a027c4b1b GIT binary patch literal 1692 zcmY#Z)GsYA(of3F(@)JSQ%EY!<4P*c)6L0G&Q8nBN!3luFUn0U(JeFJVq#!mSR~uF z*TUZVx>pSIt#D4!a?u;}6K=4CZdT|1w?=oOu`CZ80~j!aNd^WEG`a!GFNY}r^Z6JU z8YCDP7&sXi8u%C(7`PZ18kRlccDeaNO0@b-`q>Vl*GltM8+5c=Q;wLz5wY~ zWME*hW?*Q5na2+jBm%?qXD~1@*f20Oure?(fII^eC&CB@kXjH1sfE!nHjEFW85sWY z|ARRaq=-tG5o#{7(JXO}`Vm`8RXSoqy5eu_-X&UjGgu^KBCF>tHoH)}7n_$nd0Lx3 zv8MFeI>Bx4)*d^xl4n|c;Ir_&$mjg?y?(FJ31MJhfSHSMKLZ2HtN4j0?(AN`c(`6* zhqy^+v3>qLlT*hwz2wRBxf#8~qa@UfZ{xXTnJ=~px!-xblI7h8Q~UZk1xMW-cwS1c zY5mqnf}dHSYGE{#OA>_~CM0PjUhx4?nqgpIxB{iQY>JDL^)mB{OA>Q(^kBJ9FQh0n z)lR|4K%qFZDm6b%N5MoPF()%UFF%b7$*zC@Apj%<4tJ>MIiNI`O{uYwoq`E2Q$YT; zfU0$X(uDMY>;dU3fT~{trMYaPjm%<8E$kGG%;5GJB3up2-?02Fz!+z$XP{@mzyK=& zU^$+HDJQWcwYY?V;RDoc15joIl@BO^Rh*hzmRh9eT2Yc(l$V$jTvC*omu{zEh_K!Q zVLd}haWW{F7!LdvSz0t@f(WSK1Bvn9TWs@Aws2QTadB!*^yox~6)@dPX2~zz!XR1OR{rBkuqJ literal 0 HcmV?d00001 diff --git a/2023/03/index.ts b/2023/03/index.ts new file mode 100644 index 0000000..0902bab --- /dev/null +++ b/2023/03/index.ts @@ -0,0 +1,58 @@ +const args = Bun.argv.slice(2) + +if(args.length !== 1) { + console.error('Please, provide an input file') + process.exit(1) +} + +const filename = args[0]; + + +const input = Bun.file(filename) +const text = await input.text() + +let count = 0 +let prevNums: Array<[string, number]> = [] +let prevSyms: Array<[number, string[]]> = [] +text.split('\n').forEach(ln => { + const line = ln.trim() + if(!line) return + + let tokens = line.matchAll(/\d+|\*/g) + + let nums: Array<[string, number]> = [], syms: Array<[number, string[]]> = [] + for(const token of tokens) { + /\d/.test(token.toString()) ? + nums.push([token.toString(), token.index as number]) : + syms.push([token.index as number, []]) + } + + + pushNums(prevSyms, nums) + .map(([_index, attached]) => attached) + .filter(attached => attached.length == 2) + .forEach(attached => { + count += attached + .map(e => parseInt(e)) + .reduce((a = 1, b = 1) => a * b, 1) + }) + + syms = pushNums(syms, nums) + syms = pushNums(syms, prevNums) + + prevNums = nums + prevSyms = syms +}) + +console.log(count) + +function pushNums(symbols: Array<[number, string[]]>, nums: Array<[string, number]>): [number, string[]][] { + return symbols.map(([index, attached]) => { + attached.push( + ...nums.filter(([num, nindex]) => { + return index >= nindex - 1 && index <= nindex + num.length + }).map(([num]) => num) + ) + return [index, attached] + }) +} diff --git a/2023/03/package.json b/2023/03/package.json new file mode 100644 index 0000000..82de3b1 --- /dev/null +++ b/2023/03/package.json @@ -0,0 +1,14 @@ +{ + "name": "advent-2023-03", + "module": "index.ts", + "type": "module", + "scripts": { + "start": "bun run ." + }, + "devDependencies": { + "bun-types": "latest" + }, + "peerDependencies": { + "typescript": "^5.0.0" + } +} diff --git a/2023/03/sample.txt b/2023/03/sample.txt new file mode 100644 index 0000000..b20187f --- /dev/null +++ b/2023/03/sample.txt @@ -0,0 +1,10 @@ +467..114.. +...*...... +..35..633. +......#... +617*...... +.....+.58. +..592..... +......755. +...$.*.... +.664.598.. diff --git a/2023/03/tsconfig.json b/2023/03/tsconfig.json new file mode 100644 index 0000000..7556e1d --- /dev/null +++ b/2023/03/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "lib": ["ESNext"], + "module": "esnext", + "target": "esnext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "allowImportingTsExtensions": true, + "noEmit": true, + "composite": true, + "strict": true, + "downlevelIteration": true, + "skipLibCheck": true, + "jsx": "react-jsx", + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "types": [ + "bun-types" // add Bun global + ] + } +} diff --git a/2023/04/.gitignore b/2023/04/.gitignore new file mode 100644 index 0000000..ba2906d --- /dev/null +++ b/2023/04/.gitignore @@ -0,0 +1 @@ +main diff --git a/2023/04/main.c b/2023/04/main.c new file mode 100644 index 0000000..abfadf4 --- /dev/null +++ b/2023/04/main.c @@ -0,0 +1,72 @@ +// gcc -static main.c -o main -Ofast + +#include +#include +#include + +unsigned long long count = 0; + +unsigned char start_index; +unsigned char scratches_end; +unsigned char results_index; +unsigned char line_size; + +unsigned short k = 0; +//unsigned int sclones = 0; +unsigned long long clones[32767] = { [0 ... 32766] = 1 }; +void addCardToCount(char *line) { + unsigned char matches = 0; + for(unsigned char i = start_index; i < scratches_end; i += 3) { + for(unsigned char j = results_index; j < line_size; j += 3) { + unsigned char match = (line[i] == line[j] && line[i + 1] == line[j + 1]); + matches += match; + if(match) break; + } + } + + //unsigned long long this_instan = sclones > k ? clones[k] + 1 : 1; + unsigned long long this_instan = clones[k]; + for(unsigned short i = k + 1; i < matches + k + 1; i++) { + //clones[i] = ((sclones > i) * clones[i]) + this_instan; + clones[i] += this_instan; + } + //sclones = sclones > k + matches ? sclones + 1 : k + matches; + + count += this_instan; + k++; +} + +int main() { + clock_t begin = clock(); + + unsigned char i = 0; + char line[256]; + + while(read(0, &line[i], 1) > 0 && line[i] != ':') { + i++; + } + start_index = ++i + 1; + + while(read(0, &line[i], 1) > 0 && line[i] != '|') { + i++; + } + scratches_end = i - 1; + results_index = i++ + 2; + + while(read(0, &line[i], 1) > 0 && line[i] != '\n') { + i++; + } + line_size = ++i; + + do { + addCardToCount(line); + } while(read(0, &line, line_size) == line_size); + + clock_t end = clock(); + double time_spent = (double)(end - begin) / CLOCKS_PER_SEC; + + printf("%llu\n", count); + printf("Time spent: %lf\n", time_spent); + + return 0; +} diff --git a/2023/04/sample.txt b/2023/04/sample.txt new file mode 100644 index 0000000..9bdb874 --- /dev/null +++ b/2023/04/sample.txt @@ -0,0 +1,6 @@ +Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53 +Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19 +Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1 +Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83 +Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36 +Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11