--- /dev/null
+Prep←".#"⊸⊐∘>
+
+self←[0‿0‿0,0‿1‿0,0‿0‿0]
+near←[1‿1‿1,1‿0‿1,1‿1‿1]
+n ←[1‿1‿1,0‿0‿0,0‿0‿0]
+s ←[0‿0‿0,0‿0‿0,1‿1‿1]
+w ←[1‿0‿0,1‿0‿0,1‿0‿0]
+e ←[0‿0‿1,0‿0‿1,0‿0‿1]
+none←[0‿0‿0,0‿0‿0,0‿0‿0]
+Any←{∨´⥊𝕨∧𝕩}
+
+Propose←{⟨inc, ex⟩ 𝕊 𝕩:(∧´(𝕩⊸Any)¨⟨self,near⟩∾inc)∧(¬𝕩 Any ex)}
+cycle ← >{{1↓↑𝕩}⌾(𝕩⊸⌽)⟨n,s,w,e⟩}¨↕4
+MkProposer←{⟨¯1↓𝕩,¯1⊑𝕩⟩⊸Propose}
+⟨propose_n,propose_s,propose_w,propose_e⟩←MkProposer¨⊏cycle
+propose_0a←MkProposer⟨n,s,w,e,none⟩ # Not moving because many neighbours
+Propose_0b←≡⟜self # Not moving because alone
+Propose_0←Propose_0a∨Propose_0b
+
+Turn←{ 𝕤
+ cycle ↩ 1⌽cycle
+ ⟨propose_n,propose_s,propose_w,propose_e⟩↩MkProposer¨⊏cycle
+}
+
+Pad←{ »˘»(2+≢𝕩)↑𝕩 }
+Trim1←{ (∨`∨´˘𝕩)/𝕩 } # Trim empty rows from north edge
+Trim←{ Trim1 Trim1⌾⍉ Trim1⌾⌽ Trim1⌾(⌽∘⍉) 𝕩 } # Trim all round
+
+Round←{𝕊map:
+ map Pad↩
+ proposers←⟨propose_n, propose_s, propose_w, propose_e, propose_0⟩
+ shifts←⟨«,»,«˘,»˘,⊢⟩ ⋄ unshifts←⟨»,«,»˘,«˘,⊢⟩
+ proposals←{ Pad 𝕏⎉2⟨3,3⟩↕map }¨proposers
+ collisions← 1<+´⥊ shifts { 𝕎 𝕩 }¨ proposals
+ stay← unshifts { 𝕩∧ 𝕎 collisions }¨ proposals
+ map↩(∨´stay)∨(∨´ shifts { 𝕎 𝕩 }¨ proposals∧¬stay)
+ Turn @
+ Trim map
+}
+
+Main←{
+ ⟨i,·,·⟩←{
+ 𝕊⟨i,this,prev⟩:⟨i+1,Round this,this⟩
+ } •_while_ {
+ 𝕊⟨·,this,prev⟩:this≢prev
+ } ⟨0,𝕩,@⟩
+ i
+}
+
+•Show Main Prep •file.Lines ⊑•args