! 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 make sequences sequences.private sorting
- splitting grouping strings sets accessors project-euler.common ;
+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
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