Solutions for day three
This commit is contained in:
parent
71f2b7059c
commit
35c4f811dc
77
03/code.js
Normal file
77
03/code.js
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
const fs = require('fs');
|
||||||
|
const inputArray = fs.readFileSync('input.txt').toString().split("\n");
|
||||||
|
|
||||||
|
// Part One
|
||||||
|
|
||||||
|
const lines = inputArray.length;
|
||||||
|
const oneCount = [];
|
||||||
|
for (i in inputArray[0]) {
|
||||||
|
oneCount[i] = 0;
|
||||||
|
}
|
||||||
|
const gammaArray = Object.assign([], oneCount);
|
||||||
|
const epsilonArray = Object.assign([], oneCount);
|
||||||
|
|
||||||
|
|
||||||
|
for(i in inputArray) {
|
||||||
|
const line = inputArray[i];
|
||||||
|
for (x in line) {
|
||||||
|
if (line[x] === "1") {
|
||||||
|
oneCount[x]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i in oneCount) {
|
||||||
|
if (oneCount[i] > (lines / 2)) {
|
||||||
|
gammaArray[i] = 1;
|
||||||
|
} else {
|
||||||
|
epsilonArray[i] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const gamma = parseInt(gammaArray.join(""), 2);
|
||||||
|
const epsilon = parseInt(epsilonArray.join(""), 2);
|
||||||
|
|
||||||
|
console.log(`${gamma} * ${epsilon} = ${gamma * epsilon}`);
|
||||||
|
|
||||||
|
// Part Two
|
||||||
|
|
||||||
|
function arrayFilter(unfilteredArray, testChar, rating) {
|
||||||
|
|
||||||
|
if (unfilteredArray.length === 1) {
|
||||||
|
return unfilteredArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
let count = 0;
|
||||||
|
let greatest = "0";
|
||||||
|
const lines = unfilteredArray.length;
|
||||||
|
for(i in unfilteredArray) {
|
||||||
|
count = count + parseInt(unfilteredArray[i][testChar]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count >= (lines / 2)) {
|
||||||
|
greatest = "1";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rating === "oxygen") {
|
||||||
|
filteredArray = unfilteredArray.filter(line => line[testChar] === greatest)
|
||||||
|
} else {
|
||||||
|
filteredArray = unfilteredArray.filter(line => line[testChar] !== greatest)
|
||||||
|
}
|
||||||
|
|
||||||
|
return filteredArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
let oxygenRatingArray = Object.assign([], inputArray);
|
||||||
|
let co2RatingArray = Object.assign([], inputArray);
|
||||||
|
|
||||||
|
for (x in oxygenRatingArray[0]) {
|
||||||
|
oxygenRatingArray = arrayFilter(oxygenRatingArray, x, "oxygen")
|
||||||
|
}
|
||||||
|
|
||||||
|
for (x in co2RatingArray[0]) {
|
||||||
|
co2RatingArray = arrayFilter(co2RatingArray, x, "co2")
|
||||||
|
}
|
||||||
|
|
||||||
|
const oxygen = parseInt(oxygenRatingArray.join(""), 2);
|
||||||
|
const co2 = parseInt(co2RatingArray.join(""), 2);
|
||||||
|
console.log(`${oxygen} * ${co2} = ${oxygen * co2}`);
|
1000
03/input.txt
Normal file
1000
03/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user