add Day3
This commit is contained in:
parent
0a4e8cde6e
commit
235cdd5526
96
Day3/Diagnostics.ts
Normal file
96
Day3/Diagnostics.ts
Normal file
@ -0,0 +1,96 @@
|
||||
import { readLines } from "https://deno.land/std@0.177.1/io/read_lines.ts";
|
||||
|
||||
async function Part1() {
|
||||
const file = await Deno.open("./Day3/input.txt");
|
||||
const lines = readLines(file);
|
||||
|
||||
let line = (await lines.next()).value as string;
|
||||
const bits: number[] = new Array(line.length).fill(0);
|
||||
let NrOfLines = 1;
|
||||
|
||||
for (let i = 0; i < line.length; i++) {
|
||||
if (line[i] == '1') {
|
||||
bits[i]++;
|
||||
}
|
||||
}
|
||||
|
||||
for await (line of lines) {
|
||||
NrOfLines++;
|
||||
for (let i = 0; i < line.length; i++) {
|
||||
if (line[i] == '1') {
|
||||
bits[i]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let gamma = 0;
|
||||
let epsilon = 0;
|
||||
|
||||
for (let i = bits.length - 1; i >= 0; i--) {
|
||||
if (bits[i] > NrOfLines/2) {
|
||||
gamma += 2**((bits.length - 1) - i);
|
||||
} else {
|
||||
epsilon += 2**((bits.length - 1) - i);
|
||||
}
|
||||
}
|
||||
|
||||
return gamma * epsilon;
|
||||
}
|
||||
|
||||
async function Part2() {
|
||||
const file = await Deno.open("./Day3/input.txt");
|
||||
const lines = readLines(file);
|
||||
|
||||
let OxygenLines: string[] = [];
|
||||
let CO2Lines: string[] = [];
|
||||
|
||||
for await (const line of lines) {
|
||||
OxygenLines.push(line);
|
||||
CO2Lines.push(line);
|
||||
}
|
||||
|
||||
const ReadingLength = OxygenLines[0].length;
|
||||
|
||||
for (let i = 0; i < ReadingLength; i++) {
|
||||
|
||||
if (OxygenLines.length > 1) {
|
||||
const OxyBit = mostCommonBit(OxygenLines,i);
|
||||
OxygenLines = OxygenLines.filter(reading => +reading[i] == OxyBit);
|
||||
}
|
||||
|
||||
if (CO2Lines.length > 1) {
|
||||
const CO2Bit = mostCommonBit(CO2Lines,i);
|
||||
CO2Lines = CO2Lines.filter(reading => +reading[i] != CO2Bit);
|
||||
}
|
||||
}
|
||||
|
||||
const OxygenReading = OxygenLines[0];
|
||||
const CO2Reading = CO2Lines[0];
|
||||
|
||||
let OxygenLevel = 0;
|
||||
let CO2Level = 0;
|
||||
|
||||
for (let i = ReadingLength - 1; i >= 0; i--) {
|
||||
OxygenLevel += +OxygenReading[i] * 2**(ReadingLength - 1 - i);
|
||||
CO2Level += +CO2Reading[i] * 2**(ReadingLength - 1 - i);
|
||||
}
|
||||
|
||||
return OxygenLevel * CO2Level;
|
||||
}
|
||||
|
||||
function mostCommonBit(arr: string[], index: number): 0 | 1 {
|
||||
let count = 0;
|
||||
for (const line of arr) {
|
||||
if (line[index] == '1') {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
if (count >= arr.length/2) {
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
console.log("Part1: " + await Part1());
|
||||
|
||||
console.log("Part2: " + await Part2());
|
||||
1000
Day3/input.txt
Normal file
1000
Day3/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user