## ~pmikkelsen/aoc2023

ba9591549be30aeb134025912ac0d98240959e9e — Peter Mikkelsen 6 months ago
```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 @@
+\|.......|........|...../........................\.\.......\...-../..........\.........|...\......|...........
+.|.../............|.....|\..../....-.\...........-............./......................|.-.-...........\.....-.
+...............|........-....-...../..../|./.............\..|..................\..........|\.........../.\....
+....................|\..................\..................\/....................-....../................\.|..
+......././-......................................|.....|./.............................../....................
+.......................\.....|............-...\..|......-./...\.........../.............|..-......-...../.....
+.....................-.......\.......|............./........\.......|........../............/.................
+..................-................-./....................|....|...................-..................\.......
+|.......././.................................|.....-............................-.........|......../../.......
+.........../.......-........|................/......-....|.......\/..|..\...|..............-....\....|...-....
+............./-......./.....-./....\........./..|...............|..-......................-...................
+......-\.\..|/......-.|.........-.......-..\|.............................\.-.............\...............\...
+......\..../................\.........\..|...............-.......|..-|.....|-..........................-......
+.....\....../../..........\......-...........\.......-.\........./...........|\............-.............\....
+........\....................|........./...................|.........-.........\..............................
+.........-|.............\-.............................-..............|.....\../......|/......................
+..................../.......\/......./................../...../.......................|......|./.-......-|....
+..................../.........|..-.-./....../.|-..\..|........|......-.................\...\........./...\....
+....-...-....../...............................................|....................\..-..............-..|.-.\
+..........\..\.\....................-...|......................\......|......-.................\....|....../..
+\................../.....-./.......-...........\..../....../....|.........|........................|..........
+../......\.|..............................|../......................-.\..........\...............|..........|.
+.|..............................-...-........|...-........|........../............\...../.\......-....|.......
+............./...................\.\.........|...|../..........-.......\........../.-.-.....-..........-......
+..........................-.|\......|......./|.............../..../......--.....|.........|........../........
+/-....|/...-|..........\......................./..........-.....-.............\....../................\.......
+............-../............\...............................-.........\...\...........|-....|.................
+..............................|........-.........-..................|...........................-.............
+........./...............//.........................................-..........|............|..../............
+...\..||../........................./................|......./.......|....|.....|............|................
+........./...................\-./.......\...../............../..........-|...................|..../.......|...
+...../................/..-............../....................|/......................................-.|......
+\|........................................\...........-......../...\.|......|..\../........|.......\..........
+..|/......\....-...............||......//..................\\..-./...-....................|...................
+./....../................\../.\.....\.........\.\\\..........................-..\..-............./-...........
+........|..........-.....|..\..../....../.................../.............\...-.\...........\...........-.....
+..........\...|/..|......|\/./...........-.|.................-.|....|....................../..................
+-.......................-.|.............-../......./.../...-|..|.........../../..\............\../..........|.
+................./.........\..........-.........../..|.......//..............|..................|.....\.......
+.............-../......\./.../.|.|.....-..|.....|...\.........|.....-/..................-................|....
+|.-\..../...........-.....|....................//........\............./....../........./../\..\....-.........
+......\.|...........|..............|............/....-../.....\..................../...................|......
+../|....\....................................-.....--...|....../........-...................|...\.......\.....
+..........|../..-.........-...........|....................../............/.......................|.|.........
+........./..................\............................\..............|..................................\..
+...-|...........-......\|\...........\...\.........|..../......../..../..../..-|||................-...........
+..|....-\..\......./...........\\.................................|......-./.............../........|..--.....
+.................................../|...........-.......-...|..-............-........../......................
+.......|.............|.......................................................\...............\................
+........\.......|...........|............................\-......................................|............
+......|..\.-../......................|.-.../.....-..|.-.................................-.......\......./.|...
+--\...../..........-...........\...................../.....|/............\..............-............./.......
+......|-...............\........................................../.-\..|.....-........|..\./../.-..........|.
+.........................//.....-...................|...|..-.\....|................|......\..-............/...
+./.........-...-....................../......\\......||..........|....................--.................../..
+....-........\........................../..........|........./.........................\.\....|.......-|......
+.|\/...............|...-.|....|../..|...|...../......\..........|.............|........\.....|................
+...../.-\.-................|......../....-..\......|/.......\.......................\.......................|.
+......................|..........-..../..../.\../................../......................|..............\|...
+........../-\......|............................../....-......................................./..............
+./..........|.....-.............-..-...|../........\.-...........|.........................-................-.
+.-....-................|..................-...-...........-........|.|..........-.-...........................
+...|...............|.................\.......|.............../................\....|.............|.........\..
+..\..............|.............\..................\.......................|..........-........................
+../........./............\.\../.........................\../.....-....|....................-............../...
+...\................\......../......................./\....\..-........\........./..\.........................
+.........../..|.......-.........-|..............................................\...............-./\||...../..
+...............\........-..|..........||......................../..........-...../........................\...
+...........\.....................-................................................................|..........|
+./.........-.......-................................\..........||..|.|..\.........\.../..||......-.......\....
+\......\.........-..\......\...................-..|.....\.....\....................|..........-......-........
+.............|..........\..........-..................\.\..........|.....................|.............-/.....
+........-................|......./..-...............\......|-...\.....\.............|./..\\../....-.../.......
+..................\..||.............-........|............/.........\../...\..|/.....\.........\..........|...
+..|../..................\..............................|...........................................-..........
+\..................../.|.......\...|-............../......\.............././..-...................|...........
+......./..............................\..................|................\............./....-.....-..........
+..............|.........../...............................\.................\..|........-.......-.\.....|.....
+.................|.....\........................................-.\.\..\...................//.....\./.........
+....../..........|..-............/..........\............../.............|....................................
+.............|..........-.|..\..........-....\...........................|.....................\.\....-.......
+..........\............../........-........|.....-./...........................................\..........\...
+..........|.-...|.|...............-...|.|..................-...-........|/.../.............................\..
+.............-....\.....................................................\........................|...........\
+..\|...........|....-.-|........................................|.............................\.....\.-|......
+...........//.|.............-......\.........................|............-|...............././.....|....|....
+.............../.\...............--........|........-....\..../.........-.....................-......../...-..
+.....|......\.........../............/..................../.........|...........-.......-.|...........-.......
+.................-........./..........|...................../..........................|.|...........-.......|
+.....|...-........|...................../.../...................................\.............\...|...........
+.............\.......|........................./....|........./........\.........\.......................\....
+............................/-..................................../........-..............\...|.....\..|\.....
+...-..././....................-.......|................./..........-.....|.|..............\..........-....\...
+.....\\......\...............................-...-........-.|..../........\.\.....-.....................|.....
+..............\.........\.\.|..........-......//./.../....|.............-.../..|.........................\....
+...................../...........\.........................\.-..|..........|........./|...............|/...\|.
+..|.-./.............-.........././.|......../.......\...........-.........../..........\.....-.........-......
+.....|......\....-.........-.............|.......|-........|-...-../-..|.......-................-.............
+.................|.........|....\................................/.-.....|........./..../..........-..........
+-....\......./......\.\..................-..|./......-...\.\...-.........................\.............|......
+......................./..............\/..........-................../............\.......\..\.......\....../.
+.|...............//.................................../.......\.......\.\..........-\...|............-........
+.../......................|.....-.........../................-.../............../.........\.\.../........../..
+..................................|\..................-../........-./..\......./....|../.......|-.............
+.....\..........|................/........\..........-......../\../..../.\-.|...\....|\.............\|..--....
+................./................................././|..../..........|............../............../.........
+..............|......|.......\....|...|......|..................................\.......-....\/...........|...
+......./\..................................-......./......\....\..-..................-................\......|
+...........-.........../..............\............|....../....../.......\........./......../..\.........\...-
+.-..................\............................/\...................|...........|....\....\--/............/.

```