/ Uiua / 2023 / 16.ua
16.ua
 1  &fras ⊣ &args
 2  
 3  ⊜∘≠@\n.
 4  
 5  Dirs ← ↻1[∩¯,,⟜⇌⇡2]
 6  
 7  GetBit ← ⬚0⊏⊙⋯
 8  SetBit ← °⋯/↥⬚0⊟⊓°⊚⋯
 9  
10  HasFlag ← GetBit⊙⊡°⊂
11  SetFlag ← ⍜(⊙⊡)SetBit°⊂
12  
13  Tiles ← "./\\|-"
14  Next ← ⨬(
15    ¤
16  | ¤⨬(1|0|3|2)
17  | ¤⨬(3|2|1|0)
18  | ⨬(¤0|[0 2]|¤2|[0 2])
19  | ⨬([1 3]|¤1|[1 3]|¤3))
20  
21  IsValid ← /××∩≥[.0].⊙(-1)↘1
22  Step    ← ▽:⟜≡IsValid⊙(¤△) ≡⊂⟜(+⊏⊙Dirs)⊙¤ Next⊗⊙Tiles :⊙:⊙⟜⊸⊡°⊂
23  Iter    ← ⨬(⊃(Step⊙◌)(⊙∘SetFlag)|↯0)◡HasFlag
24  
25  Energize ← /+♭≠0 ⋅⊙◌⍢(⊂⊙Iter:°⊂|≠0⧻) ⊙⊸≡≡⋅0¤
26  
27  Edge ← ⊂∩(⊂∩⍉) ∩⍜°⊂⊓(◿4-1)⇌ ∩(∩⊂2⊙0∩⊟0,⊣)◡: ∩⇡°⊟△
28  
29  ⊃(/↥≡Energize⊃Edge¤|Energize1_0_0)