~pmikkelsen/aoc2023

ba9591549be30aeb134025912ac0d98240959e9e — Peter Mikkelsen 6 months ago d24ffb0
Solve day 16
2 files changed, 145 insertions(+), 0 deletions(-)

A Day16.aplf
A input/day16
A Day16.aplf => Day16.aplf +35 -0
@@ 0,0 1,35 @@
 (r1 r2)←Day16;_;bottom;exits;go;h;input;left;n;r2;right;starts;step;top;visited;w
 input←↑⊃⎕NGET'input/day16' 1
 visited←⍬
 exits←⍬
 step←{
     2≠≢⍵:⊂⍬
     (p d)←⍵
     (∨⌿p>⍴input)∨0∊p:(⊂⍬)⊣exits∪←⊂(p-d)(-d)
     c←input[⊂p]
     visited∪←⊂p d
     (d[2]=0)∧c='-':((p+d)(d←0 ¯1))((p+d)(d←0 1))
     (d[1]=0)∧c='|':((p+d)(d←¯1 0))((p+d)(d←1 0))
     c='/':⊂(p+d)(d←⌽-d)
     c='\':⊂(p+d)(d←⌽d)
     ⊂(p+d)d
 }
 go←{∪visited~⍨(⊂⍬)~⍨⊃,⌿step¨⍵}
 _←go⍣≡⊂(1 1)(0 1)
 r1←≢∪⊃¨visited ⍝ number of unique coordinates visited

 (h w)←⍴input
 top←{(1,⍵)(1 0)}¨⍳w
 left←{(⍵,1)(0 1)}¨⍳h
 bottom←{(h,⍵)(¯1 0)}¨⍳w
 right←{(⍵,w)(0 ¯1)}¨⍳h
 starts←top,left,bottom,right

 r2←0
 :While 0≠≢starts
     visited←⍬ ⋄ exits←⍬
     _←go⍣≡⊂⊃starts
     r2⌈←≢∪⊃¨visited
     starts←(1↓starts)~exits
     ⎕←r2(≢starts)
 :EndWhile

