aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2020-08-08 22:22:27 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2020-08-08 22:23:22 -0400
commitcddcb28be923b17a13f25a5601da55e2f6e097ee (patch)
treec3a913e614ea94e97636818b141fe18c68393ab8 /src
parent4c6591c8981ec5cc533173a9136c3d870c6a7862 (diff)
Integrate Membership into Index-of implementation
Diffstat (limited to 'src')
-rw-r--r--src/r.bqn24
1 files changed, 14 insertions, 10 deletions
diff --git a/src/r.bqn b/src/r.bqn
index e2723bbf..bacec9aa 100644
--- a/src/r.bqn
+++ b/src/r.bqn
@@ -391,14 +391,18 @@ _bins←{
⍒ ← Cmp˜ _grade_ 1 ⊘ (Cmp˜ _bins)
# Searching
-IndexOf←{
- c←1-˜=𝕨
- ! 0≤c
- 𝕨 ∧○(8<≠∘⥊)◶⟨
- (0<≠𝕨)◶⟨0⎉c∘⊢, (+˝∧`)≢⌜○((0<c)◶⟨⊢,<⎉c⟩)⟩
- { g←⌽⍒𝕨 ⋄ i←g⊏˜0⌈1-˜(g⊏𝕨)⍋𝕩 ⋄ i+(i-˜≠𝕨)×(i⊏𝕨)≢⎉c𝕩 }
- ⟩𝕩
-}⟜ToArray
+_search←{ # 0 for ∊˜, 1 for ⊐
+ ind ← 𝕗
+ red ← 𝕗⊑⟨¬∧˝,+˝∧`⟩
+ {
+ c←1-˜=𝕨
+ ! 0≤c
+ 𝕨 ∧○(8<≠∘⥊)◶⟨
+ (0<≠𝕨)◶⟨0⎉c∘⊢, Red≢⌜○((0<c)◶⟨⊢,<⎉c⟩)⟩
+ { g←⌽⍒𝕨 ⋄ i←g⊏˜0⌈1-˜(g⊏𝕨)⍋𝕩 ⋄ (≠𝕨)(⊣+i⊸-⊸×)⍟ind(i⊏𝕨)≡⎉c𝕩 }
+ ⟩ ToArray𝕩
+ }
+}
UniqueMask←{
! 1≤=𝕩
g←⍋𝕩
@@ -410,8 +414,8 @@ Find←{
𝕨 ≡⎉r (≢𝕨) ↕⎉r 𝕩
}
-⊐ ← !∘0 ⊘ IndexOf
-∊ ← UniqueMask ⊘ (⊐˜<≠∘⊢)
+⊐ ← !∘0 ⊘ (1 _search)
+∊ ← UniqueMask ⊘ (0 _search˜)
⍷ ← ∊⊸/ ⊘ Find
ReorderAxes←{