aboutsummaryrefslogtreecommitdiff
path: root/src/r1.bqn
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2021-04-30 14:56:07 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2021-04-30 14:56:07 -0400
commit1df2979a47cd40ec00d929c26b2aa4b05467069f (patch)
treebdecbda35eda7c2b32e22b1dffb9b60866b3e7e5 /src/r1.bqn
parentfe96ec4831914abc29955257924fc8ec5e24beba (diff)
Special Take/Drop implementation for atom 𝕨
Diffstat (limited to 'src/r1.bqn')
-rw-r--r--src/r1.bqn27
1 files changed, 20 insertions, 7 deletions
diff --git a/src/r1.bqn b/src/r1.bqn
index f5a295ee..cd0d1c3f 100644
--- a/src/r1.bqn
+++ b/src/r1.bqn
@@ -432,13 +432,26 @@ structFn ← {
}
_takeDrop←{
- ⟨gl,Noop,_indsβŸ©β†π•—
+ take ← 1 - 𝕗
+ gl ← π•—βŠ‘"↑"β€Ώ"↓"
+ noop ← π•—βŠ‘βŸ¨1-=⟜|, 1-0⊸=⟩
+ inds ← π•—βŠ‘βŸ¨
+ { π”½βŸ(π•¨βŠΈ<)a←|𝕩 β‹„ (0<𝕩)β—ΆβŸ¨Β―βˆžβŸ(<⟜0)⌜+⟜(𝕨+𝕩)⌜, ¯∞⍟(π•¨βŠΈβ‰€)βŒœβŸ©β†•a }
+ { 𝔽 β‹„ 0⊸<β—ΆβŸ¨β†•0⌈+,<∘⊒+βŒœΒ·β†•0⌈-⟩ }
+ ⟩
pre ← "𝕨"∾gl∾"𝕩: 𝕨 must "
ernk ← pre∾"have rank at most 1"
eint ← pre∾"consist of integers"
- {
+ IsArrayβˆ˜βŠ£β—Ά{
+ eint ! Int 𝕨
+ p←0≀𝕨
+ l←𝕨pβ—ΆβŸ¨0⌈+,βŒŠβŸ©β‰ π•©
+ F←𝕩{(Fill𝕗)Λ™βŒœβ†•π•©}
+ k←1β‹„Sβ†βŠ’ β‹„ π•¨βŠΈ{k×´↩c←1 Cell𝕩 β‹„ S↩(⟨(0⌈(≠𝕩)-⊒)⍟(1-take)|π•¨βŸ©βˆΎc)⊸β₯Š}⍟(1<=) 𝕩
+ S ((|βˆ˜π•¨-β‰ ){𝕩pβ—ΆβŸ¨βˆΎΛœ,∾⟩F𝕨×k}⍟(>⟜0)⊒)⍟take (lΓ—k) (take=p)◢↓‿↑ β₯Šπ•©
+ }β€Ώ{
ernk ! 1β‰₯=𝕨
- 𝕨 ↩ Deshape 𝕨
+ 𝕨 ↩ β₯Šπ•¨
eint ! 1Γ—Β΄IntβŒœπ•¨
r ← ≠𝕨
s ← r {(1βŒœβˆ˜β†•π•¨-≠𝕩)βˆΎπ•©}⍟(>βŸœβ‰ ) ≒𝕩
@@ -452,11 +465,11 @@ _takeDrop←{
Sel ← βŠ‘βŸœ(β₯Šπ•©)
𝕩{Sel↩0βŠΈβ‰€β—ΆβŸ¨(Fill𝕨)Λ™,Sel⟩}⍟⊒doFil
Sel⌜ sh β₯Š i
- }_fillBy_⊒ ToArray 𝕩
- }
+ } 𝕩
+ }_fillBy_⊒ ⟜ ToArray
}
-Take ← ⟨"↑" β‹„ 1-=⟜| β‹„ { π”½βŸ(π•¨βŠΈ<)a←|𝕩 β‹„ (0<𝕩)β—ΆβŸ¨Β―βˆžβŸ(<⟜0)⌜+⟜(𝕨+𝕩)⌜, ¯∞⍟(π•¨βŠΈβ‰€)βŒœβŸ©β†•a }⟩_takeDrop
-Drop ← ⟨"↓" β‹„ 1-0⊸= β‹„ { 𝔽 β‹„ 0⊸<β—ΆβŸ¨β†•0⌈+,<∘⊒+βŒœΒ·β†•0⌈-⟩ }⟩_takeDrop
+Take ← 0 _takeDrop
+Drop ← 1 _takeDrop
ShiftCheck←{
"Β« or Β»: 𝕩 must have rank at least 1" ! 1≀=𝕩