A input/day16 => input/day16 +110 -0
@@ 0,0 1,110 @@
\|.......|........|...../........................\.\.......\...-../..........\.........|...\......|...........
.|.../............|.....|\..../....-.\...........-............./......................|.-.-...........\.....-.
...............|........-....-...../..../|./.............\..|..................\..........|\.........../.\....
....................|\..................\..................\/....................-....../................\.|..
......././-......................................|.....|./.............................../....................
.......................\.....|............-...\..|......-./...\.........../.............|..-......-...../.....
.....................-.......\.......|............./........\.......|........../............/.................
..................-................-./....................|....|...................-..................\.......
|.......././.................................|.....-............................-.........|......../../.......
.........../.......-........|................/......-....|.......\/..|..\...|..............-....\....|...-....
............./-......./.....-./....\........./..|...............|..-......................-...................
......-\.\..|/......-.|.........-.......-..\|.............................\.-.............\...............\...
......\..../................\.........\..|...............-.......|..-|.....|-..........................-......
.....\....../../..........\......-...........\.......-.\........./...........|\............-.............\....
........\....................|........./...................|.........-.........\..............................
.........-|.............\-.............................-..............|.....\../......|/......................
..................../.......\/......./................../...../.......................|......|./.-......-|....
..................../.........|..-.-./....../.|-..\..|........|......-.................\...\........./...\....
....-...-....../...............................................|....................\..-..............-..|.-.\
..........\..\.\....................-...|......................\......|......-.................\....|....../..
\................../.....-./.......-...........\..../....../....|.........|........................|..........
../......\.|..............................|../......................-.\..........\...............|..........|.
.|..............................-...-........|...-........|........../............\...../.\......-....|.......
............./...................\.\.........|...|../..........-.......\........../.-.-.....-..........-......
..........................-.|\......|......./|.............../..../......--.....|.........|........../........
/-....|/...-|..........\......................./..........-.....-.............\....../................\.......
............-../............\...............................-.........\...\...........|-....|.................
..............................|........-.........-..................|...........................-.............
........./...............//.........................................-..........|............|..../............
...\..||../........................./................|......./.......|....|.....|............|................
........./...................\-./.......\...../............../..........-|...................|..../.......|...
...../................/..-............../....................|/......................................-.|......
\|........................................\...........-......../...\.|......|..\../........|.......\..........
..|/......\....-...............||......//..................\\..-./...-....................|...................
./....../................\../.\.....\.........\.\\\..........................-..\..-............./-...........
........|..........-.....|..\..../....../.................../.............\...-.\...........\...........-.....
..........\...|/..|......|\/./...........-.|.................-.|....|....................../..................
-.......................-.|.............-../......./.../...-|..|.........../../..\............\../..........|.
................./.........\..........-.........../..|.......//..............|..................|.....\.......
.............-../......\./.../.|.|.....-..|.....|...\.........|.....-/..................-................|....
|.-\..../...........-.....|....................//........\............./....../........./../\..\....-.........
......\.|...........|..............|............/....-../.....\..................../...................|......
../|....\....................................-.....--...|....../........-...................|...\.......\.....
..........|../..-.........-...........|....................../............/.......................|.|.........
........./..................\............................\..............|..................................\..
...-|...........-......\|\...........\...\.........|..../......../..../..../..-|||................-...........
..|....-\..\......./...........\\.................................|......-./.............../........|..--.....
.................................../|...........-.......-...|..-............-........../......................
.......|.............|.......................................................\...............\................
........\.......|...........|............................\-......................................|............
......|..\.-../......................|.-.../.....-..|.-.................................-.......\......./.|...
--\...../..........-...........\...................../.....|/............\..............-............./.......
......|-...............\........................................../.-\..|.....-........|..\./../.-..........|.
.........................//.....-...................|...|..-.\....|................|......\..-............/...
./.........-...-....................../......\\......||..........|....................--.................../..
....-........\........................../..........|........./.........................\.\....|.......-|......
.|\/...............|...-.|....|../..|...|...../......\..........|.............|........\.....|................
...../.-\.-................|......../....-..\......|/.......\.......................\.......................|.
......................|..........-..../..../.\../................../......................|..............\|...
........../-\......|............................../....-......................................./..............
./..........|.....-.............-..-...|../........\.-...........|.........................-................-.
.-....-................|..................-...-...........-........|.|..........-.-...........................
...|...............|.................\.......|.............../................\....|.............|.........\..
..\..............|.............\..................\.......................|..........-........................
../........./............\.\../.........................\../.....-....|....................-............../...
...\................\......../......................./\....\..-........\........./..\.........................
.........../..|.......-.........-|..............................................\...............-./\||...../..
...............\........-..|..........||......................../..........-...../........................\...
...........\.....................-................................................................|..........|
./.........-.......-................................\..........||..|.|..\.........\.../..||......-.......\....
\......\.........-..\......\...................-..|.....\.....\....................|..........-......-........
.............|..........\..........-..................\.\..........|.....................|.............-/.....
........-................|......./..-...............\......|-...\.....\.............|./..\\../....-.../.......
..................\..||.............-........|............/.........\../...\..|/.....\.........\..........|...
..|../..................\..............................|...........................................-..........
\..................../.|.......\...|-............../......\.............././..-...................|...........
......./..............................\..................|................\............./....-.....-..........
..............|.........../...............................\.................\..|........-.......-.\.....|.....
.................|.....\........................................-.\.\..\...................//.....\./.........
....../..........|..-............/..........\............../.............|....................................
.............|..........-.|..\..........-....\...........................|.....................\.\....-.......
..........\............../........-........|.....-./...........................................\..........\...
..........|.-...|.|...............-...|.|..................-...-........|/.../.............................\..
.............-....\.....................................................\........................|...........\
..\|...........|....-.-|........................................|.............................\.....\.-|......
...........//.|.............-......\.........................|............-|...............././.....|....|....
.............../.\...............--........|........-....\..../.........-.....................-......../...-..
.....|......\.........../............/..................../.........|...........-.......-.|...........-.......
.................-........./..........|...................../..........................|.|...........-.......|
.....|...-........|...................../.../...................................\.............\...|...........
.............\.......|........................./....|........./........\.........\.......................\....
............................/-..................................../........-..............\...|.....\..|\.....
...-..././....................-.......|................./..........-.....|.|..............\..........-....\...
.....\\......\...............................-...-........-.|..../........\.\.....-.....................|.....
..............\.........\.\.|..........-......//./.../....|.............-.../..|.........................\....
...................../...........\.........................\.-..|..........|........./|...............|/...\|.
..|.-./.............-.........././.|......../.......\...........-.........../..........\.....-.........-......
.....|......\....-.........-.............|.......|-........|-...-../-..|.......-................-.............
.................|.........|....\................................/.-.....|........./..../..........-..........
-....\......./......\.\..................-..|./......-...\.\...-.........................\.............|......
......................./..............\/..........-................../............\.......\..\.......\....../.
.|...............//.................................../.......\.......\.\..........-\...|............-........
.../......................|.....-.........../................-.../............../.........\.\.../........../..
..................................|\..................-../........-./..\......./....|../.......|-.............
.....\..........|................/........\..........-......../\../..../.\-.|...\....|\.............\|..--....
................./................................././|..../..........|............../............../.........
..............|......|.......\....|...|......|..................................\.......-....\/...........|...
......./\..................................-......./......\....\..-..................-................\......|
...........-.........../..............\............|....../....../.......\........./......../..\.........\...-
.-..................\............................/\...................|...........|....\....\--/............/.