! Copyright (c) 2007 Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license.
-USING: combinators.lib io io.files kernel math math.parser namespaces sequences
- sorting splitting strings system vocabs ;
+USING: ascii io.encodings.ascii io.files kernel math project-euler.common
+ sequences sorting splitting ;
IN: project-euler.022
! http://projecteuler.net/index.php?section=problems&id=22
<PRIVATE
-: (source-022) ( -- path )
- [
- "project-euler.022" vocab-root ?resource-path %
- os "windows" = [
- "\\project-euler\\022\\names.txt" %
- ] [
- "/project-euler/022/names.txt" %
- ] if
- ] "" make ;
-
: source-022 ( -- seq )
- (source-022) file-contents [ quotable? ] subset "," split ;
-
-: alpha-value ( str -- n )
- string>digits [ 9 - ] sigma ;
+ "resource:extra/project-euler/022/names.txt"
+ ascii file-contents [ quotable? ] filter "," split ;
: name-scores ( seq -- seq )
- dup length [ 1+ swap alpha-value * ] 2map ;
+ [ 1 + swap alpha-value * ] map-index ;
PRIVATE>
source-022 natural-sort name-scores sum ;
! [ euler022 ] 100 ave-time
-! 59 ms run / 1 ms GC ave time - 100 trials
-
-! source-022 [ natural-sort name-scores sum ] curry 100 ave-time
-! 45 ms run / 1 ms GC ave time - 100 trials
+! 74 ms ave run time - 5.13 SD (100 trials)
-MAIN: euler022
+SOLUTION: euler022