project-euler.186: simpler with if instead of 2unless?.

Not sure why I'm still working on this.
windows-high-dpi
John Benediktsson 2018-02-14 19:46:26 -08:00
parent 3023f42aa4
commit 9610a49881
1 changed files with 7 additions and 9 deletions

View File

@ -47,16 +47,14 @@ IN: project-euler.186
: next ( lag -- n )
[ [ first dup ] [ 31 swap nth ] bi + 1000000 rem ] keep circular-push ;
: 2unless? ( x y ?quot quot -- )
[ 2keep rot [ 2drop ] ] dip if ; inline
: (p186) ( generator counter unionfind -- counter )
: (euler186) ( generator counter unionfind -- counter )
524287 over equiv-set-size 990000 < [
pick [ next ] [ next ] bi
[ = ] [
pick equate
[ 1 + ] dip
] 2unless? (p186)
2dup = [
2drop
] [
pick equate [ 1 + ] dip
] if (euler186)
] [
drop nip
] if ;
@ -65,7 +63,7 @@ IN: project-euler.186
<iota> <disjoint-set> [ [ add-atom ] curry each ] keep ;
: euler186 ( -- n )
<generator> 0 1000000 <relation> (p186) ;
<generator> 0 1000000 <relation> (euler186) ;
! [ euler186 ] 10 ave-time
! 18572 ms ave run time - 796.87 SD (10 trials)