commit 3cab6425a0cbaf1b422e87a030660f94d27440ec
parent 8e9a847d8011e9e88ddf339fb35968a699bf4e78
Author: finwo <finwo@pm.me>
Date: Tue, 15 Nov 2022 15:22:22 +0100
Replaced upipe by through2
Diffstat:
3 files changed, 140 insertions(+), 43 deletions(-)
diff --git a/2015/day-01/index.js b/2015/day-01/index.js
@@ -1,39 +1,47 @@
const fs = require('fs');
-const pipe = require('upipe');
+const through = require('through2');
let floor = 0;
let visitedBasement = false;
let ccount = 0;
-const handler = pipe();
-handler.on('end', () => {
- console.log(`Santa ends up on floor ${floor}`);
-});
-handler.on('data', c => {
- switch(c) {
- case '(':
- floor++;
- break;
- case ')':
- floor--;
- break;
- }
-
- ccount++;
-
- if (floor < 0 && !visitedBasement) {
- visitedBasement = true;
- console.log(`First entered the basement at instruction ${ccount}`);
- }
-});
-
-
-fs.open('input', 'r', (err, fd) => {
- if (err) throw err;
- const buff = Buffer.alloc(1);
- while(true) {
- const c = fs.readSync(fd, buff, 0, 1, null);
- if (c == 0) { handler.end(); break; };
- handler.write(buff.toString());
- }
-});
+fs.createReadStream('input')
+
+ // Convert to characters
+ .pipe(through(function(chunk, enc, cb) {
+ chunk = chunk.toString();
+ for(let i = 0; i < chunk.length; i++) {
+ this.push(chunk.charAt(i));
+ }
+ cb();
+ }))
+
+ // Business logic
+ .pipe(through(function(chunk, enc, cb) {
+ const c = chunk.toString();
+
+ // Track floor
+ switch(c) {
+ case '(':
+ floor++;
+ break;
+ case ')':
+ floor--;
+ break;
+ }
+
+ // Track position
+ ccount++;
+
+ // Check first basement entry
+ if (floor < 0 && !visitedBasement) {
+ visitedBasement = true;
+ console.log(`First entered the basement at instruction ${ccount}`);
+ }
+
+ cb();
+ }))
+
+ .on('finish', () => {
+ console.log(`Santa ends up on floor ${floor}`);
+ })
diff --git a/2015/package-lock.json b/2015/package-lock.json
@@ -9,20 +9,109 @@
"version": "1.0.0",
"license": "ISC",
"dependencies": {
- "upipe": "^0.1.3"
+ "through2": "^4.0.2"
}
},
- "node_modules/upipe": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/upipe/-/upipe-0.1.3.tgz",
- "integrity": "sha512-9lLwD8qIpKhXxbWv3TqTsHp0KkrentGyEEQdoOOdoPHlcTDWsXeZg0dG38E+oqQDyNLZFDQ41J+TyHmmEgqxjQ=="
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/through2": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
+ "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
+ "dependencies": {
+ "readable-stream": "3"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
}
},
"dependencies": {
- "upipe": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/upipe/-/upipe-0.1.3.tgz",
- "integrity": "sha512-9lLwD8qIpKhXxbWv3TqTsHp0KkrentGyEEQdoOOdoPHlcTDWsXeZg0dG38E+oqQDyNLZFDQ41J+TyHmmEgqxjQ=="
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "through2": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
+ "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
+ "requires": {
+ "readable-stream": "3"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
}
}
}
diff --git a/2015/package.json b/2015/package.json
@@ -9,6 +9,6 @@
"author": "",
"license": "ISC",
"dependencies": {
- "upipe": "^0.1.3"
+ "through2": "^4.0.2"
}
}