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]
-e ←[0‿0‿1,0‿0‿1,0‿0‿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←{∨´⥊𝕨∧𝕩}
-ProposeN←{∧´(𝕩⊸Any)¨⟨self,near⟩∧(¬𝕩 Any n)}
-ProposeS←{∧´(𝕩⊸Any)¨⟨self,near,n⟩∧(¬𝕩 Any s)}
-ProposeE←{∧´(𝕩⊸Any)¨⟨self,near,n,s⟩∧(¬𝕩 Any e)}
-ProposeW←{∧´(𝕩⊸Any)¨⟨self,near,n,s,e⟩∧(¬𝕩 Any w)}
-Propose0←{∧´(𝕩⊸Any)¨⟨self,near,n,s,e,w⟩}
+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_e, propose_w, propose_0⟩
- shiftsâ\86\90â\9f¨Â«,»,»Ë\98,«Ë\98,â\8a¢â\9f© â\8b\84 unshiftsâ\86\90â\9f¨Â»,«,«Ë\98,»˘,⊢⟩
+ proposers←⟨propose_n, propose_s, propose_w, propose_e, propose_0⟩
+ shiftsâ\86\90â\9f¨Â«,»,«Ë\98,»Ë\98,â\8a¢â\9f© â\8b\84 unshiftsâ\86\90â\9f¨Â»,«,»Ë\98,«˘,⊢⟩
proposals←{ Pad 𝕏⎉2⟨3,3⟩↕map }¨proposers
collisions← 1<+´⥊ shifts { 𝕎 𝕩 }¨ proposals
stay← unshifts { 𝕩∧ 𝕎 collisions }¨ proposals
map↩(∨´stay)∨(∨´ shifts { 𝕎 𝕩 }¨ proposals∧¬stay)
+ Turn @
+ •Show Trim map
}
-Main←Round⍟1
+Main←{+´¬⥊ Round⍟10 𝕩}
•Show Main Prep •file.Lines ⊑•args