Last active
December 6, 2022 07:07
-
-
Save el-sime/f42fb4f4464fa7252bc830e275b2a6f5 to your computer and use it in GitHub Desktop.
Advent Of Code 2022 - Day 5.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>advent Of Code 2022 - Day 5</title> | |
</head> | |
<body> | |
<pre style="word-wrap: break-word; white-space: pre-wrap;"> | |
[G] [R] [P] | |
[H] [W] [T] [P] [H] | |
[F] [T] [P] [B] [D] [N] | |
[L] [T] [M] [Q] [L] [C] [Z] | |
[C] [C] [N] [V] [S] [H] [V] [G] | |
[G] [L] [F] [D] [M] [V] [T] [J] [H] | |
[M] [D] [J] [F] [F] [N] [C] [S] [F] | |
[Q] [R] [V] [J] [N] [R] [H] [G] [Z] | |
1 2 3 4 5 6 7 8 9 | |
move 5 from 8 to 2 | |
move 2 from 4 to 5 | |
move 3 from 3 to 9 | |
move 4 from 1 to 8 | |
move 5 from 9 to 1 | |
move 3 from 3 to 8 | |
move 2 from 4 to 7 | |
move 6 from 6 to 5 | |
move 5 from 2 to 4 | |
move 2 from 9 to 1 | |
move 1 from 7 to 1 | |
move 4 from 7 to 3 | |
move 5 from 1 to 5 | |
move 3 from 1 to 4 | |
move 8 from 5 to 3 | |
move 7 from 3 to 2 | |
move 10 from 4 to 7 | |
move 1 from 7 to 3 | |
move 1 from 6 to 2 | |
move 3 from 8 to 4 | |
move 4 from 3 to 2 | |
move 1 from 1 to 2 | |
move 4 from 3 to 1 | |
move 2 from 1 to 7 | |
move 3 from 5 to 1 | |
move 7 from 8 to 4 | |
move 9 from 5 to 1 | |
move 9 from 2 to 7 | |
move 6 from 4 to 9 | |
move 14 from 7 to 5 | |
move 2 from 1 to 4 | |
move 6 from 7 to 1 | |
move 4 from 4 to 9 | |
move 6 from 2 to 8 | |
move 2 from 4 to 9 | |
move 2 from 9 to 3 | |
move 3 from 8 to 3 | |
move 5 from 9 to 4 | |
move 1 from 2 to 9 | |
move 5 from 5 to 3 | |
move 3 from 2 to 7 | |
move 1 from 1 to 4 | |
move 3 from 7 to 5 | |
move 4 from 9 to 6 | |
move 2 from 9 to 3 | |
move 5 from 1 to 6 | |
move 7 from 6 to 5 | |
move 1 from 2 to 3 | |
move 10 from 1 to 5 | |
move 1 from 8 to 3 | |
move 14 from 3 to 7 | |
move 1 from 8 to 4 | |
move 2 from 6 to 1 | |
move 28 from 5 to 9 | |
move 1 from 2 to 1 | |
move 5 from 4 to 6 | |
move 2 from 4 to 3 | |
move 13 from 7 to 8 | |
move 1 from 3 to 5 | |
move 1 from 5 to 2 | |
move 1 from 3 to 6 | |
move 1 from 5 to 6 | |
move 22 from 9 to 1 | |
move 1 from 2 to 7 | |
move 3 from 9 to 5 | |
move 2 from 7 to 5 | |
move 18 from 1 to 4 | |
move 7 from 8 to 3 | |
move 4 from 6 to 8 | |
move 2 from 5 to 8 | |
move 5 from 3 to 9 | |
move 2 from 5 to 1 | |
move 3 from 6 to 8 | |
move 1 from 5 to 9 | |
move 2 from 3 to 6 | |
move 10 from 1 to 5 | |
move 15 from 8 to 6 | |
move 10 from 6 to 8 | |
move 1 from 9 to 4 | |
move 1 from 1 to 3 | |
move 4 from 4 to 3 | |
move 5 from 3 to 5 | |
move 9 from 5 to 6 | |
move 13 from 6 to 5 | |
move 8 from 5 to 7 | |
move 8 from 9 to 6 | |
move 2 from 6 to 4 | |
move 2 from 6 to 2 | |
move 3 from 7 to 4 | |
move 2 from 2 to 8 | |
move 1 from 5 to 4 | |
move 3 from 7 to 9 | |
move 1 from 5 to 9 | |
move 5 from 6 to 9 | |
move 10 from 8 to 3 | |
move 3 from 8 to 1 | |
move 5 from 9 to 2 | |
move 1 from 6 to 4 | |
move 4 from 5 to 6 | |
move 7 from 3 to 7 | |
move 5 from 6 to 5 | |
move 19 from 4 to 8 | |
move 15 from 8 to 3 | |
move 2 from 1 to 5 | |
move 7 from 5 to 9 | |
move 2 from 7 to 2 | |
move 3 from 3 to 8 | |
move 5 from 5 to 8 | |
move 10 from 9 to 3 | |
move 1 from 4 to 2 | |
move 10 from 8 to 3 | |
move 29 from 3 to 2 | |
move 2 from 3 to 4 | |
move 1 from 1 to 5 | |
move 2 from 8 to 4 | |
move 1 from 9 to 1 | |
move 1 from 3 to 9 | |
move 1 from 1 to 9 | |
move 2 from 3 to 4 | |
move 33 from 2 to 1 | |
move 2 from 2 to 4 | |
move 1 from 3 to 1 | |
move 22 from 1 to 2 | |
move 6 from 4 to 9 | |
move 4 from 7 to 1 | |
move 16 from 1 to 4 | |
move 3 from 7 to 6 | |
move 2 from 9 to 4 | |
move 1 from 5 to 2 | |
move 9 from 4 to 2 | |
move 1 from 6 to 5 | |
move 7 from 4 to 2 | |
move 6 from 9 to 8 | |
move 4 from 4 to 9 | |
move 4 from 8 to 3 | |
move 2 from 4 to 3 | |
move 2 from 2 to 5 | |
move 2 from 5 to 2 | |
move 1 from 5 to 6 | |
move 3 from 9 to 5 | |
move 1 from 6 to 8 | |
move 2 from 6 to 5 | |
move 1 from 3 to 2 | |
move 1 from 8 to 4 | |
move 2 from 8 to 2 | |
move 5 from 5 to 6 | |
move 44 from 2 to 8 | |
move 1 from 4 to 8 | |
move 3 from 6 to 8 | |
move 2 from 6 to 2 | |
move 37 from 8 to 3 | |
move 1 from 9 to 4 | |
move 1 from 2 to 5 | |
move 5 from 8 to 6 | |
move 1 from 4 to 6 | |
move 1 from 2 to 4 | |
move 16 from 3 to 2 | |
move 1 from 4 to 5 | |
move 1 from 8 to 3 | |
move 4 from 8 to 2 | |
move 1 from 8 to 7 | |
move 2 from 5 to 8 | |
move 15 from 2 to 4 | |
move 5 from 6 to 3 | |
move 1 from 7 to 4 | |
move 1 from 8 to 9 | |
move 1 from 6 to 7 | |
move 1 from 8 to 3 | |
move 2 from 2 to 8 | |
move 1 from 9 to 3 | |
move 2 from 8 to 4 | |
move 1 from 4 to 6 | |
move 33 from 3 to 7 | |
move 1 from 6 to 3 | |
move 1 from 4 to 8 | |
move 1 from 8 to 9 | |
move 4 from 4 to 3 | |
move 9 from 4 to 7 | |
move 3 from 4 to 8 | |
move 11 from 7 to 2 | |
move 14 from 7 to 6 | |
move 1 from 8 to 3 | |
move 1 from 9 to 5 | |
move 1 from 5 to 1 | |
move 8 from 2 to 9 | |
move 1 from 8 to 7 | |
move 6 from 3 to 6 | |
move 18 from 6 to 4 | |
move 1 from 2 to 7 | |
move 1 from 3 to 6 | |
move 14 from 4 to 2 | |
move 4 from 4 to 3 | |
move 3 from 6 to 3 | |
move 19 from 2 to 6 | |
move 16 from 6 to 8 | |
move 1 from 1 to 8 | |
move 16 from 8 to 7 | |
move 3 from 9 to 4 | |
move 3 from 6 to 2 | |
move 3 from 4 to 7 | |
move 4 from 3 to 2 | |
move 2 from 2 to 4 | |
move 4 from 9 to 8 | |
move 5 from 2 to 8 | |
move 29 from 7 to 5 | |
move 6 from 8 to 2 | |
move 2 from 3 to 4 | |
move 2 from 2 to 6 | |
move 1 from 3 to 5 | |
move 4 from 2 to 6 | |
move 8 from 7 to 5 | |
move 1 from 7 to 5 | |
move 2 from 8 to 6 | |
move 1 from 8 to 7 | |
move 6 from 6 to 1 | |
move 2 from 7 to 6 | |
move 1 from 9 to 7 | |
move 3 from 1 to 7 | |
move 3 from 6 to 1 | |
move 1 from 7 to 6 | |
move 3 from 1 to 6 | |
move 1 from 1 to 5 | |
move 4 from 6 to 3 | |
move 2 from 4 to 2 | |
move 38 from 5 to 6 | |
move 3 from 3 to 8 | |
move 4 from 8 to 6 | |
move 22 from 6 to 8 | |
move 1 from 7 to 8 | |
move 2 from 6 to 2 | |
move 2 from 5 to 2 | |
move 2 from 2 to 1 | |
move 2 from 4 to 6 | |
move 2 from 2 to 1 | |
move 1 from 1 to 9 | |
move 2 from 8 to 5 | |
move 2 from 2 to 8 | |
move 2 from 5 to 2 | |
move 2 from 7 to 2 | |
move 1 from 3 to 1 | |
move 4 from 1 to 8 | |
move 1 from 9 to 5 | |
move 1 from 1 to 7 | |
move 1 from 2 to 8 | |
move 29 from 8 to 3 | |
move 15 from 3 to 2 | |
move 12 from 2 to 5 | |
move 1 from 1 to 6 | |
move 3 from 2 to 1 | |
move 6 from 3 to 8 | |
move 2 from 3 to 9 | |
move 1 from 6 to 7 | |
move 12 from 5 to 8 | |
move 2 from 7 to 1 | |
move 2 from 1 to 4 | |
move 2 from 4 to 2 | |
move 1 from 5 to 8 | |
move 1 from 3 to 6 | |
move 2 from 3 to 4 | |
move 3 from 1 to 4 | |
move 5 from 8 to 9 | |
move 4 from 4 to 2 | |
move 5 from 9 to 6 | |
move 26 from 6 to 8 | |
move 7 from 2 to 8 | |
move 3 from 3 to 1 | |
move 1 from 6 to 4 | |
move 14 from 8 to 6 | |
move 2 from 1 to 2 | |
move 1 from 1 to 3 | |
move 18 from 8 to 5 | |
move 15 from 8 to 2 | |
move 5 from 6 to 8 | |
move 4 from 5 to 8 | |
move 7 from 2 to 5 | |
move 2 from 9 to 6 | |
move 1 from 2 to 1 | |
move 7 from 2 to 3 | |
move 7 from 8 to 1 | |
move 2 from 6 to 3 | |
move 1 from 4 to 6 | |
move 2 from 8 to 6 | |
move 10 from 3 to 9 | |
move 18 from 5 to 8 | |
move 1 from 4 to 6 | |
move 2 from 1 to 9 | |
move 12 from 6 to 9 | |
move 1 from 6 to 9 | |
move 9 from 8 to 4 | |
move 6 from 1 to 2 | |
move 3 from 8 to 9 | |
move 14 from 9 to 8 | |
move 5 from 4 to 9 | |
move 2 from 4 to 5 | |
move 16 from 8 to 5 | |
move 12 from 5 to 4 | |
move 7 from 5 to 1 | |
move 1 from 1 to 8 | |
move 1 from 5 to 8 | |
move 1 from 4 to 9 | |
move 8 from 2 to 7 | |
move 12 from 4 to 3 | |
move 2 from 2 to 5 | |
move 1 from 3 to 2 | |
move 3 from 5 to 4 | |
move 1 from 4 to 8 | |
move 3 from 4 to 9 | |
move 18 from 9 to 8 | |
move 8 from 3 to 1 | |
move 5 from 8 to 1 | |
move 1 from 2 to 5 | |
move 3 from 7 to 1 | |
move 3 from 7 to 5 | |
move 1 from 8 to 9 | |
move 5 from 9 to 7 | |
move 2 from 3 to 6 | |
move 16 from 1 to 4 | |
move 14 from 8 to 6 | |
move 2 from 5 to 6 | |
move 4 from 1 to 6 | |
move 3 from 4 to 9 | |
move 15 from 6 to 1 | |
move 5 from 4 to 3 | |
move 2 from 8 to 2 | |
move 6 from 4 to 3 | |
move 15 from 1 to 5 | |
move 14 from 5 to 3 | |
move 5 from 6 to 2 | |
move 2 from 4 to 7 | |
move 1 from 1 to 6 | |
move 2 from 3 to 4 | |
move 3 from 8 to 1 | |
move 1 from 5 to 1 | |
move 5 from 7 to 1 | |
move 7 from 1 to 3 | |
move 3 from 6 to 2 | |
move 4 from 9 to 5 | |
move 2 from 4 to 3 | |
move 4 from 7 to 9 | |
move 8 from 2 to 9 | |
move 1 from 9 to 1 | |
move 2 from 2 to 8 | |
move 11 from 9 to 1 | |
move 6 from 5 to 1 | |
move 21 from 3 to 2 | |
move 1 from 8 to 5 | |
move 5 from 1 to 7 | |
move 12 from 1 to 8 | |
move 1 from 5 to 2 | |
move 5 from 3 to 2 | |
move 4 from 7 to 2 | |
move 1 from 7 to 8 | |
move 13 from 2 to 5 | |
move 13 from 2 to 5 | |
move 2 from 2 to 1 | |
move 1 from 1 to 9 | |
move 26 from 5 to 4 | |
move 3 from 2 to 7 | |
move 2 from 3 to 9 | |
move 1 from 1 to 6 | |
move 5 from 3 to 2 | |
move 2 from 9 to 6 | |
move 1 from 1 to 8 | |
move 3 from 1 to 6 | |
move 24 from 4 to 9 | |
move 13 from 9 to 1 | |
move 2 from 6 to 2 | |
move 3 from 7 to 5 | |
move 2 from 9 to 7 | |
move 8 from 8 to 3 | |
move 4 from 8 to 5 | |
move 2 from 7 to 2 | |
move 8 from 9 to 4 | |
move 10 from 1 to 2 | |
move 1 from 9 to 1 | |
move 1 from 9 to 2 | |
move 4 from 3 to 2 | |
move 4 from 1 to 8 | |
move 3 from 4 to 8 | |
move 12 from 2 to 3 | |
move 3 from 4 to 6 | |
move 5 from 3 to 2 | |
move 9 from 3 to 9 | |
move 4 from 2 to 9 | |
move 1 from 3 to 7 | |
move 6 from 8 to 2 | |
move 4 from 6 to 8 | |
move 1 from 3 to 8 | |
move 6 from 9 to 1 | |
move 2 from 1 to 8 | |
move 5 from 5 to 8 | |
move 3 from 6 to 8 | |
move 1 from 5 to 1 | |
move 7 from 8 to 2 | |
move 1 from 1 to 4 | |
move 1 from 4 to 6 | |
move 1 from 9 to 4 | |
move 1 from 5 to 9 | |
move 1 from 4 to 7 | |
move 12 from 8 to 2 | |
move 4 from 4 to 3 | |
move 2 from 3 to 1 | |
move 1 from 7 to 2 | |
move 1 from 6 to 8 | |
move 1 from 8 to 6 | |
move 4 from 9 to 3 | |
move 1 from 9 to 3 | |
move 13 from 2 to 3 | |
move 3 from 1 to 7 | |
move 2 from 9 to 4 | |
move 2 from 1 to 9 | |
move 2 from 7 to 2 | |
move 1 from 4 to 1 | |
move 2 from 7 to 5 | |
move 14 from 3 to 8 | |
move 1 from 8 to 5 | |
move 2 from 1 to 4 | |
move 2 from 3 to 4 | |
move 2 from 3 to 4 | |
move 10 from 8 to 3 | |
move 2 from 4 to 8 | |
move 1 from 9 to 3 | |
move 3 from 2 to 3 | |
move 16 from 2 to 4 | |
move 1 from 8 to 5 | |
move 11 from 3 to 4 | |
move 2 from 3 to 7 | |
move 3 from 5 to 1 | |
move 1 from 1 to 2 | |
move 3 from 2 to 5 | |
move 1 from 1 to 9 | |
move 2 from 7 to 4 | |
move 8 from 4 to 3 | |
move 1 from 6 to 7 | |
move 1 from 8 to 6 | |
move 1 from 5 to 1 | |
move 6 from 3 to 5 | |
move 2 from 1 to 3 | |
move 5 from 5 to 7 | |
move 2 from 7 to 2 | |
move 2 from 3 to 4 | |
move 4 from 7 to 1 | |
move 1 from 6 to 8 | |
move 1 from 2 to 1 | |
move 3 from 1 to 6 | |
move 2 from 9 to 6 | |
move 8 from 2 to 1 | |
move 2 from 6 to 2 | |
move 2 from 6 to 3 | |
move 6 from 3 to 5 | |
move 2 from 4 to 6 | |
move 2 from 2 to 9 | |
move 1 from 8 to 6 | |
move 2 from 6 to 5 | |
move 1 from 9 to 1 | |
move 11 from 5 to 8 | |
move 7 from 8 to 6 | |
move 23 from 4 to 1 | |
move 1 from 5 to 9 | |
move 1 from 4 to 6 | |
move 2 from 4 to 8 | |
move 1 from 3 to 1 | |
move 6 from 8 to 3 | |
move 2 from 9 to 6 | |
move 3 from 6 to 1 | |
move 3 from 8 to 7 | |
move 1 from 3 to 6 | |
move 18 from 1 to 2 | |
move 5 from 3 to 8 | |
move 13 from 2 to 9 | |
move 5 from 9 to 7 | |
move 1 from 8 to 6 | |
move 5 from 2 to 6 | |
move 2 from 1 to 7 | |
move 9 from 7 to 8 | |
move 11 from 8 to 6 | |
move 2 from 9 to 4 | |
move 16 from 6 to 1 | |
move 2 from 4 to 6 | |
move 1 from 8 to 9 | |
move 1 from 7 to 6 | |
move 8 from 1 to 5 | |
move 3 from 6 to 5 | |
move 8 from 6 to 4 | |
move 7 from 9 to 5 | |
move 1 from 8 to 1 | |
move 6 from 5 to 1 | |
move 9 from 5 to 7 | |
move 4 from 7 to 9 | |
move 1 from 4 to 8 | |
move 1 from 8 to 3 | |
move 1 from 1 to 8 | |
move 1 from 8 to 7 | |
move 22 from 1 to 3 | |
move 1 from 6 to 7 | |
move 2 from 9 to 4 | |
move 1 from 9 to 6 | |
move 1 from 9 to 4 | |
move 10 from 4 to 3 | |
move 1 from 1 to 2 | |
move 2 from 5 to 4 | |
move 27 from 3 to 8 | |
move 5 from 3 to 9 | |
</pre> | |
<script> | |
/** | |
* TODO: parse the final stacks to return the slution string | |
* I tried to "think like a crane" processing one crate at the time, so the CrateMover9001 first moves the crates to a new stack, then move them to the appropriate stack one at a time | |
**/ | |
const input = document.querySelector("pre").innerText; | |
const stacks = input.slice(0, input.lastIndexOf("]") + 2).split("\n").map((row) => { | |
const columns = []; | |
[...row.matchAll(/(\[[A-Z]\]|\s{3,3})\s{0,1}/g)].forEach((matches, col) => { | |
columns.push(matches[1]); | |
}); | |
return columns ; | |
}); | |
function CrateMover9000(qty, from, to) { | |
for (let mv=0, tot=qty; mv<tot; mv++) | |
{ | |
let moving = stacks[mv][from-1]; | |
if(moving === " ") { | |
tot++; | |
} else { | |
let target = 0; | |
while(stacks[target][to-1] === " ") { | |
target++; | |
} | |
target--; | |
if(target >= 0){ | |
stacks[target][to-1] = stacks[mv][from-1]; | |
}else{ | |
//generate a new row | |
let row = Array(stacks[0].length).fill(" "); | |
stacks.unshift(row); | |
mv++; | |
tot++; | |
stacks[0][to-1] = stacks[mv][from-1]; | |
} | |
stacks[mv][from-1] = " "; | |
if(stacks[0].join('').indexOf('[')===-1) {//there's an empty first row, we can clean it up | |
stacks.shift(); | |
mv--; | |
tot--; | |
} | |
} | |
} | |
} | |
function CrateMover9001(qty, from, to) { | |
const stackBuffer = Array(qty).fill(''); | |
let bufferPos = qty - 1; | |
for (let mv=0, tot=parseInt(qty); mv<tot; mv++) | |
{ | |
if(typeof stacks[mv] === "undefined") return; | |
let moving = stacks[mv][from-1]; | |
if(moving === " ") { | |
tot++; | |
} else { | |
stackBuffer[bufferPos] = moving; | |
stacks[mv][from-1] = " "; | |
bufferPos--; | |
} | |
} | |
stackBuffer.forEach((crate) => { | |
let target = 0; | |
while(stacks[target][to-1] === " ") { | |
target++; | |
} | |
target--; | |
if(target >= 0){ | |
stacks[target][to-1] = crate; | |
}else{ | |
//generate a new row | |
let row = Array(stacks[0].length).fill(" "); | |
stacks.unshift(row); | |
stacks[0][to-1] = crate; | |
} | |
}); | |
// clean up the empty stacks | |
while(stacks[0].join('').indexOf('[')===-1) {//there's an empty first row, we can clean it up | |
stacks.shift(); | |
} | |
} | |
[...document.querySelector("pre").innerText.matchAll(/^move\s(\d+)\sfrom\s(\d+)\sto\s(\d+)$/gm)].map((matches) => [matches[1],matches[2],matches[3]]).forEach(([qty,from, to]) => {CrateMover9001(qty,from,to)}); | |
console.log({stacks}); | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment