apl: primes sieve (2=+⌿0=A∘.|A)/A←⍳N + apl-compress (+11 tests, 280/280)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 1m6s

This commit is contained in:
2026-05-07 04:07:09 +00:00
parent ec26b61cbe
commit ed0853f4a0
8 changed files with 112 additions and 6 deletions

View File

@@ -796,6 +796,34 @@
((result (filter (fn (x) (not (index-of b-ravel x))) a-ravel)))
(make-array (list (len result)) result)))))
(define
apl-compress
(fn
(mask arr)
(let
((mask-ravel (get mask :ravel)) (arr-ravel (get arr :ravel)))
(let
((kept (filter (fn (i) (not (= 0 (nth mask-ravel i)))) (range 0 (len arr-ravel)))))
(let
((picked (map (fn (i) (nth arr-ravel i)) kept)))
(make-array (list (len picked)) picked))))))
(define
apl-primes
(fn
(n)
(let
((a (apl-iota (apl-scalar n))))
(let
((mod-table (apl-outer apl-mod a a)))
(let
((zero-mask (apl-eq (apl-scalar 0) mod-table)))
(let
((divisor-counts (apl-reduce-first apl-add zero-mask)))
(let
((prime-mask (apl-eq (apl-scalar 2) divisor-counts)))
(apl-compress prime-mask a))))))))
(define
apl-reduce
(fn