Cleanup formatting of Project Euler problem 215

db4
Aaron Schaefer 2008-11-10 23:26:38 -05:00
parent 05d991ab74
commit 8e155a8306
3 changed files with 43 additions and 7 deletions

View File

@ -1,4 +1,4 @@
USING: project-euler.215 tools.test ; USING: project-euler.215 project-euler.215.private tools.test ;
IN: project-euler.215.tests IN: project-euler.215.tests
[ 8 ] [ 9 3 solve ] unit-test [ 8 ] [ 9 3 solve ] unit-test

View File

@ -1,6 +1,33 @@
! Copyright (c) 2008 Eric Mertens.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors kernel locals math ; USING: accessors kernel locals math ;
IN: project-euler.215 IN: project-euler.215
! http://projecteuler.net/index.php?section=problems&id=215
! DESCRIPTION
! -----------
! Consider the problem of building a wall out of 2x1 and 3x1 bricks
! (horizontalvertical 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".
! For example, the following 93 wall is not acceptable due to the running crack
! shown in red:
! See problem site for image...
! There are eight ways of forming a crack-free 9x3 wall, written W(9,3) = 8.
! Calculate W(32,10).
! SOLUTION
! --------
<PRIVATE
TUPLE: block two three ; TUPLE: block two three ;
TUPLE: end { ways integer } ; TUPLE: end { ways integer } ;
@ -11,7 +38,8 @@ C: <end> end
: failure? ( t -- ? ) ways>> 0 = ; inline : failure? ( t -- ? ) ways>> 0 = ; inline
: choice ( t p q -- t t ) [ [ two>> ] [ three>> ] bi ] 2dip bi* ; inline : choice ( t p q -- t t )
[ [ two>> ] [ three>> ] bi ] 2dip bi* ; inline
GENERIC: merge ( t t -- t ) GENERIC: merge ( t t -- t )
GENERIC# block-merge 1 ( t t -- t ) GENERIC# block-merge 1 ( t t -- t )
@ -43,14 +71,22 @@ M: end h2 dup failure? [ <failure> <block> ] unless ;
: next-row ( t -- t ) [ h-1 ] [ h1 ] choice swap <block> ; : next-row ( t -- t ) [ h-1 ] [ h1 ] choice swap <block> ;
: first-row ( n -- t ) : first-row ( n -- t )
[ <failure> <success> <failure> ] dip [ <failure> <success> <failure> ] dip
1- [| a b c | b c <block> a b ] times 2drop ; 1- [| a b c | b c <block> a b ] times 2drop ;
GENERIC: total ( t -- n ) GENERIC: total ( t -- n )
M: block total [ total ] dup choice + ; M: block total [ total ] dup choice + ;
M: end total ways>> ; M: end total ways>> ;
: solve ( width height -- ways ) : solve ( width height -- ways )
[ first-row ] dip 1- [ next-row ] times total ; [ first-row ] dip 1- [ next-row ] times total ;
: euler215 ( -- ways ) 32 10 solve ; PRIVATE>
: euler215 ( -- answer )
32 10 solve ;
! [ euler215 ] 100 ave-time
! 208 ms ave run time - 9.06 SD (100 trials)
MAIN: euler215

View File

@ -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.097 project-euler.100 project-euler.116 project-euler.117
project-euler.134 project-euler.148 project-euler.150 project-euler.151 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.164 project-euler.169 project-euler.173 project-euler.175
project-euler.186 project-euler.190 ; project-euler.186 project-euler.190 project-euler.215 ;
IN: project-euler IN: project-euler
<PRIVATE <PRIVATE