]> gitweb.factorcode.org Git - factor.git/blob - extra/anagrams/anagrams.factor
anagrams: removing unix platform restriction
[factor.git] / extra / anagrams / anagrams.factor
1 ! Copyright (C) 2010 John Benediktsson
2 ! See https://factorcode.org/license.txt for BSD license
3
4 USING: ascii assocs io.encodings.ascii io.files kernel math
5 sequences sequences.extras sets sorting system ;
6 IN: anagrams
7
8 : make-anagram-hash ( strings -- assoc )
9     [ sort ] collect-by
10     [ members ] assoc-map
11     [ length 1 > ] filter-values ;
12
13 HOOK: dict-words os ( -- seq )
14
15 M: unix dict-words
16     "/usr/share/dict/words" ascii file-lines [ >lower ] map ;
17
18 MEMO: dict-anagrams ( -- assoc )
19     dict-words make-anagram-hash ;
20
21 : anagrams ( str -- seq/f )
22     >lower sort dict-anagrams at ;
23
24 : most-anagrams ( -- seq )
25     dict-anagrams values all-longest ;
26
27 : longest-anagrams ( -- seq )
28     dict-anagrams [ keys all-longest ] keep '[ _ at ] map ;