...and I just accidentally clicked the button a second time and overwrote the file, so I have to let it run a few hours again to generate the primes again. :-/
On Thu, Nov 12, 2015 at 1:26 AM, Geoff Canyon <gcan...@gmail.com> wrote: > I re-wrote the algorithm a bit to tweak for speed, then ran it > successfully for primes up to 3 billion (a couple hours), and got the wrong > answer because my big addition function was broken :-/ > > So I broke the problem in two: first generate the list of primes, then do > the addition. > > For the primes I generated the list up to 100,000, stored that, and then > used a simpler (by one command) routine to generate the primes to 10 > billion in a few hours. Here's that: > > on mouseUp > put the long seconds into ST > repeat for each line i in line 2 to -1 of the primeList of this stack > put 2*i & comma after P[i^2] > end repeat > put 2 into pList > put fld "path" into fPath > open file fPath for write > put 0 into S > put fld 1 into endPoint > if endPoint mod 2 = 0 then subtract 1 from endPoint > repeat with i = 3 to endPoint step 2 > if P[i] is empty then > put cr & i after pList > else > repeat for each item x in P[i] > put x & comma after P[i + x] > end repeat > end if > if the seconds > S then > put the seconds + 5 into S > put i into fld 2 > write pList to file fPath > put empty into pList > unlock screen > lock screen > end if > delete variable P[i] > end repeat > put i into fld 2 > write pList to file fPath > close file fPath > put the long seconds - ST > end mouseUp > > That's ~5gb of primes... > > Then I re-wrote the addition function to use a simpler, slower method, > tested it, and let it go. An hour or so later, and I had my answer > (validated against the site with the challenge). If anyone sees the problem > with bAdd, I'm all ears. I didn't look too closely, since I just wanted to > get the code running to solve the problem. It works for all the test cases > I tried, but it seems to fail on the boundary between 14 and 15 digit > numbers. > > > on mouseUp > put fld "path" into fPath > open file fPath for read > put 0 into T > put 0 into S > repeat with C = 1 to 999999999999 > read from file fPath for 1 line > if it > fld 1 then exit repeat > put bAdd2(T,char 1 to -2 of it) into T > if the seconds > S then > put the seconds + 1 into S > put T && it && C into fld 2 > unlock screen > lock screen > end if > end repeat > put T && it && C - 1 into fld 2 > close file fPath > end mouseUp > > function bAdd x,y > put 0 into c > repeat with i = 14 to max(length(x),length(y)) step 14 > add char -i to 13 - i of x + char -i to 13 - i of y to c > put char -14 to -1 of c before r > delete char -14 to -1 of c > end repeat > return c & r > end bAdd > > function bAdd2 x,y > put 0 into c > repeat with i = 1 to max(length(x),length(y)) > put char -i of x + char -i of y + c into c > put char -1 of c before r > delete char -1 of c > end repeat > return c & r > end bAdd2 > _______________________________________________ use-livecode mailing list use-livecode@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode