There is a break() function. Does it not do the job? -Don
-- Don MacQueen Lawrence Livermore National Laboratory 7000 East Ave., L-627 Livermore, CA 94550 925-423-1062 On 12/19/12 7:27 AM, "McCloskey, Bryan" <bmcclos...@usgs.gov> wrote: >Something like this? > >n<-1000 >pythag<-function(n){ > for(i in 3:((n-3)/3)) > for(j in (i+1):((n-i)/2)) > if(i^2+j^2==(n-i-j)^2) return(i*j*(n-i-j)) >} >system.time(print(pythag(n))) > >Interesting -- seems to improve speed by ~12%. Not sure if that's >because stop() has more overhead, or if functions are innately faster >somehow. Still seems like there should be a way to break out of nested >loops, though... > >-b > >On Tue, Dec 18, 2012 at 4:50 PM, Duncan Murdoch ><murdoch.dun...@gmail.com> wrote: >> On 12-12-18 1:02 PM, McCloskey, Bryan wrote: >>> >>> Hey all, >>> >>> I'm currently working through the problems at Project Euler -- this >>> question came up while working on Problem 9 >>> (http://projecteuler.net/problem=9): >>> >>> "A Pythagorean triplet is a set of three natural numbers, a < b < c, >>> for which, a^2 + b^2 = c^2. For example, 3^2 + 4^2 = 9 + 16 = 25 = >>> 5^2. There exists exactly one Pythagorean triplet for which a + b + c >>> = 1000. Find the product abc." >>> >>> Not too hard: >>> >>> n=1000 >>> for(i in 1:floor(n/3)) >>> for(j in (i+1):floor(n/2-i/2)) >>> if(i^2+j^2==(n-i-j)^2) {print(i*j*(n-i-j)); stop()} >>> >>> I could just let the for loops finish looping after it finds the >>> answer, and it would still run in under a second, but the goal of >>> Project Euler is sort of to see how efficiently (and quickly) you can >>> solve these problems, so in that spirit I would like to break out of >>> the for loops early once the answer is found -- hence the call to >>> stop(). However, this seems "improper", as it throws up an error. Is >>> there a way to exit out of both for loops with a call to "break" or >>> similar that would not throw errors (or is it fine the way I've coded >>> it)? (I realize I could put an "if(i^2+j^2==(n-i-j)^2) break" >>> statement in the outer loop, but again that's inefficient, as it's >>> checking that conditional hundreds of times.) >>> >>> So is there a way to "cleanly" break out of multiple loops? >> >> >> Put them in a function, and return from the function. >> >> Duncan Murdoch >> > >______________________________________________ >R-help@r-project.org mailing list >https://stat.ethz.ch/mailman/listinfo/r-help >PLEASE do read the posting guide >http://www.R-project.org/posting-guide.html >and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.