aboutsummaryrefslogtreecommitdiff
path: root/dzref
diff options
context:
space:
mode:
Diffstat (limited to 'dzref')
-rwxr-xr-xdzref23
1 files changed, 14 insertions, 9 deletions
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 ⊘ ∾