29 lines
1 KiB
BQN
29 lines
1 KiB
BQN
grid←>•FLines"input"
|
||
|
||
⟨PBM⟩←•Import"../../bqn-graphics/pnm.bqn"
|
||
Mat←{1˙¨⌾(𝕩⊸⊑)(≢grid)⥊0}
|
||
|
||
Sim←{
|
||
Step←{𝕨𝕊i‿v‿nv:
|
||
{𝕊1: ("img/out"∾(1↓•Fmt 1e4+i)∾".pnm")•file.Chars PBM ¬Mat ⍷⊑¨v ; 0}𝕨
|
||
nexts←{∧´(0⊸≤∧<⟜(≢grid))⊑𝕩}¨⊸/∾{𝕊p‿d:
|
||
{
|
||
𝕊'.'‿·: ⟨⟨p+d,d⟩⟩ ;
|
||
𝕊'/'‿·: ⟨⟨p-⌽d,-⌽d⟩⟩ ;
|
||
𝕊'\'‿·: ⟨⟨p+⌽d,⌽d⟩⟩ ;
|
||
𝕊'|'‿1: ⟨⟨p+d,d⟩⟩ ;
|
||
𝕊'|'‿0: ⟨⟨p+1‿0,1‿0⟩,⟨p-1‿0,-1‿0⟩⟩ ;
|
||
𝕊'-'‿0: ⟨⟨p+d,d⟩⟩ ;
|
||
𝕊'-'‿1: ⟨⟨p+0‿1,0‿1⟩,⟨p-0‿1,-0‿1⟩⟩
|
||
}⟨p⊑grid,|⊑d⟩
|
||
}¨nv
|
||
⟨i+1,nv∾v,(¬nexts∊v)/nexts⟩
|
||
}
|
||
⍷⊑¨1⊑𝕨Step•_while_{0≠≠2⊑𝕩} 0‿⟨⟩‿⟨𝕩⟩
|
||
}
|
||
|
||
•Show ≠ 1 Sim⟨0‿0,0‿1⟩
|
||
|
||
m‿n←≢grid
|
||
starts←(⋈⟜1‿0¨0⊸∾¨↕m)∾(⋈⟜¯1‿0¨(m-1)⊸∾¨↕m)∾(⋈⟜0‿1¨∾⟜0¨↕n)∾(⋈⟜¯1‿0¨∾⟜(n-1)¨↕n)
|
||
•Show ⌈´≠¨Sim¨starts
|