Compare commits

...

2 Commits

Author SHA1 Message Date
6fc4c2136a day 24: initial read. (pre-part 1) 2024-12-27 17:30:15 +01:00
312882371e day09 remove class crap 2024-12-22 22:20:06 +01:00
4 changed files with 119 additions and 15 deletions

View File

@ -1,20 +1,5 @@
import fs from 'node:fs'
class Block {
constructor() {
this.Id = BigInt
this.Size = BigInt
}
}
class Disk {
constructor() {
this.Map = [{}]
}
}
function init(filename) {
const data = fs.readFileSync(filename, { encoding: 'utf-8' }, data => data)
const diskmap = [...data.split('')].map((sector, index) => index % 2 === 0 ? ''.padStart(sector, index / 2) : ''.padStart(sector, '.')).join("")

47
2024/24/example.txt Normal file
View File

@ -0,0 +1,47 @@
x00: 1
x01: 0
x02: 1
x03: 1
x04: 0
y00: 1
y01: 1
y02: 1
y03: 1
y04: 1
ntg XOR fgs -> mjb
y02 OR x01 -> tnw
kwq OR kpj -> z05
x00 OR x03 -> fst
tgd XOR rvg -> z01
vdt OR tnw -> bfw
bfw AND frj -> z10
ffh OR nrd -> bqk
y00 AND y03 -> djm
y03 OR y00 -> psh
bqk OR frj -> z08
tnw OR fst -> frj
gnj AND tgd -> z11
bfw XOR mjb -> z00
x03 OR x00 -> vdt
gnj AND wpb -> z02
x04 AND y00 -> kjc
djm OR pbm -> qhw
nrd AND vdt -> hwm
kjc AND fst -> rvg
y04 OR y02 -> fgs
y01 AND x02 -> pbm
ntg OR kjc -> kwq
psh XOR fgs -> tgd
qhw XOR tgd -> z09
pbm OR djm -> kpj
x03 XOR y03 -> ffh
x00 XOR y04 -> ntg
bfw OR bqk -> z06
nrd XOR fgs -> wpb
frj XOR qhw -> z04
bqk OR frj -> z07
y03 OR x01 -> nrd
hwm AND bqk -> z03
tgd XOR rvg -> z12
tnw OR pbm -> gnj

72
2024/24/index.js Normal file
View File

@ -0,0 +1,72 @@
import fs from 'node:fs'
function init(filename) {
const data = fs.readFileSync(filename, { encoding: 'utf-8' }, data => data)
const device = new Device()
const Wires = data.split('\n\n')[0].split('\n')
const Gates = data.split('\n\n')[1].split('\n')
Wires.forEach((wire, index) => {
let [name, value] = wire.split(':')
device.Wires.push({
name: name,
value: parseInt(value.trim())
})
})
Gates.forEach((gate, index) => {
let [w1, operator, w2, _null, output] = gate.split(' ')
device.Gates.push({
wire1: w1,
operator: operator,
wire2: w2,
output: output
})
})
device.part1()
}
class Device {
constructor() {
this.Wires = []
this.Gates = []
this.Outputs = []
}
getWire(wire) {
return this.Wires.find(Wire => wire === Wire.name).value
}
generateOutput(w1, w2, operator) {
let result = 0
switch (operator) {
case 'AND':
result = this.getWire(w1) && this.getWire(w2)
break;
case 'OR':
result = this.getWire(w1) || this.getWire(w2)
break;
case 'XOR':
result = this.getWire(w1) ^ this.getWire(w2)
break;
default: break
}
return result
}
part1() {
this.Gates.forEach(gate => {
let result = this.generateOutput(gate.wire1, gate.wire2, gate.operator)
this.Outputs.push({ name: gate.output, value: result })
})
let result = 0
this.Outputs.sort((a, b) => a.name - b.name).forEach((output, index) => {
result += output.value * (index ** 2)
})
console.log(this.Outputs)
console.log(result)
}
}
init('example.txt')

0
2024/24/input.txt Normal file
View File