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)