anagrams: words for finding anagrams.
parent
0227ff8dc4
commit
33cae784fb
|
@ -0,0 +1,35 @@
|
||||||
|
! 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 ;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
John Benediktsson
|
|
@ -0,0 +1 @@
|
||||||
|
unix
|
Loading…
Reference in New Issue