Cleanup PE solutions and formatting
parent
b44bc33d1b
commit
7898a9252d
|
@ -1,5 +1,5 @@
|
|||
USING: project-euler.203 tools.test ;
|
||||
USING: project-euler.203 project-euler.203.private tools.test ;
|
||||
IN: project-euler.203.tests
|
||||
|
||||
[ 105 ] [ 8 solve ] unit-test
|
||||
[ 34029210557338 ] [ 51 solve ] unit-test
|
||||
[ 34029210557338 ] [ euler203 ] unit-test
|
||||
|
|
|
@ -1,9 +1,64 @@
|
|||
! Copyright (c) 2008 Eric Mertens.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: fry kernel math math.primes.factors sequences sets ;
|
||||
IN: project-euler.203
|
||||
|
||||
: iterate ( n initial quot -- results ) swapd '[ @ dup ] replicate nip ; inline
|
||||
: (generate) ( seq -- seq ) [ 0 prefix ] [ 0 suffix ] bi [ + ] 2map ;
|
||||
: generate ( n -- seq ) 1- { 1 } [ (generate) ] iterate concat prune ;
|
||||
: squarefree ( n -- ? ) factors duplicates empty? ;
|
||||
: solve ( n -- n ) generate [ squarefree ] filter sum ;
|
||||
: euler203 ( -- n ) 51 solve ;
|
||||
! http://projecteuler.net/index.php?section=problems&id=203
|
||||
|
||||
! DESCRIPTION
|
||||
! -----------
|
||||
|
||||
! The binomial coefficients nCk can be arranged in triangular form, Pascal's
|
||||
! triangle, like this:
|
||||
|
||||
! 1
|
||||
! 1 1
|
||||
! 1 2 1
|
||||
! 1 3 3 1
|
||||
! 1 4 6 4 1
|
||||
! 1 5 10 10 5 1
|
||||
! 1 6 15 20 15 6 1
|
||||
! 1 7 21 35 35 21 7 1
|
||||
! .........
|
||||
|
||||
! It can be seen that the first eight rows of Pascal's triangle contain twelve
|
||||
! distinct numbers: 1, 2, 3, 4, 5, 6, 7, 10, 15, 20, 21 and 35.
|
||||
|
||||
! A positive integer n is called squarefree if no square of a prime divides n.
|
||||
! Of the twelve distinct numbers in the first eight rows of Pascal's triangle,
|
||||
! all except 4 and 20 are squarefree. The sum of the distinct squarefree numbers
|
||||
! in the first eight rows is 105.
|
||||
|
||||
! Find the sum of the distinct squarefree numbers in the first 51 rows of
|
||||
! Pascal's triangle.
|
||||
|
||||
|
||||
! SOLUTION
|
||||
! --------
|
||||
|
||||
<PRIVATE
|
||||
|
||||
: iterate ( n initial quot -- results )
|
||||
swapd '[ @ dup ] replicate nip ; inline
|
||||
|
||||
: (generate) ( seq -- seq )
|
||||
[ 0 prefix ] [ 0 suffix ] bi [ + ] 2map ;
|
||||
|
||||
: generate ( n -- seq )
|
||||
1- { 1 } [ (generate) ] iterate concat prune ;
|
||||
|
||||
: squarefree ( n -- ? )
|
||||
factors all-unique? ;
|
||||
|
||||
: solve ( n -- n )
|
||||
generate [ squarefree ] filter sum ;
|
||||
|
||||
PRIVATE>
|
||||
|
||||
: euler203 ( -- n )
|
||||
51 solve ;
|
||||
|
||||
! [ euler203 ] 100 ave-time
|
||||
! 12 ms ave run time - 1.6 SD (100 trials)
|
||||
|
||||
MAIN: euler203
|
||||
|
|
|
@ -9,7 +9,7 @@ IN: project-euler.215
|
|||
! -----------
|
||||
|
||||
! Consider the problem of building a wall out of 2x1 and 3x1 bricks
|
||||
! (horizontalvertical dimensions) such that, for extra strength, the gaps
|
||||
! (horizontal x vertical dimensions) such that, for extra strength, the gaps
|
||||
! between horizontally-adjacent bricks never line up in consecutive layers,
|
||||
! i.e. never form a "running crack".
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ USING: definitions io io.files kernel math math.parser
|
|||
project-euler.097 project-euler.100 project-euler.116 project-euler.117
|
||||
project-euler.134 project-euler.148 project-euler.150 project-euler.151
|
||||
project-euler.164 project-euler.169 project-euler.173 project-euler.175
|
||||
project-euler.186 project-euler.190 project-euler.215 ;
|
||||
project-euler.186 project-euler.190 project-euler.203 project-euler.215 ;
|
||||
IN: project-euler
|
||||
|
||||
<PRIVATE
|
||||
|
|
Loading…
Reference in New Issue