Flash Flash Revolution: Community Forums

Flash Flash Revolution: Community Forums (http://www.flashflashrevolution.com/vbz/index.php)
-   Technology (http://www.flashflashrevolution.com/vbz/forumdisplay.php?f=74)
-   -   The Project Euler thread (http://www.flashflashrevolution.com/vbz/showthread.php?t=120818)

Reincarnate 06-4-2014 12:16 PM

Re: The Project Euler thread
 
A little extra time preplanning goes a long way

For 35 you just need a simple sieve and a short rotator method

kaiten123 06-4-2014 12:16 PM

Re: The Project Euler thread
 
one thing you could do is keep anything you do more than once in its own method/function/etc. so you only write code once per program.
an extention of that is to have a library of common functions so you dont need to rewrite them. like one for generating primes and so on so you can just reuse it for many problems.

still,100 lines seems pretty excessive for that problem. what part is making it so long?
generating the primes should only take a few lines, rotating should only be a few lines, etc.

and lastly, theres usually multiple ways to solve a problem and the one that is fastest on paper might not be the fastest to code so you should keep coding time in mind while thinking of how to solve stuff.

Reincarnate 06-4-2014 05:07 PM

Re: The Project Euler thread
 
Here's a solution I just wrote for 35 in Python:


Code:

n = 10**6
isprime = [0,0]+[1 for i in range(n-1)]
for i in xrange(2,int(n**.5)+1):
    if isprime[i]==1:
        for j in xrange(i*i,n+1,i): isprime[j]=0
s=1
for i in xrange(3,n,2):
    if isprime[i]==1:
        if all(isprime[int(str(i)[r:] + str(i)[:r])]==1 for r in xrange(1,len(str(i)))):
            for r in xrange(len(str(i))):
                if isprime[int(str(i)[r:] + str(i)[:r])] == 1:
                    isprime[int(str(i)[r:] + str(i)[:r])]  = 0
                    s+=1
print s



This can be optimized further but my point is that the underlying logic is pretty straightforward and you can get a fast program without many lines of code (the above code runs in about half a second on my machine).

stargroup100 06-4-2014 08:24 PM

Re: The Project Euler thread
 
I'm using javascript atm. I'm not sure if that has any relevance but uh yeah. I do reuse a lot of my functions and stuff, and trust me when I say that I'm very familiar with basic concepts such as "fastest paper method might not be fastest to code"

it's not math or problem solving that's difficult for me. I can do more of these problems by hand than almost anyone else. I'm simply not super fluent in programming. a lot of complex algorithms are flying through my head all the time, but figuring out how to convert that into code is sometimes difficult

here's the main function I used to check for a circular prime (I use other functions but didn't post them)

Code:

        function check(num) {
                getdigits(num);
                var keepgoing = true;
                if (        (digits.indexOf(0) != -1) ||
                                (digits.indexOf(2) != -1) ||
                                (digits.indexOf(4) != -1) ||
                                (digits.indexOf(5) != -1) ||
                                (digits.indexOf(6) != -1) ||
                                (digits.indexOf(8) != -1)        ) keepgoing = false;
                if (keepgoing) {
                        var temparr = [num];
                        var commit = true;
                        for (var k = 0; k < digits.length; k++) {
                                rotatedigits();
                                var newnum = getnum();
                                if (temparr.indexOf(newnum) === -1) temparr.push(newnum);
                                if (primes.indexOf(newnum) === -1) {
                                        commit = false;
                                        break;
                                }
                        }
                        if (commit) {
                                for (var k = 0; k < temparr.length; k++) {
                                        circprimes[temparr[k]] = 1;
                                }
                                console.log('For ' + num + ', all digit rotations are prime: ' + temparr);
                                circcount = circcount + temparr.length;
                        }
                }
                digits = [];
        }
        for (var k = 4; k < primes.length; k++) {
                if (!circprimes[primes[k]]) check(primes[k]);
        }


leonid 06-4-2014 08:44 PM

Re: The Project Euler thread
 
I used PARI/GP only for dealing with really large primes (used C before I knew about PARI/GP)

Even though Ruby is a very slow language, it served me well enough for almost all the remaining problems I solved, and very rarely did my codes go above 20 lines


Some people on PE try to solve every problem using ASM but that's just stretching it too far

Here's my friend code if anyone wants to add me 7432696421787_8325ecaf1469afb6ad991ac1dacb210c

leonid 06-4-2014 11:38 PM

Re: The Project Euler thread
 


My code took 9 minutes :(

EDIT: Tried the same algo on PARI/GP and it took 3 seconds

Reincarnate 06-5-2014 12:20 AM

Re: The Project Euler thread
 
Thinking of making an extra dummy account and starting fresh, using none of my old libraries.

leonid: problem is much faster in something like C++

Edit: nvm ninja'd, PARI/GP is very fast too for that one apparently XD

stargroup100 06-5-2014 12:46 AM

Re: The Project Euler thread
 
PARI/GP is god

never underestimate PARI/GP

leonid 06-5-2014 12:55 AM

Re: The Project Euler thread
 
My only complaint is I can't use GP non-interactively.

So I have to write code somewhere else and copy/paste into the interactive shell. Also since every command is supposed to be 1 line, I need to put a \ at the end of each line, so my code becomes ugly

Actually I think I can get it to work somehow, brb..

leonid 06-5-2014 01:27 AM

Re: The Project Euler thread
 


cool

reuben_tate 06-5-2014 06:42 AM

Re: The Project Euler thread
 
Quote:

Originally Posted by Reincarnate (Post 4145954)
Thinking of making an extra dummy account and starting fresh, using none of my old libraries.

leonid: problem is much faster in something like C++

Edit: nvm ninja'd, PARI/GP is very fast too for that one apparently XD

I'm deciding to start fresh because I made my original account years ago; I never kept my code or notes or anything organized so it just became an unorganized mess.

I'm trying to learn a bit of Python at the moment, so that's what I've been coding in. However, at least from my viewpoint, Python is horrifically slow (one source whose credibility I did not check which I found interesting regarding programming languages vs speed: here). On the bright side, in the case that Python is slower than other programming languages I've used, this forces me to come up with more efficient algorithms.

Only did the first 15 for now:


New friend key:
Code:

95430157644057_56e54c547c0f732b3b941aec7177ce58

leonid 06-5-2014 07:47 AM

Re: The Project Euler thread
 


Really messy

Reincarnate 06-5-2014 08:11 AM

Re: The Project Euler thread
 
Reuben: even in Python, most problems can be done in under a second

leonid 06-5-2014 08:16 AM

Re: The Project Euler thread
 
I did this RSA problem by manual empirical pattern recognizing with lots of experiments, small examples, and blind guessworks

And then I saw the real way of solving it in the thread. I feel like I cheated through this, but I guess what I learned in this thread will help me on other problems
@Reincarnate Check my code in the thread if you want to see what I mean
http://projecteuler.net/thread=182&page=4#171693

Reincarnate 06-5-2014 08:59 AM

Re: The Project Euler thread
 
Quote:

Originally Posted by leonid (Post 4146067)
I did this RSA problem by manual empirical pattern recognizing with lots of experiments, small examples, and blind guessworks

And then I saw the real way of solving it in the thread. I feel like I cheated through this, but I guess what I learned in this thread will help me on other problems
@Reincarnate Check my code in the thread if you want to see what I mean
http://projecteuler.net/thread=182&page=4#171693

If it works, it works. May be worth going back and doing it the "right" way though (or at least reading the forum).

reuben_tate 06-5-2014 09:10 AM

Re: The Project Euler thread
 
Quote:

Originally Posted by Reincarnate (Post 4146065)
Reuben: even in Python, most problems can be done in under a second

Well, of course. I guess what I'm trying to get at is that if you use a language that is of magnitudes times faster than another, then you can get away with more "lazy" solutions with the faster programming language.

stargroup100 06-5-2014 09:17 AM

Re: The Project Euler thread
 
PARI/GP

seriously ALL HAIL PARI/GP

leonid 06-5-2014 09:53 AM

Re: The Project Euler thread
 


Had me stumped for a few minutes

leonid 06-5-2014 11:01 AM

Re: The Project Euler thread
 


I used Ruby this time because GP has no hash tables ?_?

leonid 06-5-2014 01:43 PM

Re: The Project Euler thread
 


fun


All times are GMT -5. The time now is 08:49 AM.

Powered by vBulletin® Version 3.8.1
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Copyright FlashFlashRevolution