28 lines
1 KiB
BQN
28 lines
1 KiB
BQN
m‿n←≢grid←'0'-˜>•FLines"input"
|
||
|
||
dirs←∾⟜-⋈⟜⌽0‿1
|
||
Inbounds←∧´(0‿0⊸≤∧<⟜m‿n)
|
||
Step←{a‿b𝕊q‿v‿dists:
|
||
u←2↑⊑q
|
||
d←{𝕊0‿0‿0: 9‿9 ; (2⊑𝕩)⊑dirs}⊑q
|
||
ns←(Inbounds¨⊑∘⌽¨)⊸/ u⊸+¨¨∾{𝕩⊸ר¨(↑⟜(1+↕b)¨a+↕1+b-a)}¨dirs
|
||
ns↩((|d)⊸≢¨|-⟜u¨⊑¨ns)/ns
|
||
ns↩ns∾¨¨⊑¨(dirs⊐<)¨u⊸-˜¨⊑¨ns
|
||
ns↩(¬(⊑∘⌽¨ns)⊑v)/ns
|
||
newdists←dists ⌊ (((⊑q)⊑dists)++´¨⊑⟜grid¨2⊸↑¨¨ns)⌾((⊑∘⌽¨ns)⊸⊑)dists
|
||
changedns←((⊑⟜newdists<⊑⟜dists)¨⊑∘⌽¨ns) / ns
|
||
newq←(⍋⊑⟜newdists)⊸⊏ (⊑∘⌽¨changedns)∾1↓q
|
||
newv←1⌾((⊑q)⊸⊑)v
|
||
newq‿newv‿newdists
|
||
}
|
||
Target←⌊´ ((n-1)⊸⊏ (m-1)⊸⊏) #(m‿n-1)⊑⌊˝⎉1
|
||
|
||
q←⟨0‿0‿0⟩
|
||
v←m‿n‿4⥊0
|
||
ub←1e4
|
||
dists←0˙¨⌾((0‿0⊸∾¨↕4)⊸⊑) m‿n‿4⥊ub
|
||
·‿·‿d1←1‿3 Step•_while_{ub=Target 2⊑𝕩} q‿v‿dists
|
||
•Show Target d1
|
||
|
||
·‿·‿d2←4‿10 Step•_while_{ub=Target 2⊑𝕩} q‿v‿dists
|
||
•Show Target d2
|