Mark←{map𝕊⟨pos,dir⟩:
({𝕊⟨0,1⟩:'>';𝕊⟨1,0⟩:'v';𝕊⟨0,¯1⟩:'<';𝕊⟨¯1,0⟩:'^'}dir)⌾(pos⊸⊑) map
}
+
Main←{𝕊⟨map,path⟩:
+ Move←{
+ 'L' 𝕊 ⟨pos,dir⟩: ⟨pos,⟨¯1,1⟩×⌽dir⟩;
+ 'R' 𝕊 ⟨pos,dir⟩: ⟨pos,⟨1,¯1⟩×⌽dir⟩;
+ n 𝕊 ⟨pos,dir⟩: ⟨dir Advance⍟n pos,dir⟩
+ }
+ Advance←{dir 𝕊 pos:
+ dest←(≢map)|pos+dir
+ dest↩{ (≢map)|𝕩+dir } •_while_ { ' '=𝕩⊑map } dest
+ ('.'=dest⊑map)⊑⟨pos,dest⟩
+ }
pos←⟨0,⊑(⊏map)⊐'.'⟩
dir←⟨0,1⟩
- map Mark⟨pos,dir⟩
+ ⟨⟨r,c⟩,d⟩ ← ⟨pos,dir⟩ Move´ ⌽path
+ (1000×1+r) + (4×1+c) + (|1-˜+´⟨2,1⟩×d)
}
•Show Main Prep •file.Lines ⊑•args