diff --git a/2022/d3/src/d3_deno.ts b/2022/d3/src/d3_deno.ts index 4855bb6..b8a70dc 100755 --- a/2022/d3/src/d3_deno.ts +++ b/2022/d3/src/d3_deno.ts @@ -4,3 +4,29 @@ if(Deno.args.length < 1) { const fileLoc = Deno.args[0]; const text = await Deno.readTextFile(fileLoc); +// Usable by Windows and UNIX +const LINE_SPLIT = (/\r?\n/); + +function priority(chr: string) { + if(chr.length != 1) { + throw Error("Expecting character"); + } + + const ord = (v: string) => v.charCodeAt(0); + return (ord('a') <= ord(chr) && ord(chr) <= ord('z'))? (ord(chr) - ord('a') + 1): + (ord(chr) - ord('A') + 1); +} + +const sumPrioOfShared = text.split(LINE_SPLIT) // split by each line, basically iterates through each rucksack + .map(s=>[...s].map(priority)) // translate each character into respective priority + .map((v)=> [v.slice(0, v.length/2), v.slice(v.length/2, v.length) ]) // splits by 2 compartments + .map(([left, right])=> { + // Finds the value on the right compartment that also exists in left compartment + const left_set = new Set(left); + // by the prompt, we're pretty guaranteed to have a solution + const shared = right.find(e => left_set.has(e))!; + console.log("shared:", shared); + return shared; + }).reduce((a,b)=>a+b); // find its sum + +console.log(sumPrioOfShared);