adventofcode

Aleks 2023-12-18T09:35:33.290109Z

Day 18 — Solutions

genmeblog 2023-12-19T14:50:14.484549Z

awful and overthought... https://github.com/genmeblog/advent-of-code/blob/master/src/advent_of_code_2023/day18.clj

🙌 1
jurjanpaul 2023-12-23T09:40:03.057249Z

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. 🙂

Aleks 2023-12-18T09:35:53.053459Z

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

rjray 2023-12-18T17:00:48.183669Z

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.

borkdude 2023-12-18T17:11:48.701729Z

hurray! @rjray’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&repl=true&src=OzsgSGVscGVyIGZ1bmN0aW9uczoKOzsgKGZldGNoLWlucHV0IHllYXIgZGF5KSAtIGdldCBBT0MgaW5wdXQKOzsgKGFwcGVuZCBzdHIpIC0gYXBwZW5kIHN0ciB0byBET00KOzsgKHNweSB4KSAtIGxvZyB4IHRvIGNvbnNvbGUgYW5kIHJldHVybiB4Cgo7OyBvcmlnaW5hbCBzb2x1dGlvbjoKOzsgaHR0cHM6Ly9naXRodWIuY29tL3JqcmF5L2FkdmVudC0yMDIzLWNsb2p1cmUvYmxvYi9tYXN0ZXIvc3JjL2FkdmVudF9vZl9jb2RlL2RheTE4LmNsagoKOzsgUmVtZW1iZXIgdG8gdXBkYXRlIHRoZSB5ZWFyIGFuZCBkYXkgaW4gdGhlIGZldGNoLWlucHV0IGNhbGwuCihkZWYgaW5wdXQgKGpzLWF3YWl0IChmZXRjaC1pbnB1dCAyMDIzIDE4KSkpCgooZGVmIGRlbHRhIHs6VSBbLTEgMF0gOlIgWzAgMV0gOkQgWzEgMF0gOkwgWzAgLTFdfSkKCjs7IFBhcnNlIGFuIGluc3RydWN0aW9uIGxpbmUgaW50byBhIHR1cGxlIG9mIChkaXJlY3Rpb24sIHN0ZXBzLCBjb2xvcikuCihkZWZuLSBwYXJzZS1pbnN0IFtsaW5lXQogIChsZXQgW1tfIGRpciBsZW4gY29sb3JdIChyZS1tYXRjaGVzICMiXihbVVJETF0pIChcZCspIFwoIyhbMC05YS1mXXs2fSlcKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUpXQogICAgKGxpc3QgZGlyIChwYXJzZS1sb25nIGxlbikgY29sb3IpKSkKCjs7IERvIHRoZSAic2hvZWxhY2UiIGNhbGN1bGF0aW9uLgooZGVmbi0gc2hvZWxhY2UgW1tbeTEgeDFdIFt5MiB4Ml1dXQogICgtICgqIHgxIHkyKSAoKiB5MSB4MikpKQoKOzsgRG8gdGhlIGZ1bGwgY2FsY3VsYXRpb24uIFVzZSBvdmVybGFwcGluZyBwYXJ0aXRpb25pbmcgdG8gaXRlcmF0ZSBjYWxscyB0bwo7OyBgc2hvZWxhY2VgIG92ZXIgYWRqYWNlbnQgcGFpcnMuIFRoZW4gYWRkIGluIGEgY2FsbCBiZXR3ZWVuIHRoZSBsYXN0IGFuZCBmaXJzdAo7OyBwb2ludHMuCihkZWZuLSBjYWxjdWxhdGUgW3BvaW50c10KICAoKyAoc2hvZWxhY2UgKGxpc3QgKGxhc3QgcG9pbnRzKSAoZmlyc3QgcG9pbnRzKSkpCiAgICAocmVkdWNlICsgKG1hcCBzaG9lbGFjZSAocGFydGl0aW9uIDIgMSBwb2ludHMpKSkpKQoKOzsgRmluZCB0aGUgcG9pbnRzIHRoYXQgZGVzY3JpYmUgdGhlIHBvbHlnb25zLCBiYXNlZCBvbiB0aGUgbGlzdCBvZiBpbnN0cnVjdGlvbnMKOzsgZ2l2ZW4uIE9uY2UgYWxsIGFyZSBmb3VuZCwgY2FsbCBgY2FsY3VsYXRlYCBhbmQgYXBwbHkgdGhlIGxhc3QgYml0IG9mIG1hdGgKOzsgdG8gZ2V0IHRoZSBhbnN3ZXIuCihkZWZuLSBzb2x2ZSBbaW5zdHNdCiAgKGxvb3AgW1tpbnN0ICYgaW5zdHNdIGluc3RzLHBvbHkgKGxpc3QgWzAgMF0pLHBfY250IDBdCiAgICAoaWYgKG5pbD8gaW5zdCkKICAgICAgKGluYyAocXVvdCAoKyAoY2FsY3VsYXRlIChyZXZlcnNlIHBvbHkpKSBwX2NudCkgMikpCiAgICAgIChsZXQgW1tkaXIgbGVuXSBpbnN0CiAgICAgICAgICAgIGxwIChmaXJzdCBwb2x5KQogICAgICAgICAgICBuZXdwb3MgKG1hcHYgKyBscCAobWFwdiAqIFtsZW4gbGVuXSAoZ2V0IGRlbHRhIGRpcikpKV0KICAgICAgICAocmVjdXIgaW5zdHMgKGNvbnMgbmV3cG9zIHBvbHkpICgrIHBfY250IGxlbikpKSkpKQoKKGRlZm4gcGFydC0xCiAgIkRheSAxOCBQYXJ0IDEiIAogIFtpbnB1dF0KICAoLT4%2BIGlucHV0CiAgICBzdHIvc3BsaXQtbGluZXMKICAgIChtYXB2IHBhcnNlLWluc3QpCiAgICBzb2x2ZSkpCgooY29tbWVudAogIChwYXJ0LTEgaW5wdXQpCiAgKQoKOzsgRm9yIHBhcnQgMiwgd2UgZ2V0IGRpcmVjdGlvbiBmcm9tIHRoZSBsYXN0IGRpZ2l0IG9mIHRoZSAiY29sb3IiIHZhbHVlLiBUaGlzCjs7IHdpbGwgY29tZSBhcyBhIHN0cmluZywgc28gbWFwIHRoZXNlIHRvIHRoZSBkaXJlY3Rpb24ga2V5d29yZHMuCihkZWYgZ2V0LWRpciB7IjAiIDpSLCIxIiA6RCwiMiIgOkwsIjMiIDpVfSkKCjs7ICJGaXgiIGFuIGluc3RydWN0aW9uIGJ5IHJlcGxhY2luZyBpdCB3aXRoIGRpcmVjdGlvbiBhbmQgc3RlcC12YWx1ZSBhcyBwdWxsZWQKOzsgZnJvbSB0aGUgaGV4YWRlY2ltYWwgImNvbG9yIiB2YWx1ZS4KKGRlZm4tIGZpeC1pbnN0IFtbXyBfIGNvbG9yXV0KICAobGV0IFtbXyB2YWwgZGlyXSAocmUtbWF0Y2hlcyAjIihbMC05YS1mXXs1fSkoWzAtM10pIiBjb2xvcildCiAgICAobGlzdCAoZ2V0IGdldC1kaXIgZGlyKSAoanMvcGFyc2VJbnQgdmFsIDE2KSkpKQoKKGRlZm4gcGFydC0yCiAgIkRheSAxOCBQYXJ0IDIiIAogIFtpbnB1dF0KICAoLT4%2BIGlucHV0CiAgICBzdHIvc3BsaXQtbGluZXMKICAgIChtYXB2IHBhcnNlLWluc3QpCiAgICAobWFwdiBmaXgtaW5zdCkKICAgIHNvbHZlKSk%3D

erdos 2023-12-18T17:21:47.667479Z

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
borkdude 2023-12-18T17:25:09.253979Z

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

1
Ivana 2023-12-18T18:07:55.212709Z

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 @erdos’s code I bielive that ideas are flying in a space literally, amost char to char the same

⛳ 2
genmeblog 2023-12-18T20:55:47.783109Z

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

❤️ 2
Aleks 2023-12-18T21:02:07.766259Z

yes, it messes you up with the colors