advent-of-code

Entries to advent of code, multiple years
git clone git://git.finwo.net/misc/advent-of-code
Log | Files | Refs

commit 3cab6425a0cbaf1b422e87a030660f94d27440ec
parent 8e9a847d8011e9e88ddf339fb35968a699bf4e78
Author: finwo <finwo@pm.me>
Date:   Tue, 15 Nov 2022 15:22:22 +0100

Replaced upipe by through2

Diffstat:
M2015/day-01/index.js | 74+++++++++++++++++++++++++++++++++++++++++---------------------------------
M2015/package-lock.json | 107++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------
M2015/package.json | 2+-
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" } }