From 33cae784fb9fb861e0676b5d8a158297b64dbeed Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Fri, 19 Aug 2011 13:16:03 -0700 Subject: [PATCH] anagrams: words for finding anagrams. --- extra/anagrams/anagrams.factor | 35 ++++++++++++++++++++++++++++++++++ extra/anagrams/authors.txt | 1 + extra/anagrams/platforms.txt | 1 + 3 files changed, 37 insertions(+) create mode 100644 extra/anagrams/anagrams.factor create mode 100644 extra/anagrams/authors.txt create mode 100644 extra/anagrams/platforms.txt diff --git a/extra/anagrams/anagrams.factor b/extra/anagrams/anagrams.factor new file mode 100644 index 0000000000..f5f87af98a --- /dev/null +++ b/extra/anagrams/anagrams.factor @@ -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 ; + + + diff --git a/extra/anagrams/authors.txt b/extra/anagrams/authors.txt new file mode 100644 index 0000000000..e091bb8164 --- /dev/null +++ b/extra/anagrams/authors.txt @@ -0,0 +1 @@ +John Benediktsson diff --git a/extra/anagrams/platforms.txt b/extra/anagrams/platforms.txt new file mode 100644 index 0000000000..509143d863 --- /dev/null +++ b/extra/anagrams/platforms.txt @@ -0,0 +1 @@ +unix