diff options
| author | Marshall Lochbaum <mwlochbaum@gmail.com> | 2020-08-08 22:04:15 -0400 |
|---|---|---|
| committer | Marshall Lochbaum <mwlochbaum@gmail.com> | 2020-08-08 22:20:59 -0400 |
| commit | 4c6591c8981ec5cc533173a9136c3d870c6a7862 (patch) | |
| tree | 5940a686504a3e7d27e77412491f00bfc506ea23 /src | |
| parent | ff1c76da4a4efe69590cab6d99b5d7ab6652544d (diff) | |
Grade-based IndexOf
Diffstat (limited to 'src')
| -rw-r--r-- | src/r.bqn | 75 |
1 files changed, 39 insertions, 36 deletions
@@ -341,40 +341,6 @@ Pick1←{ Pickd←(∨´IsArray⌜∘⥊∘⊣)◶Pick1‿{Pickd⟜𝕩⌜𝕨} Pick←IsArray◶⥊‿⊢⊸Pickd -# Searching -IndexOf←{ - c←1-˜=𝕨 - ! 0≤c - 𝕨 (0<≠𝕨)◶⟨0⎉c∘⊢,(+˝∧`)≢⌜○((0<c)◶⟨⊢,<⎉c⟩)⟩ ToArray𝕩 -} -UniqueMask←{ - ! 1≤=𝕩 - g←Cmp _grade_ 0 𝕩 - (1¨⊸GroupOrd g)⊏0⊸<◶⟨1,-⟜1≢○(⊑⟜(g⊏<˘⍟(1<=)𝕩))⊢⟩⌜↕≠𝕩 -} -Find←{ - r←=𝕨 - ! r≤=𝕩 - 𝕨 ≡⎉r (≢𝕨) ↕⎉r 𝕩 -} - -⊐ ← !∘0 ⊘ IndexOf -∊ ← UniqueMask ⊘ (⊐˜<≠∘⊢) -⍷ ← ∊⊸/ ⊘ Find - -ReorderAxes←{ - 𝕩↩<⍟(0=≡)𝕩 - ! 1≥=𝕨 - 𝕨↩⥊𝕨 - ! 𝕨≤○≠≢𝕩 - ! ∧´Nat⌜⥊𝕨 - r←(=𝕩)-+´¬∊𝕨 - ! ∧´𝕨<r - 𝕨↩𝕨∾𝕨(¬∘∊˜/⊢)↕r - (𝕨⊸⊏Pick𝕩˜)⌜↕⌊´⌜𝕨⊔≢𝕩 -} -⍉ ← Transpose ⊘ ReorderAxes - # Sorting CmpLen ← { e←𝕨-˜○(∨´0⊸=)𝕩 @@ -423,8 +389,43 @@ _bins←{ ⍋ ← Cmp _grade_ 0 ⊘ (Cmp _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 +UniqueMask←{ + ! 1≤=𝕩 + g←⍋𝕩 + (1¨⊸GroupOrd g)⊏0⊸<◶⟨1,-⟜1≢○(⊑⟜(g⊏<˘⍟(1<=)𝕩))⊢⟩⌜↕≠𝕩 +} +Find←{ + r←=𝕨 + ! r≤=𝕩 + 𝕨 ≡⎉r (≢𝕨) ↕⎉r 𝕩 +} + +⊐ ← !∘0 ⊘ IndexOf +∊ ← UniqueMask ⊘ (⊐˜<≠∘⊢) +⍷ ← ∊⊸/ ⊘ Find + +ReorderAxes←{ + 𝕩↩<⍟(0=≡)𝕩 + ! 1≥=𝕨 + 𝕨↩⥊𝕨 + ! 𝕨≤○≠≢𝕩 + ! ∧´Nat⌜⥊𝕨 + r←(=𝕩)-+´¬∊𝕨 + ! ∧´𝕨<r + 𝕨↩𝕨∾𝕨(¬∘∊˜/⊢)↕r + (𝕨⊸⊏Pick𝕩˜)⌜↕⌊´⌜𝕨⊔≢𝕩 +} +⍉ ← Transpose ⊘ ReorderAxes OccurrenceCount ← ⊐˜(⊢-⊏)⍋∘⍋ ProgressiveIndexOf ← {𝕨⊐○(≍˘⟜OccurrenceCount𝕨⊸⊐)𝕩} @@ -460,4 +461,6 @@ _repeat_←{ ⥊ ↩ Deshape ⊘ Reshape ⌜ ↩ {𝔽⌜○ToArray} +∧ ↩ ⍋⊸⊏ ⊘ ∧ +∨ ↩ ⍒⊸⊏ ⊘ ∨ ⌾ ← _under_ |
