Fork me on GitHub
#adventofcode
<
2023-12-18
>
alekszelark09:12:33

Day 18 — Solutions

alekszelark09:12:53

The first part was solved with BFS, but as soon as I saw the second part it got pretty obvious — BFS wouldn’t help. Also I got surprised to be first in the thread https://github.com/zelark/AoC/blob/master/src/zelark/aoc_2023/day_18.clj

rjray17:12:48

https://github.com/rjray/advent-2023-clojure/blob/master/src/advent_of_code/day18.clj All the cool kids were using Shoelace Formula and Pick's Theorem. So I did, too. I had started out part 1 with drawing the trench and using even/odd to fill it in. Got the example right, but the actual puzzle wrong. That's when I learned about Shoelace/Pick's.

borkdude17:12:48

hurray! @UEF091BP0’s solution worked almost instantly in squint! https://squint-cljs.github.io/squint/?boilerplate=https%3A%2F%2Fgist.githubusercontent.com%2Fborkdude%2Fcf94b492d948f7f418aa81ba54f428ff%2Fraw%2Fa6e9992b079e20e21d753e8c75a7353c5908b225%2Faoc_ui.cljs&amp;repl=true&amp;src=OzsgSGVscGVyIGZ1bmN0aW9uczoKOzsgKGZldGNoLWlucHV0IHllYXIgZGF5KSAtIGdldCBBT0MgaW5wdXQKOzsgKGFwcGVuZCBzdHIpIC0gYXBwZW5kIHN0ciB0byBET00KOzsgKHNweSB4KSAtIGxvZyB4IHRvIGNvbnNvbGUgYW5kIHJldHVybiB4Cgo7OyBvcmlnaW5hbCBzb2x1dGlvbjoKOzsgaHR0cHM6Ly9naXRodWIuY29tL3JqcmF5L2FkdmVudC0yMDIzLWNsb2p1cmUvYmxvYi9tYXN0ZXIvc3JjL2FkdmVudF9vZl9jb2RlL2RheTE4LmNsagoKOzsgUmVtZW1iZXIgdG8gdXBkYXRlIHRoZSB5ZWFyIGFuZCBkYXkgaW4gdGhlIGZldGNoLWlucHV0IGNhbGwuCihkZWYgaW5wdXQgKGpzLWF3YWl0IChmZXRjaC1pbnB1dCAyMDIzIDE4KSkpCgooZGVmIGRlbHRhIHs6VSBbLTEgMF0gOlIgWzAgMV0gOkQgWzEgMF0gOkwgWzAgLTFdfSkKCjs7IFBhcnNlIGFuIGluc3RydWN0aW9uIGxpbmUgaW50byBhIHR1cGxlIG9mIChkaXJlY3Rpb24sIHN0ZXBzLCBjb2xvcikuCihkZWZuLSBwYXJzZS1pbnN0IFtsaW5lXQogIChsZXQgW1tfIGRpciBsZW4gY29sb3JdIChyZS1tYXRjaGVzICMiXihbVVJETF0pIChcZCspIFwoIyhbMC05YS1mXXs2fSlcKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUpXQogICAgKGxpc3QgZGlyIChwYXJzZS1sb25nIGxlbikgY29sb3IpKSkKCjs7IERvIHRoZSAic2hvZWxhY2UiIGNhbGN1bGF0aW9uLgooZGVmbi0gc2hvZWxhY2UgW1tbeTEgeDFdIFt5MiB4Ml1dXQogICgtICgqIHgxIHkyKSAoKiB5MSB4MikpKQoKOzsgRG8gdGhlIGZ1bGwgY2FsY3VsYXRpb24uIFVzZSBvdmVybGFwcGluZyBwYXJ0aXRpb25pbmcgdG8gaXRlcmF0ZSBjYWxscyB0bwo7OyBgc2hvZWxhY2VgIG92ZXIgYWRqYWNlbnQgcGFpcnMuIFRoZW4gYWRkIGluIGEgY2FsbCBiZXR3ZWVuIHRoZSBsYXN0IGFuZCBmaXJzdAo7OyBwb2ludHMuCihkZWZuLSBjYWxjdWxhdGUgW3BvaW50c10KICAoKyAoc2hvZWxhY2UgKGxpc3QgKGxhc3QgcG9pbnRzKSAoZmlyc3QgcG9pbnRzKSkpCiAgICAocmVkdWNlICsgKG1hcCBzaG9lbGFjZSAocGFydGl0aW9uIDIgMSBwb2ludHMpKSkpKQoKOzsgRmluZCB0aGUgcG9pbnRzIHRoYXQgZGVzY3JpYmUgdGhlIHBvbHlnb25zLCBiYXNlZCBvbiB0aGUgbGlzdCBvZiBpbnN0cnVjdGlvbnMKOzsgZ2l2ZW4uIE9uY2UgYWxsIGFyZSBmb3VuZCwgY2FsbCBgY2FsY3VsYXRlYCBhbmQgYXBwbHkgdGhlIGxhc3QgYml0IG9mIG1hdGgKOzsgdG8gZ2V0IHRoZSBhbnN3ZXIuCihkZWZuLSBzb2x2ZSBbaW5zdHNdCiAgKGxvb3AgW1tpbnN0ICYgaW5zdHNdIGluc3RzLHBvbHkgKGxpc3QgWzAgMF0pLHBfY250IDBdCiAgICAoaWYgKG5pbD8gaW5zdCkKICAgICAgKGluYyAocXVvdCAoKyAoY2FsY3VsYXRlIChyZXZlcnNlIHBvbHkpKSBwX2NudCkgMikpCiAgICAgIChsZXQgW1tkaXIgbGVuXSBpbnN0CiAgICAgICAgICAgIGxwIChmaXJzdCBwb2x5KQogICAgICAgICAgICBuZXdwb3MgKG1hcHYgKyBscCAobWFwdiAqIFtsZW4gbGVuXSAoZ2V0IGRlbHRhIGRpcikpKV0KICAgICAgICAocmVjdXIgaW5zdHMgKGNvbnMgbmV3cG9zIHBvbHkpICgrIHBfY250IGxlbikpKSkpKQoKKGRlZm4gcGFydC0xCiAgIkRheSAxOCBQYXJ0IDEiIAogIFtpbnB1dF0KICAoLT4%2BIGlucHV0CiAgICBzdHIvc3BsaXQtbGluZXMKICAgIChtYXB2IHBhcnNlLWluc3QpCiAgICBzb2x2ZSkpCgooY29tbWVudAogIChwYXJ0LTEgaW5wdXQpCiAgKQoKOzsgRm9yIHBhcnQgMiwgd2UgZ2V0IGRpcmVjdGlvbiBmcm9tIHRoZSBsYXN0IGRpZ2l0IG9mIHRoZSAiY29sb3IiIHZhbHVlLiBUaGlzCjs7IHdpbGwgY29tZSBhcyBhIHN0cmluZywgc28gbWFwIHRoZXNlIHRvIHRoZSBkaXJlY3Rpb24ga2V5d29yZHMuCihkZWYgZ2V0LWRpciB7IjAiIDpSLCIxIiA6RCwiMiIgOkwsIjMiIDpVfSkKCjs7ICJGaXgiIGFuIGluc3RydWN0aW9uIGJ5IHJlcGxhY2luZyBpdCB3aXRoIGRpcmVjdGlvbiBhbmQgc3RlcC12YWx1ZSBhcyBwdWxsZWQKOzsgZnJvbSB0aGUgaGV4YWRlY2ltYWwgImNvbG9yIiB2YWx1ZS4KKGRlZm4tIGZpeC1pbnN0IFtbXyBfIGNvbG9yXV0KICAobGV0IFtbXyB2YWwgZGlyXSAocmUtbWF0Y2hlcyAjIihbMC05YS1mXXs1fSkoWzAtM10pIiBjb2xvcildCiAgICAobGlzdCAoZ2V0IGdldC1kaXIgZGlyKSAoanMvcGFyc2VJbnQgdmFsIDE2KSkpKQoKKGRlZm4gcGFydC0yCiAgIkRheSAxOCBQYXJ0IDIiIAogIFtpbnB1dF0KICAoLT4%2BIGlucHV0CiAgICBzdHIvc3BsaXQtbGluZXMKICAgIChtYXB2IHBhcnNlLWluc3QpCiAgICAobWFwdiBmaXgtaW5zdCkKICAgIHNvbHZlKSk%3D

