2021-12-10 17:39:02 +00:00
|
|
|
import fs from "fs-extra";
|
|
|
|
import fp from "lodash/fp.js";
|
|
|
|
import _ from "lodash";
|
|
|
|
|
|
|
|
import * as p1 from './part1.mjs';
|
|
|
|
|
2021-12-10 18:35:49 +00:00
|
|
|
function completionString(line) {
|
|
|
|
const stack = [];
|
|
|
|
|
|
|
|
for ( const c of line ) {
|
|
|
|
if( p1.closing[c] ) {
|
|
|
|
stack.unshift(p1.closing[c]);
|
|
|
|
} else {
|
|
|
|
if(c !== stack.shift()) return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return stack;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
export function linesScore(lines) {
|
|
|
|
lines = lines.map( completionString ).filter(x=>x);
|
|
|
|
|
|
|
|
const points = {
|
|
|
|
')': 1,
|
|
|
|
']': 2,
|
|
|
|
'}': 3,
|
|
|
|
'>': 4,
|
|
|
|
}
|
|
|
|
|
|
|
|
const lineScore = line => line.reduce( (a,b) => 5*a + points[b], 0 );
|
|
|
|
|
|
|
|
return lines.map(lineScore);
|
|
|
|
}
|
|
|
|
|
|
|
|
export function solution(lines) {
|
|
|
|
|
|
|
|
const scores =linesScore(lines);
|
|
|
|
|
|
|
|
scores.sort( (a,b) => a<b?-1:1 );
|
|
|
|
|
|
|
|
return scores[ (scores.length-1) / 2 ];
|
2021-12-10 17:39:02 +00:00
|
|
|
}
|