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
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 1m6s
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user