Files
rose-ash/lib/haskell/tests/program-anagram.sx
giles 09d65d2d7b
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 24s
haskell: 13 new program suites + scoreboard 156/156 (775 tests)
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>
2026-05-06 17:02:02 +00:00

71 lines
1.7 KiB
Plaintext

;; anagram.hs — anagram detection using sort.
(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-ana-src
"isAnagram xs ys = sort xs == sort ys\n\nhasAnagram needle haystack = any (isAnagram needle) haystack\n")
(hk-test
"isAnagram [1,2,3] [3,2,1] True"
(hk-prog-val (str hk-ana-src "r = isAnagram [1,2,3] [3,2,1]\n") "r")
(list "True"))
(hk-test
"isAnagram [1,2,3] [1,2,4] False"
(hk-prog-val (str hk-ana-src "r = isAnagram [1,2,3] [1,2,4]\n") "r")
(list "False"))
(hk-test
"isAnagram [] [] True"
(hk-prog-val (str hk-ana-src "r = isAnagram [] []\n") "r")
(list "True"))
(hk-test
"isAnagram [1] [1] True"
(hk-prog-val (str hk-ana-src "r = isAnagram [1] [1]\n") "r")
(list "True"))
(hk-test
"isAnagram [1,2] [2,1] True"
(hk-prog-val (str hk-ana-src "r = isAnagram [1,2] [2,1]\n") "r")
(list "True"))
(hk-test
"isAnagram [1,1,2] [2,1,1] True"
(hk-prog-val (str hk-ana-src "r = isAnagram [1,1,2] [2,1,1]\n") "r")
(list "True"))
(hk-test
"isAnagram [1,2] [1,2,3] False"
(hk-prog-val (str hk-ana-src "r = isAnagram [1,2] [1,2,3]\n") "r")
(list "False"))
(hk-test
"hasAnagram [1,2] [[3,4],[2,1],[5,6]] True"
(hk-prog-val
(str hk-ana-src "r = hasAnagram [1,2] [[3,4],[2,1],[5,6]]\n")
"r")
(list "True"))
(hk-test
"hasAnagram [1,2] [[3,4],[5,6]] False"
(hk-prog-val (str hk-ana-src "r = hasAnagram [1,2] [[3,4],[5,6]]\n") "r")
(list "False"))
{:fails hk-test-fails :pass hk-test-pass :fail hk-test-fail}