;; (import (chicken string))
;; (import (chicken format))
(define (tally eq? xs)
(define (aux acc xs)
(if (null? xs)
acc
(let* ((k (car xs))
(v (alist-ref k acc eq?))
(a (alist-update k (+ 1 (or v 0)) acc eq?)))
(aux a (cdr xs)))))
(aux '() xs))
(define (filter f xs)
(reverse (foldl (lambda (acc x) (if (f x) (cons x acc) acc)) '() xs)))
(define f
(compose
(cut apply string-append <>)
(cut map car <>)
(cut filter (lambda (kv) (< 1 (cdr kv))) <>)
(cut tally equal? <>)
(cut string-chop <> 1)))
(define (g s)
(format #t "~A -> ~A~%" s (f s)))
(g "T")
(g "CG")
(g "ATA")
(g "CGGA")
(g "ATGAT")
(g "GTTGCA")
(g "CCCCGGG")
(g "ACTGCGAG")
(g "ATCAGAATA")
(g "TGCCATGACA")
OzsgKGltcG9ydCAoY2hpY2tlbiBzdHJpbmcpKQo7OyAoaW1wb3J0IChjaGlja2VuIGZvcm1hdCkpCihkZWZpbmUgKHRhbGx5IGVxPyB4cykKICAoZGVmaW5lIChhdXggYWNjIHhzKQogICAgKGlmIChudWxsPyB4cykKICAgICAgICBhY2MKICAgICAgICAobGV0KiAoKGsgKGNhciB4cykpCiAgICAgICAgICAgICAgICh2IChhbGlzdC1yZWYgayBhY2MgZXE/KSkKICAgICAgICAgICAgICAgKGEgKGFsaXN0LXVwZGF0ZSBrICgrIDEgKG9yIHYgMCkpIGFjYyBlcT8pKSkKICAgICAgICAgIChhdXggYSAoY2RyIHhzKSkpKSkKICAoYXV4ICcoKSB4cykpCihkZWZpbmUgKGZpbHRlciBmIHhzKQogIChyZXZlcnNlIChmb2xkbCAobGFtYmRhIChhY2MgeCkgKGlmIChmIHgpIChjb25zIHggYWNjKSBhY2MpKSAnKCkgeHMpKSkKKGRlZmluZSBmCiAgKGNvbXBvc2UKICAgKGN1dCBhcHBseSBzdHJpbmctYXBwZW5kIDw+KQogICAoY3V0IG1hcCBjYXIgPD4pCiAgIChjdXQgZmlsdGVyIChsYW1iZGEgKGt2KSAoPCAxIChjZHIga3YpKSkgPD4pCiAgIChjdXQgdGFsbHkgZXF1YWw/IDw+KQogICAoY3V0IHN0cmluZy1jaG9wIDw+IDEpKSkKKGRlZmluZSAoZyBzKQogIChmb3JtYXQgI3QgIn5BIC0+IH5BfiUiIHMgKGYgcykpKQooZyAiVCIpCihnICJDRyIpCihnICJBVEEiKQooZyAiQ0dHQSIpCihnICJBVEdBVCIpCihnICJHVFRHQ0EiKQooZyAiQ0NDQ0dHRyIpCihnICJBQ1RHQ0dBRyIpCihnICJBVENBR0FBVEEiKQooZyAiVEdDQ0FUR0FDQSIpCg==