erdos17:12:47

I was not familiar to shoelaces so I just went with adding-subtracting overlapping rectangles until I got the correct total area. https://github.com/erdos/advent-of-code/blob/master/2023/day18.clj

🔥 2
borkdude17:12:09

cool, here is @U2E1D7WUB’s solution https://squint-cljs.github.io/squint/?boilerplate=https%3A%2F%2Fgist.githubusercontent.com%2Fborkdude%2Fcf94b492d948f7f418aa81ba54f428ff%2Fraw%2Fa6e9992b079e20e21d753e8c75a7353c5908b225%2Faoc_ui.cljs&amp;repl=true&amp;src=OzsgSGVscGVyIGZ1bmN0aW9uczoKOzsgKGZldGNoLWlucHV0IHllYXIgZGF5KSAtIGdldCBBT0MgaW5wdXQKOzsgKGFwcGVuZCBzdHIpIC0gYXBwZW5kIHN0ciB0byBET00KOzsgKHNweSB4KSAtIGxvZyB4IHRvIGNvbnNvbGUgYW5kIHJldHVybiB4Cgo7OyBvcmlnaW5hbCBzb2x1dGlvbjoKOzsgaHR0cHM6Ly9naXRodWIuY29tL2VyZG9zL2FkdmVudC1vZi1jb2RlL2Jsb2IvZmUzMDZiNjFlMWMwMTcyZTY2YWM2NDYwZWEyZGM0N2FiOTUyZDBiNS8yMDIzL2RheTE4LmNsagoKOzsgUmVtZW1iZXIgdG8gdXBkYXRlIHRoZSB5ZWFyIGFuZCBkYXkgaW4gdGhlIGZldGNoLWlucHV0IGNhbGwuCihkZWYgaW5wdXQgKGpzLWF3YWl0IChmZXRjaC1pbnB1dCAyMDIzIDE4KSkpCgooZGVmbiBwYXJzZSBbbGluZV0KICAobGV0IFtbXyBbYV0gYiBjXSAocmUtbWF0Y2hlcyAjIiguKSAoXGQrKSBcKCMoLns2fSlcKSIgbGluZSldCiAgICBbYSAocGFyc2UtbG9uZyBiKSBjXSkpCgooZGVmIHBsYW4gKG1hcHYgcGFyc2UgKHN0ci9zcGxpdC1saW5lcyBpbnB1dCkpKQoKKGRlZm4gc29sdmUxIFtwbGFuXQogIChzZWNvbmQgKHJlZHVjZSAoZm4gW1toIGFyZWFdIFtkaXIgbGVuXV0KICAgICAgICAgICAgICAgICAgICAoY2FzZSBkaXIKICAgICAgICAgICAgICAgICAgICAgIFxVIFsoLSBoIGxlbikgYXJlYV0KICAgICAgICAgICAgICAgICAgICAgIFxEIFsoKyBoIGxlbikgKCsgYXJlYSBsZW4pXQogICAgICAgICAgICAgICAgICAgICAgXEwgW2ggKCsgYXJlYSBsZW4gKCogaCBsZW4pKV0KICAgICAgICAgICAgICAgICAgICAgIFxSIFtoICgtIGFyZWEgKCogaCBsZW4pKV0pKQogICAgICAgICAgICAgICAgICBbMCAxXSBwbGFuKSkpCgooY29tbWVudAogICgtPj4gcGxhbiBzb2x2ZTEpKQoKKGRlZm4gbWFwLXBsYW4gW1tfIF8gZGlyXV0KICBbKGdldCAoemlwbWFwICIwMTIzIiAiUkRMVSIpIChsYXN0IGRpcikpCiAgIChqcy9wYXJzZUludCAoc3RyL2pvaW4gKGJ1dGxhc3QgZGlyKSkgMTYpXSkKCihjb21tZW50CiAgKC0%2BPiBwbGFuIChtYXB2IG1hcC1wbGFuKSBzb2x2ZSkp

