chiark / gitweb /
23b done
authorBen Harris <bjh21@bjh21.me.uk>
Fri, 14 Jun 2024 08:18:06 +0000 (09:18 +0100)
committerBen Harris <bjh21@bjh21.me.uk>
Fri, 14 Jun 2024 08:18:06 +0000 (09:18 +0100)
23/23b.bqn [new file with mode: 0644]

diff --git a/23/23b.bqn b/23/23b.bqn
new file mode 100644 (file)
index 0000000..8b5a1ac
--- /dev/null
@@ -0,0 +1,50 @@
+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