Add project-euler.151

db4
Eric Mertens 2008-04-22 01:44:50 -07:00
parent f9659ecc7c
commit 916ed96ffb
1 changed files with 40 additions and 0 deletions

View File

@ -0,0 +1,40 @@
! Copyright (c) 2008 Eric Mertens
! See http://factorcode.org/license.txt for BSD license.
USING: sequences combinators kernel sequences.lib math assocs namespaces ;
IN: project-euler.151
SYMBOL: table
: (pick-sheet) ( seq i -- newseq )
[
<=> sgn
{
{ -1 [ ] }
{ 0 [ 1- ] }
{ 1 [ 1+ ] }
} case
] curry map-index ;
DEFER: (euler151)
: pick-sheet ( seq i -- res )
2dup swap nth dup zero? [
3drop 0
] [
[ (pick-sheet) (euler151) ] dip *
] if ;
: (euler151) ( x -- y )
table get [ {
{ { 0 0 0 1 } [ 0 ] }
{ { 0 0 1 0 } [ { 0 0 0 1 } (euler151) 1+ ] }
{ { 0 1 0 0 } [ { 0 0 1 1 } (euler151) 1+ ] }
{ { 1 0 0 0 } [ { 0 1 1 1 } (euler151) 1+ ] }
[ [ dup length [ pick-sheet ] with map sum ] [ sum ] bi / ]
} case ] cache ;
: euler151 ( -- n )
[
H{ } clone table set
{ 1 1 1 1 } (euler151)
] with-scope ;