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