thanks2 1
Ivana18:12:55

First part implemented directly, with constructing string field and filling the internal area: https://gist.github.com/Ivana-/d3a3f6017e0cdd605a3fe8e03ab8012f But for the second part found smart reduction, 10 lines of code, works in less than 2 ms 😀

(->> input
     str/split-lines
     (reduce (fn [[r s] l]
               (let [[_ _ c] (str/split l #"\s+")
                     n (long (BigInteger. (subs c 2 7) 16))]
                 (case (get c 7)
                   \3 [(- r n) s]
                   \1 [(+ r n) (+ s n)]
                   \2 [r (+ s (* n r) n)]
                   \0 [r (- s (* n r))])))
             [0 1]))
Maybe I may participate in codegolf with it, in all the three nominations: code speed (performance), RAM usage and code symbols amount 😁 Looking to the @U2E1D7WUB’s code I bielive that ideas are flying in a space literally, amost char to char the same

2
genmeblog20:12:47

Still on part-1, went for flood-fill which was a trap. Anyway here is the image of the trench from part 1.

❤️ 2
alekszelark21:12:07

yes, it messes you up with the colors

jurjanpaul09:12:03

Didn’t know Shoelace or even realized what algorithm to look for, but it seemed to make sense to cut up the shape into distinct vertical slices of equal groups of horizontal segments (or vice versa). It works and is fast, but unfortunately made me write quite a bit of rather vulnerable code… So, yes, I will definitely study the Shoelace algorithm and your examples for future benefit. 🙂