project-euler.186: simpler with if instead of 2unless?.
Not sure why I'm still working on this.windows-high-dpi
parent
3023f42aa4
commit
9610a49881
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue