{𝕊⟨from,to⟩:
map ↩ 1¨⌾((from RectIndices to)⊸⊑) map
}˘∾2↕¨𝕩
- map⊏".#"
+ map
}
-•Show Plot Prep •file.Lines ⊑•args
+Main←{𝕊map:
+ grains←0
+ Settle←{
+ map 1⌾(𝕩⊸⊑) ↩
+ grains +↩ 1
+ 1
+ }
+ # Return 0 if the sand falls forever; 1 once a path is full.
+ OnMap←{ (∧´𝕩≥⟨0,0⟩)∧(∧´𝕩<≢map) } # 0 if fallen off the map.
+ Solid←{ 𝕩⊑map } # Hit something solid.
+ FilledDown ←{Pour ⟨0,1⟩+𝕩}
+ FilledLeft ←{Pour ⟨¯1,1⟩+𝕩}
+ FilledRight←{Pour ⟨1,1⟩+𝕩}
+ Pour← OnMap _and_and_ (Solid _or_or_ (FilledDown _and_and_ FilledLeft _and_and_ FilledRight _and_and_ Settle))
+ Pour ⟨500,0⟩
+ #•Show (400↓map)⊏".#"
+ grains
+}
+
+•Show Main Plot Prep •file.Lines ⊑•args