--- /dev/null
+! Copyright (C) 2010 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+
+USING: arrays ascii assocs fry io.encodings.ascii io.files
+kernel math math.order memoize sequences sorting ;
+
+IN: anagrams
+
+: (all-anagrams) ( seq assoc -- )
+ '[ dup natural-sort _ push-at ] each ;
+
+: all-anagrams ( seq -- assoc )
+ H{ } clone [ (all-anagrams) ] keep
+ [ nip length 1 > ] assoc-filter ;
+
+MEMO: dict-words ( -- seq )
+ "/usr/share/dict/words" ascii file-lines [ >lower ] map ;
+
+MEMO: dict-anagrams ( -- assoc )
+ dict-words all-anagrams ;
+
+: anagrams ( str -- seq/f )
+ >lower natural-sort dict-anagrams at ;
+
+: longest ( seq -- subseq )
+ dup 0 [ length max ] reduce '[ length _ = ] filter ;
+
+: most-anagrams ( -- seq )
+ dict-anagrams values longest ;
+
+: longest-anagrams ( -- seq )
+ dict-anagrams [ keys longest ] keep '[ _ at ] map ;
+
+
+