From 52f8a6655c65584cf0740021dcd6fed428fc9b6c Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Tue, 8 Sep 2020 23:44:03 -0400 Subject: Faster high-rank Join implementation --- dzref | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'dzref') diff --git a/dzref b/dzref index 0d070602..6fcc5f5f 100755 --- a/dzref +++ b/dzref @@ -38,17 +38,22 @@ Windows←{ # LAYER 6: Everything else -Join←{ - C←(<⟨⟩)⥊⊸∾⌜´⊢ # Cartesian array product +Join←(1≠=)◶⟨∨´1≠=⌜,1⟩◶{ + # List of lists + i←j←¯1 ⋄ e←⟨⟩ ⋄ a←𝕩 + {{e↩a⊑˜i↩𝕩⋄j↩¯1}⍟(i⊸≠)𝕩⋄(j↩j+1)⊑e}⌜/≠⌜𝕩 +}‿{ + # Multidimensional ! IsArray 𝕩 - s←≢¨𝕩 - d←≠⊑s - ! ∧´⥊d=≠¨s + n←≠z←⥊𝕩 ⋄ s←≢⌜z ⋄ d←≠0⊑s + ! ∧´d=≠⌜s ! d≥=𝕩 - l←(≢𝕩){(𝕩⊑⟜≢a⊑˜(j=𝕩)⊸×)¨↕𝕨}¨j←↕r←=a←𝕩 - ! (r↑¨s)≡C l - i←C{p←+´¨↑𝕩⋄(↕⊑⌽p)-𝕩/¯1↓p}¨l - >i<¨⊸⊏¨l/𝕩 + q←1 ⋄ l←(≢𝕩){m←𝕩⊸⊑⌜s ⋄ r←⊑⟜m⌜q×↕𝕨 ⋄ !m≡n⥊r⊣⌜↕q ⋄ q×↩𝕨 ⋄ r}¨○⌽↕=𝕩 + t←(=𝕩)↓0⊑s + ! ∧´(t≡(=𝕩)⊸↓)⌜s + i←<0 ⋄ q↩<1 + {s←0⋄p←{o←s⋄s+↩𝕩⋄o}⌜𝕩 ⋄ j←↕s ⋄ i↩(j⊢⌜i)+(j-𝕩/p)×⌜q ⋄ q×⌜˜↩𝕩/𝕩}⌜l + i(0<≠t)◶⟨⊑⟜⥊¨,{ti←t⥊↕tp←×´t⋄((tp×𝕨)+⌜ti)⊑⟜⥊¨𝕩⊣⌜ti}⟩(⌽l)/𝕩 }⍟(0<≠∘⥊) ∾ ↩ Join ⊘ ∾ -- cgit v1.2.3