day 19 incomplete

This commit is contained in:
Joshua Seigler 2021-12-22 18:47:49 -05:00
parent 11dfb6e947
commit c9d3680a69
2 changed files with 254 additions and 0 deletions

9
src/day19/README.md Normal file
View file

@ -0,0 +1,9 @@
# 🎄 Advent of Code 2021 - day 19 🎄
## Info
Task description: [link](https://adventofcode.com/2021/day/19)
## Notes
...

245
src/day19/index.js Normal file
View file

@ -0,0 +1,245 @@
import run from "aocrunner"
const parseInput = (rawInput) =>
rawInput.split`\n\n`.map((s) =>
s.split`\n`.slice(1).map((p) => {
const [x, y, z] = p.split`,`.map((x) => +x)
return { x, y, z }
}),
)
function fingerprint(p1, p2) {
const dx = p2.x - p1.x,
dy = p2.y - p1.y,
dz = p2.z - p1.z
return `${dx * dx + dy * dy + dz * dz}/${Math.abs(dx * dy * dz)}`
}
const rotations = [
({ x, y, z }) => ({ x: x, y: y, z: z }),
({ x, y, z }) => ({ x: y, y: z, z: x }),
({ x, y, z }) => ({ x: z, y: x, z: y }),
({ x, y, z }) => ({ x: -x, y: z, z: y }),
({ x, y, z }) => ({ x: z, y: y, z: -x }),
({ x, y, z }) => ({ x: y, y: -x, z: z }),
({ x, y, z }) => ({ x: x, y: z, z: -y }),
({ x, y, z }) => ({ x: z, y: -y, z: x }),
({ x, y, z }) => ({ x: -y, y: x, z: z }),
({ x, y, z }) => ({ x: x, y: -z, z: y }),
({ x, y, z }) => ({ x: -z, y: y, z: x }),
({ x, y, z }) => ({ x: y, y: x, z: -z }),
({ x, y, z }) => ({ x: -x, y: -y, z: z }),
({ x, y, z }) => ({ x: -y, y: z, z: -x }),
({ x, y, z }) => ({ x: z, y: -x, z: -y }),
({ x, y, z }) => ({ x: -x, y: y, z: -z }),
({ x, y, z }) => ({ x: y, y: -z, z: -x }),
({ x, y, z }) => ({ x: -z, y: -x, z: y }),
({ x, y, z }) => ({ x: x, y: -y, z: -z }),
({ x, y, z }) => ({ x: -y, y: -z, z: x }),
({ x, y, z }) => ({ x: -z, y: x, z: -y }),
({ x, y, z }) => ({ x: -x, y: -z, z: -y }),
({ x, y, z }) => ({ x: -z, y: -y, z: -x }),
({ x, y, z }) => ({ x: -y, y: -x, z: -z }),
]
const part1 = (rawInput) => {
const scanners = parseInput(rawInput)
scanners.forEach((scanner) => {
scanner.fingerprints = new Map()
for (let i = 0; i < scanner.length; i++)
for (let j = i; j < scanner.length; j++) {
scanner.fingerprints.set(fingerprint(scanner[i], scanner[j]), [
scanner[i],
scanner[j],
])
}
})
while (scanners.length > 1) {
const reference = scanners.shift()
let newbie
for (let i = 0; i < scanners.length; i++) {
let sharedFingerprints = commonElements(
reference.fingerprints,
scanners[i].fingerprints,
)
if (sharedFingerprints.length >= (12 * 11) / 2) {
;[newbie] = scanners.splice(i, 1)
for (const rotate of rotations) {
}
}
}
}
return
}
const part2 = (rawInput) => {
const input = parseInput(rawInput)
return
}
run({
part1: {
tests: [
{
input: `--- scanner 0 ---
404,-588,-901
528,-643,409
-838,591,734
390,-675,-793
-537,-823,-458
-485,-357,347
-345,-311,381
-661,-816,-575
-876,649,763
-618,-824,-621
553,345,-567
474,580,667
-447,-329,318
-584,868,-557
544,-627,-890
564,392,-477
455,729,728
-892,524,684
-689,845,-530
423,-701,434
7,-33,-71
630,319,-379
443,580,662
-789,900,-551
459,-707,401
--- scanner 1 ---
686,422,578
605,423,415
515,917,-361
-336,658,858
95,138,22
-476,619,847
-340,-569,-846
567,-361,727
-460,603,-452
669,-402,600
729,430,532
-500,-761,534
-322,571,750
-466,-666,-811
-429,-592,574
-355,545,-477
703,-491,-529
-328,-685,520
413,935,-424
-391,539,-444
586,-435,557
-364,-763,-893
807,-499,-711
755,-354,-619
553,889,-390
--- scanner 2 ---
649,640,665
682,-795,504
-784,533,-524
-644,584,-595
-588,-843,648
-30,6,44
-674,560,763
500,723,-460
609,671,-379
-555,-800,653
-675,-892,-343
697,-426,-610
578,704,681
493,664,-388
-671,-858,530
-667,343,800
571,-461,-707
-138,-166,112
-889,563,-600
646,-828,498
640,759,510
-630,509,768
-681,-892,-333
673,-379,-804
-742,-814,-386
577,-820,562
--- scanner 3 ---
-589,542,597
605,-692,669
-500,565,-823
-660,373,557
-458,-679,-417
-488,449,543
-626,468,-788
338,-750,-386
528,-832,-391
562,-778,733
-938,-730,414
543,643,-506
-524,371,-870
407,773,750
-104,29,83
378,-903,-323
-778,-728,485
426,699,580
-438,-605,-362
-469,-447,-387
509,732,623
647,635,-688
-868,-804,481
614,-800,639
595,780,-596
--- scanner 4 ---
727,592,562
-293,-554,779
441,611,-461
-714,465,-776
-743,427,-804
-660,-479,-426
832,-632,460
927,-485,-438
408,393,-506
466,436,-512
110,16,151
-258,-428,682
-393,719,612
-211,-452,876
808,-476,-593
-575,615,604
-485,667,467
-680,325,-822
-627,-443,-432
872,-547,-609
833,512,582
807,604,487
839,-516,451
891,-625,532
-652,-548,-490
30,-46,-14`,
expected: 79,
},
],
solution: part1,
},
part2: {
tests: [
// { input: ``, expected: "" },
],
solution: part2,
},
trimTestInputs: true,
})
function commonElements(...arr) {
// https://stackoverflow.com/a/62548484
const lookup = arr.reduce((map, a) => {
const unique = [...new Set(a)]
unique.forEach((v) => {
map.set(v, (map.get(v) || 0) + 1)
})
return map
}, new Map())
return [...lookup.keys()].filter((k) => lookup.get(k) === arr.length)
}