]> gitweb.factorcode.org Git - factor.git/commitdiff
anagrams: words for finding anagrams.
authorJohn Benediktsson <mrjbq7@gmail.com>
Fri, 19 Aug 2011 20:16:03 +0000 (13:16 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Fri, 19 Aug 2011 20:16:03 +0000 (13:16 -0700)
extra/anagrams/anagrams.factor [new file with mode: 0644]
extra/anagrams/authors.txt [new file with mode: 0644]
extra/anagrams/platforms.txt [new file with mode: 0644]

diff --git a/extra/anagrams/anagrams.factor b/extra/anagrams/anagrams.factor
new file mode 100644 (file)
index 0000000..f5f87af
--- /dev/null
@@ -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 (file)
index 0000000..e091bb8
--- /dev/null
@@ -0,0 +1 @@
+John Benediktsson
diff --git a/extra/anagrams/platforms.txt b/extra/anagrams/platforms.txt
new file mode 100644 (file)
index 0000000..509143d
--- /dev/null
@@ -0,0 +1 @@
+unix