commit 799984e56e279d06e9d184b1c336c49ee8ee823a
parent 5f6a3409d8bb742b4a42f79f7ba1885372ddb96e
Author: finwo <finwo@pm.me>
Date: Mon, 26 Dec 2022 14:37:02 +0100
2022/25 solution
Diffstat:
2 files changed, 68 insertions(+), 0 deletions(-)
diff --git a/2022/day-25/example b/2022/day-25/example
@@ -0,0 +1,13 @@
+1=-0-2
+12111
+2=0=
+21
+2=01
+111
+20012
+112
+1=-1=
+1-12
+12
+1=
+122
diff --git a/2022/day-25/index.js b/2022/day-25/index.js
@@ -0,0 +1,55 @@
+const fs = require('fs');
+
+// const lines = fs.readFileSync('example', 'utf-8')
+const lines = fs.readFileSync('input', 'utf-8')
+ .split('\n')
+ .filter(l => l);
+
+function decode(snafu) {
+ let result = 0;
+ for(const c of snafu.split('')) {
+ result *= 5;
+ switch(c) {
+ case '2': result += 2; break;
+ case '1': result += 1; break;
+ case '0': result += 0; break;
+ case '-': result -= 1; break;
+ case '=': result -= 2; break;
+ }
+ }
+ return result;
+}
+
+function encode(num) {
+ let i=1, result = '0';
+ while(i<num) { i*=5; result += '0'; }
+
+ for(let i=0; i<result.length; i++) {
+ // Find character closest to target
+ let opts = [
+ { v: decode(result.substr(0,i) + '2' + result.substr(i+1)), c: '2' },
+ { v: decode(result.substr(0,i) + '1' + result.substr(i+1)), c: '1' },
+ { v: decode(result.substr(0,i) + '0' + result.substr(i+1)), c: '0' },
+ { v: decode(result.substr(0,i) + '-' + result.substr(i+1)), c: '-' },
+ { v: decode(result.substr(0,i) + '=' + result.substr(i+1)), c: '=' },
+ ];
+ let d = Infinity;
+ for(const opt of opts) {
+ const D = Math.abs(opt.v - num);
+ if (D >= d) continue;
+ d = D;
+ result = result.substr(0,i) + opt.c + result.substr(i+1);
+ }
+ }
+
+ return result.replace(/^0+/,'');
+ console.log({ result, i });
+}
+
+const numbers = lines.map(decode);
+
+const sum = numbers.reduce((r,a)=>r+a,0);
+const step1 = encode(sum);
+
+
+console.log({ lines, numbers, sum, step1 });