]> gitweb.factorcode.org Git - factor.git/blobdiff - extra/project-euler/059/059.factor
factor: trim using lists
[factor.git] / extra / project-euler / 059 / 059.factor
index 63a8e3e2c4a288b271683c9fecd0a60dedaf2993..96323d7715b2013050ef80d9f28866d78e89cdcc 100644 (file)
@@ -1,8 +1,8 @@
 ! Copyright (c) 2008 Aaron Schaefer, Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: arrays ascii assocs hashtables io.encodings.ascii io.files kernel math
-    math.parser namespaces sequences sequences.lib sequences.private sorting
-    splitting grouping strings sets ;
+USING: accessors arrays ascii assocs grouping io.encodings.ascii
+io.files kernel make math math.parser project-euler.common
+sequences sequences.private sets sorting splitting ;
 IN: project-euler.059
 
 ! http://projecteuler.net/index.php?section=problems&id=59
@@ -53,16 +53,16 @@ IN: project-euler.059
 
 : source-059 ( -- seq )
     "resource:extra/project-euler/059/cipher1.txt"
-    ascii file-contents [ blank? ] right-trim "," split
+    ascii file-contents [ blank? ] trim-tail "," split
     [ string>number ] map ;
 
 TUPLE: rollover seq n ;
 
 C: <rollover> rollover
 
-M: rollover length rollover-n ;
+M: rollover length n>> ;
 
-M: rollover nth-unsafe rollover-seq [ length mod ] keep nth-unsafe ;
+M: rollover nth-unsafe seq>> [ length mod ] keep nth-unsafe ;
 
 INSTANCE: rollover immutable-sequence
 
@@ -70,12 +70,12 @@ INSTANCE: rollover immutable-sequence
     over length <rollover> swap [ bitxor ] 2map ;
 
 : frequency-analysis ( seq -- seq )
-    dup prune [
+    dup members [
         [ 2dup [ = ] curry count 2array , ] each
     ] { } make nip ; inline
 
 : most-frequent ( seq -- elt )
-    frequency-analysis sort-values keys peek ;
+    frequency-analysis sort-values keys last ;
 
 : crack-key ( seq key-length -- key )
     [ " " decrypt ] dip group but-last-slice
@@ -87,6 +87,6 @@ PRIVATE>
     source-059 dup 3 crack-key decrypt sum ;
 
 ! [ euler059 ] 100 ave-time
-! 13 ms run / 0 ms GC ave time - 100 trials
+! 8 ms ave run time - 1.4 SD (100 trials)
 
-MAIN: euler059
+SOLUTION: euler059