commit b38425afe77ed11c3c8c5c32b1954d4271d439a1
parent 26ddbd7d1a99aa6248a147f8a05531d4b1c4d853
Author: finwo <finwo@pm.me>
Date: Thu, 9 Dec 2021 21:54:41 +0100
Moved day-03 to it's own directory
Diffstat:
13 files changed, 805 insertions(+), 112 deletions(-)
diff --git a/assets/day-03/input b/solutions/day-03/assets/input
diff --git a/config.build.json b/solutions/day-03/config.build.json
diff --git a/solutions/day-03/line-by-line.ts b/solutions/day-03/line-by-line.ts
@@ -0,0 +1 @@
+../../common/line-by-line.ts
+\ No newline at end of file
diff --git a/solutions/day-03/package-lock.json b/solutions/day-03/package-lock.json
@@ -0,0 +1,669 @@
+{
+ "name": "day-03",
+ "version": "1.0.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "day-03",
+ "version": "1.0.0",
+ "license": "ISC",
+ "devDependencies": {
+ "aaargh": "^1.0.3",
+ "esbuild": "^0.14.2",
+ "readline": "^1.3.0"
+ }
+ },
+ "node_modules/aaargh": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/aaargh/-/aaargh-1.0.3.tgz",
+ "integrity": "sha512-E12J0eKHyryc/Ok7eCxjjDQyeHwUgWLCWF7uMNy3qWHPPxlApDXjImWvspTBaGjftxRZKyB3z7n+H1qTC7wKMQ==",
+ "dev": true,
+ "dependencies": {
+ "deepmerge": "^4.2.2",
+ "glob": "^7.1.7",
+ "minimist": "^1.2.5"
+ },
+ "bin": {
+ "aaargh": "index.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/finwo"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "node_modules/deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz",
+ "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "optionalDependencies": {
+ "esbuild-android-arm64": "0.14.2",
+ "esbuild-darwin-64": "0.14.2",
+ "esbuild-darwin-arm64": "0.14.2",
+ "esbuild-freebsd-64": "0.14.2",
+ "esbuild-freebsd-arm64": "0.14.2",
+ "esbuild-linux-32": "0.14.2",
+ "esbuild-linux-64": "0.14.2",
+ "esbuild-linux-arm": "0.14.2",
+ "esbuild-linux-arm64": "0.14.2",
+ "esbuild-linux-mips64le": "0.14.2",
+ "esbuild-linux-ppc64le": "0.14.2",
+ "esbuild-netbsd-64": "0.14.2",
+ "esbuild-openbsd-64": "0.14.2",
+ "esbuild-sunos-64": "0.14.2",
+ "esbuild-windows-32": "0.14.2",
+ "esbuild-windows-64": "0.14.2",
+ "esbuild-windows-arm64": "0.14.2"
+ }
+ },
+ "node_modules/esbuild-android-arm64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz",
+ "integrity": "sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/esbuild-darwin-64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz",
+ "integrity": "sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/esbuild-darwin-arm64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz",
+ "integrity": "sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/esbuild-freebsd-64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz",
+ "integrity": "sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/esbuild-freebsd-arm64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz",
+ "integrity": "sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/esbuild-linux-32": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz",
+ "integrity": "sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/esbuild-linux-64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz",
+ "integrity": "sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/esbuild-linux-arm": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz",
+ "integrity": "sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/esbuild-linux-arm64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz",
+ "integrity": "sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/esbuild-linux-mips64le": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz",
+ "integrity": "sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/esbuild-linux-ppc64le": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz",
+ "integrity": "sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/esbuild-netbsd-64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz",
+ "integrity": "sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ]
+ },
+ "node_modules/esbuild-openbsd-64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz",
+ "integrity": "sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/esbuild-sunos-64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz",
+ "integrity": "sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ]
+ },
+ "node_modules/esbuild-windows-32": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz",
+ "integrity": "sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/esbuild-windows-64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz",
+ "integrity": "sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/esbuild-windows-arm64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz",
+ "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "node_modules/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readline": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz",
+ "integrity": "sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw=",
+ "dev": true
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ },
+ "dependencies": {
+ "aaargh": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/aaargh/-/aaargh-1.0.3.tgz",
+ "integrity": "sha512-E12J0eKHyryc/Ok7eCxjjDQyeHwUgWLCWF7uMNy3qWHPPxlApDXjImWvspTBaGjftxRZKyB3z7n+H1qTC7wKMQ==",
+ "dev": true,
+ "requires": {
+ "deepmerge": "^4.2.2",
+ "glob": "^7.1.7",
+ "minimist": "^1.2.5"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "dev": true
+ },
+ "esbuild": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz",
+ "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==",
+ "dev": true,
+ "requires": {
+ "esbuild-android-arm64": "0.14.2",
+ "esbuild-darwin-64": "0.14.2",
+ "esbuild-darwin-arm64": "0.14.2",
+ "esbuild-freebsd-64": "0.14.2",
+ "esbuild-freebsd-arm64": "0.14.2",
+ "esbuild-linux-32": "0.14.2",
+ "esbuild-linux-64": "0.14.2",
+ "esbuild-linux-arm": "0.14.2",
+ "esbuild-linux-arm64": "0.14.2",
+ "esbuild-linux-mips64le": "0.14.2",
+ "esbuild-linux-ppc64le": "0.14.2",
+ "esbuild-netbsd-64": "0.14.2",
+ "esbuild-openbsd-64": "0.14.2",
+ "esbuild-sunos-64": "0.14.2",
+ "esbuild-windows-32": "0.14.2",
+ "esbuild-windows-64": "0.14.2",
+ "esbuild-windows-arm64": "0.14.2"
+ }
+ },
+ "esbuild-android-arm64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz",
+ "integrity": "sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-darwin-64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz",
+ "integrity": "sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-darwin-arm64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz",
+ "integrity": "sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-freebsd-64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz",
+ "integrity": "sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-freebsd-arm64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz",
+ "integrity": "sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-32": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz",
+ "integrity": "sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz",
+ "integrity": "sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-arm": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz",
+ "integrity": "sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-arm64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz",
+ "integrity": "sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-mips64le": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz",
+ "integrity": "sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-ppc64le": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz",
+ "integrity": "sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-netbsd-64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz",
+ "integrity": "sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-openbsd-64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz",
+ "integrity": "sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-sunos-64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz",
+ "integrity": "sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-windows-32": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz",
+ "integrity": "sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-windows-64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz",
+ "integrity": "sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-windows-arm64": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz",
+ "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==",
+ "dev": true,
+ "optional": true
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "readline": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz",
+ "integrity": "sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw=",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/solutions/day-03/package.json b/solutions/day-03/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "day-03",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "build": "rm -rf dist ; cp -r assets dist ; esbuild $(aaargh config.build.json)",
+ "start": "node dist/part-01.js | tail -10 ; node dist/part-02.js | tail -10"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "devDependencies": {
+ "aaargh": "^1.0.3",
+ "esbuild": "^0.14.2",
+ "readline": "^1.3.0"
+ }
+}
diff --git a/solutions/day-03/src/line-by-line.ts b/solutions/day-03/src/line-by-line.ts
@@ -0,0 +1 @@
+../../common/line-by-line.ts
+\ No newline at end of file
diff --git a/solutions/day-03/src/most-weighted-value.ts b/solutions/day-03/src/most-weighted-value.ts
@@ -0,0 +1 @@
+../../common/most-weighted-value.ts
+\ No newline at end of file
diff --git a/solutions/day-03/src/part-01.ts b/solutions/day-03/src/part-01.ts
@@ -0,0 +1,42 @@
+import { lineByLine } from './line-by-line';
+
+let values = null;
+let lines = 0;
+
+(async () => {
+
+ await lineByLine(__dirname + '/input', line => {
+ if (!line) return;
+
+ const lineValues = line.split('');
+ lines++;
+
+ if (!values) {
+ values = new Array(lineValues.length).fill(0);
+ }
+
+ lineValues.forEach((bit, index) => {
+ values[index] += parseInt(bit, 2);
+ });
+ });
+
+ // Tasks questions
+ const commons = values.map((a,i) => (a >= (lines / 2) ? 1 : 0));
+ const gamma = parseInt(commons.join(''), 2);
+ const epsilon = parseInt(commons.map(a => 1-a).join(''), 2);
+ const power = gamma * epsilon;
+
+ process.stdout.write('\n\n');
+ process.stdout.write('---[ REPORT ]---\n');
+ process.stdout.write('\n');
+ process.stdout.write(`Values (total: ${lines})\n`);
+ process.stdout.write(` ${values.join(',')}\n`);
+ process.stdout.write('\n');
+ process.stdout.write(`Gamma : ${gamma}\n`);
+ process.stdout.write(`Epsilon: ${epsilon}\n`);
+ process.stdout.write(`Power : ${power}\n`);
+ process.stdout.write('\n');
+
+
+})();
+
diff --git a/solutions/day-03/src/part-02.ts b/solutions/day-03/src/part-02.ts
@@ -0,0 +1,65 @@
+import { lineByLine } from './line-by-line';
+import { weightedValues } from './weighted-values';
+import { mostWeightedValue } from './most-weighted-value';
+
+(async () => {
+
+ // Read whole input into memory this time
+ const storage = [];
+ await lineByLine(__dirname + '/input', line => {
+ if (!line) return;
+ storage.push(line.split('').map(v => parseInt(v, 2)));
+ });
+
+ // The things we need to filter
+ let oxygenReadings = storage.slice();
+ let scrubberReadings = storage.slice();
+
+ // Filter the oxygen readings
+ for(let idx = 0 ; oxygenReadings.length > 1 ; idx++) {
+ const column = oxygenReadings.map(a => a[idx]);
+ const weights = weightedValues(column);
+ let mostCommon = mostWeightedValue(weights, false);
+
+ // Equal = 1, as specified
+ if (mostCommon === undefined) {
+ mostCommon = 1;
+ }
+
+ // Remove non-matching values
+ oxygenReadings = oxygenReadings.filter(v => v[idx] == mostCommon);
+ }
+
+ // Filter the scrubber readings
+ for(let idx = 0 ; scrubberReadings.length > 1 ; idx++) {
+ const column = scrubberReadings.map(a => a[idx]);
+ const weights = weightedValues(column);
+ let mostCommon = mostWeightedValue(weights, false);
+
+ // Equal = 1, as inverted of specified
+ if (mostCommon === undefined) {
+ mostCommon = 1;
+ }
+
+ // Invert, we're working binary-ish
+ const leastCommon = (!mostCommon) | 0;
+
+ // Remove non-matching values
+ scrubberReadings = scrubberReadings.filter(v => v[idx] == leastCommon);
+ }
+
+ // Convert into numbers again
+ const oxygenRating = parseInt(oxygenReadings[0].join(''), 2);
+ const scrubberRating = parseInt(scrubberReadings[0].join(''), 2);
+ const lifeSupportRating = oxygenRating * scrubberRating;
+
+ process.stdout.write('\n\n');
+ process.stdout.write('---[ REPORT ]---\n');
+ process.stdout.write('\n');
+ process.stdout.write(`oxygen rating : ${oxygenRating}\n`);
+ process.stdout.write(`scrubber rating : ${scrubberRating}\n`);
+ process.stdout.write(`life support rating : ${lifeSupportRating}\n`);
+ process.stdout.write('\n');
+
+})();
+
diff --git a/solutions/day-03/src/weighted-value.ts b/solutions/day-03/src/weighted-value.ts
@@ -0,0 +1 @@
+../../common/weighted-value.ts
+\ No newline at end of file
diff --git a/solutions/day-03/src/weighted-values.ts b/solutions/day-03/src/weighted-values.ts
@@ -0,0 +1 @@
+../../common/weighted-values.ts
+\ No newline at end of file
diff --git a/src/day-03/puzzle-01.ts b/src/day-03/puzzle-01.ts
@@ -1,42 +0,0 @@
-import { lineByLine } from '../common';
-
-let values = null;
-let lines = 0;
-
-(async () => {
-
- await lineByLine(__dirname + '/input', line => {
- if (!line) return;
-
- const lineValues = line.split('');
- lines++;
-
- if (!values) {
- values = new Array(lineValues.length).fill(0);
- }
-
- lineValues.forEach((bit, index) => {
- values[index] += parseInt(bit, 2);
- });
- });
-
- // Tasks questions
- const commons = values.map((a,i) => (a >= (lines / 2) ? 1 : 0));
- const gamma = parseInt(commons.join(''), 2);
- const epsilon = parseInt(commons.map(a => 1-a).join(''), 2);
- const power = gamma * epsilon;
-
- process.stdout.write('\n\n');
- process.stdout.write('---[ REPORT ]---\n');
- process.stdout.write('\n');
- process.stdout.write(`Values (total: ${lines})\n`);
- process.stdout.write(` ${values.join(',')}\n`);
- process.stdout.write('\n');
- process.stdout.write(`Gamma : ${gamma}\n`);
- process.stdout.write(`Epsilon: ${epsilon}\n`);
- process.stdout.write(`Power : ${power}\n`);
- process.stdout.write('\n');
-
-
-})();
-
diff --git a/src/day-03/puzzle-02.ts b/src/day-03/puzzle-02.ts
@@ -1,70 +0,0 @@
-import {
- lineByLine,
- weightedValues,
- mostWeightedValue
-} from '../common';
-
-// let values = null;
-// let lines = 0;
-
-(async () => {
-
- // Read whole input into memory this time
- const storage = [];
- await lineByLine(__dirname + '/input', line => {
- if (!line) return;
- storage.push(line.split('').map(v => parseInt(v, 2)));
- });
-
- // The things we need to filter
- let oxygenReadings = storage.slice();
- let scrubberReadings = storage.slice();
-
- // Filter the oxygen readings
- for(let idx = 0 ; oxygenReadings.length > 1 ; idx++) {
- const column = oxygenReadings.map(a => a[idx]);
- const weights = weightedValues(column);
- let mostCommon = mostWeightedValue(weights, false);
-
- // Equal = 1, as specified
- if (mostCommon === undefined) {
- mostCommon = 1;
- }
-
- // Remove non-matching values
- oxygenReadings = oxygenReadings.filter(v => v[idx] == mostCommon);
- }
-
- // Filter the scrubber readings
- for(let idx = 0 ; scrubberReadings.length > 1 ; idx++) {
- const column = scrubberReadings.map(a => a[idx]);
- const weights = weightedValues(column);
- let mostCommon = mostWeightedValue(weights, false);
-
- // Equal = 1, as inverted of specified
- if (mostCommon === undefined) {
- mostCommon = 1;
- }
-
- // Invert, we're working binary-ish
- const leastCommon = (!mostCommon) | 0;
-
- // Remove non-matching values
- scrubberReadings = scrubberReadings.filter(v => v[idx] == leastCommon);
- }
-
- // Convert into numbers again
- const oxygenRating = parseInt(oxygenReadings[0].join(''), 2);
- const scrubberRating = parseInt(scrubberReadings[0].join(''), 2);
- const lifeSupportRating = oxygenRating * scrubberRating;
-
- process.stdout.write('\n\n');
- process.stdout.write('---[ REPORT ]---\n');
- process.stdout.write('\n');
- process.stdout.write(`oxygen rating : ${oxygenRating}\n`);
- process.stdout.write(`scrubber rating : ${scrubberRating}\n`);
- process.stdout.write(`life support rating : ${lifeSupportRating}\n`);
- process.stdout.write('\n');
-
-})();
-