Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 24s
collatz, palindrome, maybe, fizzbuzz, anagram, roman, binary, either, primes, zipwith, matrix, wordcount, powers — all 18/18 programs green. conformance.sh PROGRAMS array updated; scoreboard.md regenerated. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
85 lines
2.2 KiB
Plaintext
85 lines
2.2 KiB
Plaintext
;; matrix.hs — transpose and 2D list operations.
|
|
|
|
(define
|
|
hk-prog-val
|
|
(fn
|
|
(src name)
|
|
(hk-deep-force (get (hk-eval-program (hk-core src)) name))))
|
|
|
|
(define
|
|
hk-as-list
|
|
(fn
|
|
(xs)
|
|
(cond
|
|
((and (list? xs) (= (first xs) "[]")) (list))
|
|
((and (list? xs) (= (first xs) ":"))
|
|
(cons (nth xs 1) (hk-as-list (nth xs 2))))
|
|
(:else xs))))
|
|
|
|
(define
|
|
hk-mat-src
|
|
"transpose [] = []\ntranspose ([] : _) = []\ntranspose xss = map head xss : transpose (map tail xss)\n\nmatAdd xss yss = zipWith (zipWith (+)) xss yss\n\ndiagonal [] = []\ndiagonal xss = head (head xss) : diagonal (map tail (tail xss))\n\nrowSum = map sum\ncolSum xss = map sum (transpose xss)\n")
|
|
|
|
(hk-test
|
|
"transpose 2x2"
|
|
(hk-deep-force
|
|
(hk-prog-val (str hk-mat-src "r = transpose [[1,2],[3,4]]\n") "r"))
|
|
(list
|
|
":"
|
|
(list ":" 1 (list ":" 3 (list "[]")))
|
|
(list ":" (list ":" 2 (list ":" 4 (list "[]"))) (list "[]"))))
|
|
|
|
(hk-test
|
|
"transpose 1x3"
|
|
(hk-deep-force
|
|
(hk-prog-val (str hk-mat-src "r = transpose [[1,2,3]]\n") "r"))
|
|
(list
|
|
":"
|
|
(list ":" 1 (list "[]"))
|
|
(list
|
|
":"
|
|
(list ":" 2 (list "[]"))
|
|
(list ":" (list ":" 3 (list "[]")) (list "[]")))))
|
|
|
|
(hk-test
|
|
"transpose empty = []"
|
|
(hk-as-list (hk-prog-val (str hk-mat-src "r = transpose []\n") "r"))
|
|
(list))
|
|
|
|
(hk-test
|
|
"rowSum [[1,2],[3,4]] = [3,7]"
|
|
(hk-as-list (hk-prog-val (str hk-mat-src "r = rowSum [[1,2],[3,4]]\n") "r"))
|
|
(list 3 7))
|
|
|
|
(hk-test
|
|
"colSum [[1,2],[3,4]] = [4,6]"
|
|
(hk-as-list (hk-prog-val (str hk-mat-src "r = colSum [[1,2],[3,4]]\n") "r"))
|
|
(list 4 6))
|
|
|
|
(hk-test
|
|
"matAdd [[1,2],[3,4]] [[5,6],[7,8]] = [[6,8],[10,12]]"
|
|
(hk-deep-force
|
|
(hk-prog-val
|
|
(str hk-mat-src "r = matAdd [[1,2],[3,4]] [[5,6],[7,8]]\n")
|
|
"r"))
|
|
(list
|
|
":"
|
|
(list ":" 6 (list ":" 8 (list "[]")))
|
|
(list ":" (list ":" 10 (list ":" 12 (list "[]"))) (list "[]"))))
|
|
|
|
(hk-test
|
|
"diagonal [[1,2],[3,4]] = [1,4]"
|
|
(hk-as-list
|
|
(hk-prog-val (str hk-mat-src "r = diagonal [[1,2],[3,4]]\n") "r"))
|
|
(list 1 4))
|
|
|
|
(hk-test
|
|
"diagonal 3x3"
|
|
(hk-as-list
|
|
(hk-prog-val
|
|
(str hk-mat-src "r = diagonal [[1,2,3],[4,5,6],[7,8,9]]\n")
|
|
"r"))
|
|
(list 1 5 9))
|
|
|
|
{:fails hk-test-fails :pass hk-test-pass :fail hk-test-fail}
|