From f214ed1fe335456d710e4d90feb01b8f31c804c0 Mon Sep 17 00:00:00 2001 From: Nathan van Ofwegen Date: Mon, 5 Dec 2022 18:17:03 +0000 Subject: [PATCH] d5p1 --- package-lock.json | 126 ++++++++-- package.json | 8 +- src/2022/day4/example.txt | 15 +- src/2022/day4/index.ts | 15 +- src/2022/day5/example.txt | 9 + src/2022/day5/index.ts | 32 +++ src/2022/day5/input.txt | 513 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 682 insertions(+), 36 deletions(-) create mode 100644 src/2022/day5/example.txt create mode 100644 src/2022/day5/index.ts create mode 100644 src/2022/day5/input.txt diff --git a/package-lock.json b/package-lock.json index 22a52f2..6179808 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,12 +5,13 @@ "packages": { "": { "dependencies": { - "nodemon": "^2.0.20" + "timestamp-nano": "^1.0.0" }, "devDependencies": { "@swc/core": "^1.3.21", "@swc/helpers": "^0.4.14", "@types/node": "^16.18.4", + "nodemon": "^2.0.20", "regenerator-runtime": "^0.13.11", "ts-node": "^10.9.1", "typescript": "^4.9.3" @@ -284,7 +285,8 @@ "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, "node_modules/acorn": { "version": "8.8.1", @@ -311,6 +313,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -328,12 +331,14 @@ "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==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, "engines": { "node": ">=8" } @@ -342,6 +347,7 @@ "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" @@ -351,6 +357,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -362,6 +369,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, "funding": [ { "type": "individual", @@ -387,7 +395,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/create-require": { "version": "1.1.1", @@ -399,6 +408,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { "ms": "^2.1.1" } @@ -416,6 +426,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -427,6 +438,7 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -440,6 +452,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -451,6 +464,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { "node": ">=4" } @@ -458,12 +472,14 @@ "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -475,6 +491,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -483,6 +500,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -494,6 +512,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { "node": ">=0.12.0" } @@ -508,6 +527,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -518,12 +538,14 @@ "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "node_modules/nodemon": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", + "dev": true, "dependencies": { "chokidar": "^3.5.2", "debug": "^3.2.7", @@ -551,6 +573,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, "dependencies": { "abbrev": "1" }, @@ -565,6 +588,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -573,6 +597,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -583,12 +608,14 @@ "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -606,6 +633,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, "bin": { "semver": "bin/semver" } @@ -614,6 +642,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, "dependencies": { "semver": "~7.0.0" }, @@ -625,6 +654,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -633,6 +663,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -640,10 +671,19 @@ "node": ">=4" } }, + "node_modules/timestamp-nano": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/timestamp-nano/-/timestamp-nano-1.0.0.tgz", + "integrity": "sha512-NO/1CZigzlCWQiWdIGv8ebXt6Uk77zdLz2NE7KcZRU5Egj2+947lzUpk30xQUQlq5dRY25j7ZulG4RfA2DHYfA==", + "engines": { + "node": ">= 4.5.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -655,6 +695,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, "dependencies": { "nopt": "~1.0.10" }, @@ -727,7 +768,8 @@ "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", @@ -907,7 +949,8 @@ "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, "acorn": { "version": "8.8.1", @@ -925,6 +968,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -939,17 +983,20 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "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" @@ -959,6 +1006,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -967,6 +1015,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -981,7 +1030,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "create-require": { "version": "1.1.1", @@ -993,6 +1043,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "requires": { "ms": "^2.1.1" } @@ -1007,6 +1058,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -1015,12 +1067,14 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "optional": true }, "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -1028,17 +1082,20 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true }, "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "requires": { "binary-extensions": "^2.0.0" } @@ -1046,12 +1103,14 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -1059,7 +1118,8 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "make-error": { "version": "1.3.6", @@ -1071,6 +1131,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -1078,12 +1139,14 @@ "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "nodemon": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", + "dev": true, "requires": { "chokidar": "^3.5.2", "debug": "^3.2.7", @@ -1101,6 +1164,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, "requires": { "abbrev": "1" } @@ -1108,22 +1172,26 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true }, "pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "requires": { "picomatch": "^2.2.1" } @@ -1137,12 +1205,14 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true }, "simple-update-notifier": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, "requires": { "semver": "~7.0.0" }, @@ -1150,7 +1220,8 @@ "semver": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true } } }, @@ -1158,14 +1229,21 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" } }, + "timestamp-nano": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/timestamp-nano/-/timestamp-nano-1.0.0.tgz", + "integrity": "sha512-NO/1CZigzlCWQiWdIGv8ebXt6Uk77zdLz2NE7KcZRU5Egj2+947lzUpk30xQUQlq5dRY25j7ZulG4RfA2DHYfA==" + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "requires": { "is-number": "^7.0.0" } @@ -1174,6 +1252,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, "requires": { "nopt": "~1.0.10" } @@ -1214,7 +1293,8 @@ "undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true }, "v8-compile-cache-lib": { "version": "3.0.1", diff --git a/package.json b/package.json index 16df25e..e84cf58 100644 --- a/package.json +++ b/package.json @@ -3,15 +3,15 @@ "@swc/core": "^1.3.21", "@swc/helpers": "^0.4.14", "@types/node": "^16.18.4", + "nodemon": "^2.0.20", "regenerator-runtime": "^0.13.11", "ts-node": "^10.9.1", - "typescript": "^4.9.3", - "nodemon": "^2.0.20" + "typescript": "^4.9.3" }, "dependencies": { - + "timestamp-nano": "^1.0.0" }, "scripts": { - "start": "nodemon src/2022/day4/index.ts" + "start": "nodemon src/2022/day5/index.ts" } } diff --git a/src/2022/day4/example.txt b/src/2022/day4/example.txt index 99a66c5..e98aba4 100644 --- a/src/2022/day4/example.txt +++ b/src/2022/day4/example.txt @@ -1,6 +1,9 @@ -2-4,6-8 -2-3,4-5 -5-7,7-9 -2-8,3-7 -6-6,4-6 -2-6,4-8 \ No newline at end of file + [D] +[N] [C] +[Z] [M] [P] + 1 2 3 + +move 1 from 2 to 1 +move 3 from 1 to 3 +move 2 from 2 to 1 +move 1 from 1 to 2 \ No newline at end of file diff --git a/src/2022/day4/index.ts b/src/2022/day4/index.ts index c4be22e..7f24fd5 100644 --- a/src/2022/day4/index.ts +++ b/src/2022/day4/index.ts @@ -1,18 +1,27 @@ import path from 'path'; import { readFile, sum } from "../../utils"; - let input = readFile(path.resolve(__dirname, 'input.txt')); +let start, elapsed; + + +start = process.hrtime.bigint(); + const day1 = input.split('\n').filter(row => { const [firstElf, secondElf] = row.split(',').map(elf => elf.split('-').map(Number)); return (firstElf[0] - secondElf[0] >= 0 && secondElf[1] - firstElf[1] >= 0) || (secondElf[0] - firstElf[0] >= 0 && firstElf[1] - secondElf[1] >= 0); }).length; -console.log("Day1:", day1) +elapsed = (process.hrtime.bigint() - start) / BigInt(1000); +console.log(`Day1: ${day1} - calculated in ${elapsed}μs`) + +start = process.hrtime.bigint(); const day2 = input.split('\n').filter(row => { const [firstElf, secondElf] = row.split(',').map(elf => elf.split('-').map(Number)); return (firstElf[1] >= secondElf[0] && secondElf[1] >= firstElf[0]); }).length; -console.log("Day2:", day2); \ No newline at end of file +elapsed = (process.hrtime.bigint() - start) / BigInt(1000); + +console.log(`Day2: ${day2} - calculated in ${elapsed}μs`) \ No newline at end of file diff --git a/src/2022/day5/example.txt b/src/2022/day5/example.txt new file mode 100644 index 0000000..e98aba4 --- /dev/null +++ b/src/2022/day5/example.txt @@ -0,0 +1,9 @@ + [D] +[N] [C] +[Z] [M] [P] + 1 2 3 + +move 1 from 2 to 1 +move 3 from 1 to 3 +move 2 from 2 to 1 +move 1 from 1 to 2 \ No newline at end of file diff --git a/src/2022/day5/index.ts b/src/2022/day5/index.ts new file mode 100644 index 0000000..e168a63 --- /dev/null +++ b/src/2022/day5/index.ts @@ -0,0 +1,32 @@ +import path from 'path'; +import { readFile, sum } from "../../utils"; + +let input = readFile(path.resolve(__dirname, 'input.txt')); + +let start, elapsed; + + +start = process.hrtime.bigint(); + +const [stack, rules] = input.split('\n\n').map(entry => entry.split('\n')) + +let stackInput = stack[stack.length - 1].split(' ').map(idx => idx.split(" ").join("")).map(idx => []); +const indexes = stackInput.map((arr, idx) => stack[stack.length - 1].indexOf(idx + 1).toString()).map(Number); + +for (let idx = stack.length - 2; idx >= 0; idx--) { + for (let idx2 = 0; idx2 < indexes.length; idx2++) { + const char = stack[idx][indexes[idx2]]; + if (char !== ' ') stackInput[idx2].push(char); + } +} + +for (let idx = 0; idx < rules.length; idx++) { + const [move, from, to] = rules[idx].split(' ').filter(el => !isNaN(Number(el))).map(Number); + for (let num = 0; num < move; num++) stackInput[to - 1].push(stackInput[from - 1].pop()); +} + +const part1 = stackInput.map(buck => buck[buck.length - 1]).join(""); + +console.log("Part1:", part1); + +elapsed = process.hrtime.bigint() - start; \ No newline at end of file diff --git a/src/2022/day5/input.txt b/src/2022/day5/input.txt new file mode 100644 index 0000000..23e3650 --- /dev/null +++ b/src/2022/day5/input.txt @@ -0,0 +1,513 @@ +[T] [P] [J] +[F] [S] [T] [R] [B] +[V] [M] [H] [S] [F] [R] +[Z] [P] [Q] [B] [S] [W] [P] +[C] [Q] [R] [D] [Z] [N] [H] [Q] +[W] [B] [T] [F] [L] [T] [M] [F] [T] +[S] [R] [Z] [V] [G] [R] [Q] [N] [Z] +[Q] [Q] [B] [D] [J] [W] [H] [R] [J] + 1 2 3 4 5 6 7 8 9 + +move 3 from 8 to 2 +move 3 from 1 to 5 +move 3 from 1 to 4 +move 2 from 7 to 4 +move 3 from 7 to 4 +move 8 from 5 to 7 +move 2 from 1 to 8 +move 7 from 3 to 2 +move 1 from 5 to 2 +move 1 from 6 to 7 +move 2 from 5 to 9 +move 1 from 9 to 1 +move 3 from 9 to 6 +move 5 from 6 to 2 +move 10 from 7 to 2 +move 3 from 8 to 9 +move 7 from 9 to 2 +move 1 from 1 to 2 +move 1 from 9 to 6 +move 1 from 4 to 1 +move 1 from 8 to 2 +move 11 from 4 to 2 +move 1 from 7 to 9 +move 1 from 4 to 6 +move 1 from 9 to 7 +move 1 from 1 to 3 +move 1 from 7 to 5 +move 1 from 4 to 9 +move 1 from 5 to 2 +move 1 from 3 to 8 +move 1 from 6 to 9 +move 1 from 8 to 6 +move 11 from 2 to 1 +move 1 from 6 to 8 +move 7 from 2 to 1 +move 14 from 2 to 7 +move 1 from 6 to 3 +move 1 from 8 to 2 +move 1 from 3 to 9 +move 7 from 7 to 1 +move 1 from 6 to 5 +move 5 from 7 to 6 +move 4 from 2 to 8 +move 3 from 6 to 7 +move 3 from 7 to 8 +move 9 from 1 to 3 +move 8 from 3 to 7 +move 1 from 3 to 1 +move 2 from 2 to 3 +move 1 from 6 to 7 +move 2 from 1 to 7 +move 7 from 1 to 6 +move 1 from 3 to 5 +move 2 from 5 to 3 +move 7 from 6 to 3 +move 9 from 7 to 5 +move 1 from 9 to 1 +move 4 from 8 to 5 +move 7 from 1 to 5 +move 4 from 7 to 2 +move 1 from 7 to 8 +move 1 from 6 to 4 +move 10 from 5 to 3 +move 8 from 5 to 1 +move 2 from 8 to 3 +move 2 from 8 to 9 +move 8 from 2 to 7 +move 4 from 9 to 8 +move 13 from 3 to 7 +move 1 from 5 to 3 +move 6 from 3 to 9 +move 10 from 1 to 9 +move 1 from 3 to 4 +move 6 from 9 to 7 +move 1 from 5 to 8 +move 14 from 7 to 6 +move 14 from 6 to 1 +move 13 from 1 to 8 +move 1 from 1 to 2 +move 9 from 8 to 9 +move 6 from 8 to 5 +move 2 from 4 to 6 +move 1 from 8 to 1 +move 2 from 2 to 1 +move 2 from 8 to 6 +move 3 from 1 to 2 +move 3 from 3 to 9 +move 16 from 9 to 1 +move 3 from 2 to 4 +move 3 from 7 to 2 +move 6 from 5 to 4 +move 5 from 7 to 3 +move 4 from 6 to 1 +move 10 from 2 to 9 +move 13 from 9 to 1 +move 5 from 7 to 2 +move 2 from 4 to 6 +move 1 from 9 to 1 +move 2 from 9 to 5 +move 2 from 6 to 8 +move 2 from 5 to 3 +move 1 from 8 to 3 +move 31 from 1 to 7 +move 2 from 1 to 5 +move 12 from 7 to 3 +move 11 from 3 to 2 +move 1 from 8 to 4 +move 6 from 4 to 5 +move 1 from 3 to 4 +move 8 from 3 to 2 +move 5 from 5 to 6 +move 2 from 6 to 7 +move 4 from 7 to 3 +move 1 from 6 to 9 +move 13 from 7 to 6 +move 13 from 2 to 3 +move 1 from 4 to 8 +move 10 from 2 to 3 +move 3 from 7 to 3 +move 2 from 2 to 1 +move 1 from 8 to 2 +move 2 from 4 to 7 +move 1 from 9 to 2 +move 3 from 7 to 3 +move 1 from 5 to 1 +move 2 from 5 to 2 +move 15 from 6 to 7 +move 4 from 1 to 9 +move 22 from 3 to 9 +move 7 from 3 to 9 +move 4 from 3 to 8 +move 4 from 9 to 4 +move 3 from 2 to 4 +move 5 from 7 to 1 +move 7 from 4 to 7 +move 2 from 8 to 4 +move 1 from 4 to 8 +move 3 from 1 to 5 +move 2 from 1 to 4 +move 1 from 2 to 9 +move 2 from 5 to 7 +move 1 from 5 to 9 +move 3 from 8 to 6 +move 8 from 7 to 1 +move 6 from 7 to 1 +move 10 from 1 to 9 +move 3 from 6 to 2 +move 2 from 1 to 3 +move 2 from 3 to 6 +move 3 from 7 to 4 +move 2 from 7 to 1 +move 1 from 2 to 5 +move 13 from 9 to 5 +move 12 from 9 to 3 +move 6 from 5 to 3 +move 2 from 9 to 1 +move 11 from 9 to 3 +move 1 from 4 to 6 +move 2 from 5 to 3 +move 1 from 1 to 8 +move 24 from 3 to 5 +move 2 from 9 to 3 +move 2 from 2 to 4 +move 1 from 9 to 2 +move 2 from 6 to 8 +move 5 from 3 to 5 +move 2 from 8 to 9 +move 1 from 9 to 8 +move 4 from 1 to 4 +move 1 from 9 to 4 +move 1 from 8 to 4 +move 1 from 8 to 4 +move 7 from 4 to 5 +move 1 from 1 to 8 +move 1 from 6 to 5 +move 35 from 5 to 4 +move 18 from 4 to 3 +move 6 from 4 to 3 +move 8 from 5 to 8 +move 8 from 8 to 1 +move 2 from 4 to 9 +move 23 from 3 to 1 +move 1 from 8 to 5 +move 1 from 9 to 1 +move 1 from 5 to 1 +move 1 from 9 to 4 +move 11 from 1 to 2 +move 16 from 4 to 5 +move 3 from 3 to 5 +move 9 from 2 to 5 +move 1 from 4 to 1 +move 2 from 2 to 6 +move 1 from 2 to 9 +move 1 from 6 to 2 +move 1 from 3 to 5 +move 1 from 3 to 9 +move 1 from 2 to 9 +move 23 from 1 to 5 +move 1 from 6 to 9 +move 1 from 9 to 8 +move 27 from 5 to 1 +move 1 from 9 to 3 +move 18 from 5 to 8 +move 6 from 5 to 7 +move 1 from 5 to 6 +move 1 from 9 to 8 +move 12 from 8 to 3 +move 1 from 1 to 4 +move 6 from 7 to 8 +move 1 from 6 to 3 +move 1 from 4 to 2 +move 2 from 1 to 8 +move 1 from 2 to 9 +move 8 from 3 to 2 +move 2 from 9 to 7 +move 5 from 2 to 7 +move 7 from 7 to 2 +move 2 from 8 to 2 +move 3 from 1 to 9 +move 5 from 1 to 2 +move 3 from 9 to 8 +move 3 from 8 to 7 +move 5 from 2 to 5 +move 2 from 7 to 6 +move 12 from 8 to 9 +move 12 from 1 to 4 +move 9 from 9 to 3 +move 4 from 5 to 8 +move 12 from 3 to 8 +move 1 from 7 to 9 +move 3 from 9 to 2 +move 1 from 4 to 7 +move 3 from 1 to 7 +move 7 from 4 to 6 +move 3 from 6 to 2 +move 2 from 7 to 9 +move 18 from 8 to 1 +move 2 from 4 to 7 +move 1 from 2 to 8 +move 1 from 8 to 2 +move 10 from 2 to 3 +move 3 from 9 to 8 +move 2 from 6 to 7 +move 13 from 3 to 1 +move 2 from 8 to 9 +move 28 from 1 to 8 +move 1 from 5 to 2 +move 1 from 4 to 3 +move 4 from 7 to 6 +move 5 from 6 to 7 +move 7 from 2 to 6 +move 1 from 9 to 6 +move 2 from 2 to 4 +move 1 from 9 to 1 +move 4 from 1 to 2 +move 3 from 2 to 5 +move 3 from 4 to 9 +move 3 from 5 to 7 +move 1 from 1 to 4 +move 6 from 7 to 6 +move 1 from 2 to 6 +move 1 from 4 to 1 +move 1 from 1 to 8 +move 3 from 9 to 4 +move 18 from 6 to 3 +move 4 from 3 to 6 +move 1 from 7 to 9 +move 1 from 6 to 9 +move 2 from 3 to 6 +move 1 from 9 to 6 +move 1 from 9 to 2 +move 6 from 6 to 8 +move 3 from 4 to 7 +move 2 from 7 to 2 +move 35 from 8 to 7 +move 3 from 3 to 1 +move 26 from 7 to 2 +move 10 from 3 to 9 +move 6 from 9 to 4 +move 3 from 1 to 2 +move 1 from 4 to 3 +move 4 from 4 to 1 +move 1 from 3 to 6 +move 1 from 8 to 3 +move 1 from 6 to 2 +move 1 from 3 to 2 +move 13 from 7 to 3 +move 3 from 1 to 4 +move 4 from 3 to 1 +move 3 from 1 to 9 +move 2 from 1 to 9 +move 10 from 2 to 9 +move 19 from 2 to 9 +move 6 from 3 to 9 +move 2 from 3 to 4 +move 2 from 2 to 6 +move 17 from 9 to 8 +move 1 from 2 to 8 +move 2 from 9 to 3 +move 2 from 6 to 7 +move 8 from 9 to 3 +move 5 from 4 to 5 +move 14 from 9 to 4 +move 1 from 2 to 3 +move 1 from 7 to 2 +move 2 from 9 to 3 +move 1 from 2 to 7 +move 5 from 5 to 1 +move 1 from 2 to 1 +move 1 from 3 to 1 +move 1 from 9 to 7 +move 3 from 7 to 2 +move 3 from 3 to 7 +move 1 from 2 to 4 +move 1 from 3 to 8 +move 1 from 2 to 4 +move 4 from 3 to 4 +move 16 from 8 to 9 +move 3 from 1 to 4 +move 21 from 4 to 6 +move 1 from 7 to 2 +move 1 from 8 to 2 +move 1 from 1 to 3 +move 6 from 6 to 7 +move 3 from 1 to 9 +move 3 from 7 to 3 +move 1 from 4 to 6 +move 1 from 4 to 7 +move 2 from 2 to 6 +move 1 from 8 to 6 +move 13 from 6 to 7 +move 1 from 2 to 3 +move 15 from 9 to 8 +move 6 from 6 to 3 +move 13 from 8 to 3 +move 4 from 9 to 4 +move 5 from 4 to 8 +move 19 from 3 to 9 +move 3 from 3 to 1 +move 5 from 8 to 9 +move 17 from 9 to 7 +move 1 from 1 to 8 +move 4 from 9 to 6 +move 3 from 3 to 8 +move 1 from 1 to 2 +move 3 from 3 to 1 +move 36 from 7 to 6 +move 1 from 1 to 2 +move 7 from 8 to 2 +move 24 from 6 to 5 +move 2 from 6 to 7 +move 1 from 3 to 2 +move 4 from 6 to 8 +move 19 from 5 to 1 +move 8 from 6 to 4 +move 7 from 2 to 5 +move 3 from 2 to 8 +move 15 from 1 to 6 +move 2 from 9 to 5 +move 2 from 7 to 8 +move 3 from 4 to 1 +move 4 from 5 to 6 +move 1 from 9 to 7 +move 1 from 8 to 3 +move 3 from 6 to 1 +move 2 from 4 to 7 +move 13 from 1 to 8 +move 1 from 3 to 7 +move 1 from 4 to 5 +move 19 from 8 to 6 +move 1 from 7 to 3 +move 8 from 5 to 8 +move 1 from 6 to 8 +move 3 from 5 to 9 +move 1 from 6 to 4 +move 3 from 4 to 7 +move 1 from 3 to 9 +move 4 from 7 to 9 +move 20 from 6 to 3 +move 1 from 8 to 4 +move 2 from 9 to 4 +move 2 from 9 to 2 +move 2 from 9 to 3 +move 13 from 6 to 9 +move 9 from 9 to 8 +move 2 from 6 to 3 +move 8 from 8 to 2 +move 2 from 7 to 3 +move 5 from 9 to 3 +move 12 from 3 to 5 +move 1 from 4 to 7 +move 8 from 2 to 4 +move 8 from 4 to 7 +move 2 from 2 to 6 +move 2 from 8 to 9 +move 2 from 6 to 8 +move 2 from 9 to 6 +move 2 from 6 to 9 +move 2 from 4 to 8 +move 2 from 9 to 2 +move 6 from 3 to 1 +move 2 from 2 to 9 +move 3 from 9 to 3 +move 8 from 7 to 2 +move 6 from 1 to 2 +move 8 from 3 to 8 +move 1 from 7 to 3 +move 5 from 3 to 8 +move 6 from 2 to 7 +move 3 from 7 to 6 +move 2 from 7 to 9 +move 1 from 7 to 8 +move 8 from 5 to 7 +move 7 from 2 to 1 +move 7 from 1 to 6 +move 7 from 7 to 9 +move 1 from 7 to 6 +move 2 from 3 to 9 +move 2 from 8 to 5 +move 25 from 8 to 5 +move 5 from 5 to 1 +move 1 from 6 to 4 +move 17 from 5 to 4 +move 5 from 5 to 4 +move 23 from 4 to 7 +move 2 from 5 to 2 +move 4 from 6 to 3 +move 6 from 3 to 7 +move 1 from 5 to 2 +move 1 from 1 to 7 +move 2 from 2 to 8 +move 2 from 2 to 9 +move 1 from 5 to 7 +move 4 from 1 to 6 +move 2 from 8 to 3 +move 2 from 9 to 4 +move 1 from 4 to 8 +move 7 from 9 to 1 +move 2 from 3 to 5 +move 28 from 7 to 4 +move 4 from 6 to 2 +move 2 from 6 to 2 +move 3 from 7 to 4 +move 2 from 5 to 6 +move 4 from 2 to 6 +move 9 from 6 to 5 +move 4 from 1 to 7 +move 1 from 6 to 2 +move 3 from 2 to 3 +move 1 from 8 to 6 +move 1 from 7 to 4 +move 2 from 3 to 4 +move 1 from 7 to 4 +move 2 from 1 to 6 +move 1 from 7 to 9 +move 1 from 7 to 9 +move 1 from 6 to 2 +move 7 from 5 to 8 +move 1 from 3 to 9 +move 1 from 5 to 2 +move 7 from 8 to 7 +move 4 from 4 to 8 +move 2 from 8 to 4 +move 2 from 2 to 7 +move 1 from 1 to 7 +move 1 from 5 to 6 +move 32 from 4 to 7 +move 2 from 6 to 5 +move 2 from 8 to 2 +move 1 from 2 to 1 +move 2 from 5 to 4 +move 1 from 2 to 5 +move 1 from 1 to 4 +move 4 from 4 to 3 +move 1 from 6 to 4 +move 1 from 5 to 4 +move 5 from 9 to 1 +move 4 from 3 to 5 +move 3 from 1 to 6 +move 2 from 9 to 5 +move 2 from 1 to 3 +move 15 from 7 to 1 +move 5 from 5 to 3 +move 1 from 5 to 2 +move 3 from 4 to 5 +move 2 from 5 to 9 +move 3 from 3 to 6 +move 3 from 3 to 4 +move 1 from 3 to 8 +move 1 from 9 to 3 +move 2 from 4 to 9 +move 1 from 5 to 3 +move 2 from 9 to 6 +move 1 from 8 to 1 +move 1 from 3 to 2 +move 1 from 4 to 9 +move 2 from 9 to 3 +move 9 from 1 to 3 +move 5 from 3 to 4 +move 2 from 1 to 3 +move 4 from 1 to 5 +move 1 from 2 to 8 +move 3 from 4 to 9 \ No newline at end of file