You are viewing the historical archive of The Philosophy Forum.
For current discussions, visit the live forum.
Go to live forum

Fun Programming Quizzes

Agustino July 16, 2017 at 09:15 11900 views 42 comments
Okay, since I know several members are into programming, I thought about sharing a few resources that contain fun logical/mathematical problems to solve via programming.

This is a cool one (but it's a bit more advanced generally, so if you're entirely new to programming don't start here :P ) :
https://projecteuler.net/archives

And this one is more towards beginners, but it's fun - I've done most of the problems there, some of them a few times and in different ways (you can code it and try it out on the website itself - either Java or Python - this may be cool for you @Question) :
http://codingbat.com/python

Feel free to post questions, share problems, etc. here.

Comments (42)

Michael July 16, 2017 at 09:34 #87246
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.



$sum = 0;

for ($i = 1; $i < 1000; ++$i)
{

if (0 == $i % 3 || 0 == $i % 5)
{
$sum += $i;
}

}

echo $sum;


233,168.
Agustino July 16, 2017 at 09:59 #87251
Reply to Michael Yah that was quite an easy one :P . Mine in JS:


var total = 1000;
var sum = 0;
for (var i = 0; i < total; i++) {
sum += checkDivisibility(i);
}
console.log(sum);

function checkDivisibility(num){
if (num%5==0 || num%3==0) {
return num;
} else {
return num=0;
}
}


Although, I remember I didn't get the right answer the first time, because I thought I had to include 1000 in the calculation (so I used 1001 as total). Then I was very puzzled why I'm not getting the right answer >:O
Efram July 16, 2017 at 10:29 #87257
I've had quite a bit of fun with HackerRank in the past; it covers a good range of subjects and difficulty levels. I wrote about one of my solutions here.
VagabondSpectre July 16, 2017 at 19:07 #87377
Whiles and elses just to be different (this code is called "processing", which is a library of functions for javascript)...


int count= 1;
float sum = 0;


while (count<1000) {

if (count%5 ==0) {
sum+=count;
count+=1;
} else if (count%3 ==0) {
sum += count;
count+=1;
} else {
count+=1;
}
}
println(sum);



Agustino July 16, 2017 at 19:18 #87383
Quoting VagabondSpectre
processing

I've used it before - it's really good for creating things that involve geometry and graphics (both 2D and 3D). I've made a professional software with it for a client - and I also made a physics simulator with it for fun lol.

Quoting VagabondSpectre
library of functions for javascript)...

Java* :P
Agustino July 16, 2017 at 19:35 #87386
Btw for the web developers among you, which text editor do you use? Atom, Coda, Sublime, Textastic, Brackets or something else?
VagabondSpectre July 16, 2017 at 20:20 #87416
Quoting Agustino
I've used it before - it's really good for creating things that involve geometry and graphics. I've made a professional software with it for a client - and I also made a physics simulator with it for fun lol.


Right now I'm building a thermodynamics simulator as a learning project, it's coming along fairly nicely. You mentioned web development, have you used P5.js ? It's like processing but new and with CSS/DOM/HTML functionality so you can more easily structure page design. I use brackets for P5.js...

I completed a slightly more difficult problem:


By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.

What is the 10 001st prime number?


I would be very impressed if someone could get a solution in shorter code (although the run time is a bit high on this one)...

int primePosition =6;
float testPrime = 13;

while (primePosition < 10001) {
testPrime +=2;
for (int i = 2; i < testPrime/2; i++) {
if (testPrime%i == 0) {
break;
}
if (i == floor(testPrime/2)) {
primePosition +=1;
break;
}
}
}
println(testPrime);
println (primePosition);

Agustino July 16, 2017 at 20:32 #87422
Quoting VagabondSpectre
You mentioned web development, have you used P5.js ?

No never used it before! But I would imagine it's more useful for things like designing the front-end of games/applications rather than just website development. Looks pretty much like a Processing version for the web :P

Quoting VagabondSpectre
It's like processing but new and with CSS/DOM/HTML functionality so you can more easily structure page design. I use brackets for P5.js...

That's cool! I'm not very familiar with it, as you can see, haven't used it before.

Quoting VagabondSpectre
I would be very impressed if someone could get a solution in shorter code (although the run time is a bit high on this one)...

That's because you have two loops nested inside each other. That should preferably be avoided. I'm not a computer scientist so I don't understand the theory very precisely, but I do know that having loops nested increases run-time significantly.
VagabondSpectre July 16, 2017 at 20:49 #87428
Quoting Agustino
That's because you have two loops nested inside each other. That should preferably be avoided. I'm not a computer scientist so I don't understand the theory very precisely, but I do know that having loops nested increases run-time significantly.


Well, nested loops are the bread and butter of writing concise code!

Can you show me an example solution to that problem which does not use a nested loop?

Agustino July 16, 2017 at 20:51 #87430
Quoting VagabondSpectre
Right now I'm building a thermodynamics simulator as a learning project

The one I did was similar - I looked into Brownian motion.

Quoting VagabondSpectre
Can you show me an example solution to that problem which does not use a nested loop?

I will think about it, haven't solved that one yet. But I did say:
Quoting Agustino
That should preferably be avoided.

Of course there are some situations where this wouldn't be feasible.
Michael July 16, 2017 at 20:56 #87434
Reply to Agustino Sublime on Windows, Coda on Mac.
Agustino July 16, 2017 at 21:06 #87446
Quoting Michael
Coda on Mac.

Yeah Coda2 is my favourite on Mac. Atom is surprisingly good amongst the free ones though - better than the others I've tested.
SophistiCat July 16, 2017 at 21:36 #87460
Reply to VagabondSpectre I don't know about more concise; in practice, for problems like this efficiency is a lot more important. There are more efficient methods of calculating the n'th prime, but that is more of a mathematical problem than a programming one.

If you need to find the n'th prime for a large n, you would first calculate an approximate answer (there is a mathematical method for that), find the number of primes below that number (there are methods for that as well), and then zero in on the exact answer, perhaps using a more efficient primality test than your nested loop. That would most certainly be more lines of code than what you wrote though, and not something you could pull off on an interview, unless you really know this stuff.
VagabondSpectre July 16, 2017 at 21:55 #87473
Quoting Agustino
I will think about it, haven't solved that one yet. But I did say:

That should preferably be avoided. — Agustino

Of course there are some situations where this wouldn't be feasible.


I don't think there's anything inherently wrong with nested loops other than it carries the chance of iterating through index values which are redundant or need not be checked. If I stored each prime as I found it and used that data (along with other rules and exceptions) to rule out future testPrimes and indexes of the loop that checks it's factors, it could be made faster still.

Reply to SophistiCat

Creating a robust guess is really the rub of such a strategy. If you know you're in the ballpark of an Nth prime, and you check up and down from your guess value until you find a prime, then the closest prime to your guess should be your prime value.

But what if your estimation is low and the prime you're looking for happens to be the higher value of a mersennes pair? You would need to know exactly how many primes are below the prime you're looking for and whether or not your estimation is above or below the target prime. In other words you need to calculate or know the Nth-1 prime. Calculating higher primes from low known prime values needs to happen using a recursive/repeating algorithm not unlike the one I created, but it can be made much more efficient by adding exceptions to rule out bad testPrime and factor-index checks. As you say though, this requires much more actual code.

P.S: Is there really a way to know the number of primes below any integer without having to actually calculate or iterate through those primes? (I'm almost positive this is not the case, otherwise we could calculate primes of almost arbitrarily high N values by just picking a ridiculously high number, finding the number of primes beneath it, and then counting up until we hit a prime).
Agustino July 16, 2017 at 22:02 #87480
Quoting VagabondSpectre
I don't think there's anything inherently wrong with nested loops other than it carries the chance of iterating through index values which are redundant or need not be checked. If I stored each prime as I found it and used that data to rule out future testPrimes and indexes of the loop that checks it's factors, it could be made faster still.

Are you familiar with Big-O notations? Two loops inside each other would be O(n[sup]2[/sup]) as opposed to O(n) for a single loop if I'm not mistaken. Again I never studied computer science - I took courses on it - but never studied it properly (I have a degree in Civil Engineering), these are just some things I've picked up with regards to algorithms. Big-O is used to classify the time efficiency of an algorithm.
Agustino July 16, 2017 at 22:05 #87484
Reply to VagabondSpectre But if you think about it, it makes sense. For each value of loopOne, the whole of loopTwo needs to be completed. That's a lot more calculations than having, say, two independent loops.

Say I have two loops, each making n calculations, one inside the other. That would effectively be n[sup]2[/sup] calculations, because for each calculation in loopOne, there need to be n calculations in loopTwo. If I had two loops independently one after the other, then that would be 2n calculations. Generally if at all possible I tend to avoid loops (though this is rarely possible) - and I very much try to avoid nested loops where possible.
VagabondSpectre July 16, 2017 at 22:19 #87488
Quoting Agustino
But if you think about it, it makes sense. For each value of loopOne, the whole of loopTwo needs to be completed. That's a lot more calculations than having, say, two independent loops


If you need to actually hit all of those index values then dividing the work pf two nested loops into a single un-nested would just create a loop of proportionally exponential length. For instance, say I want to compare every value in one array to every value in another array. The nested version looks something like this:


int[] array1 = { 1, 2, 3, ..., n}
int[] array2 = { 1, 2, 3, ..., n}

for (int i=0; i for (int j = 0; j if (array1[i] == array2[j]) {
playGongNoise();
}
}
}


But the un-nested single loop version version would look like this:

int[] array1 = { 1, 2, 3, 4, ..., n}
int[] array2 = { 1, 2, 3, 4, ..., n}

for (int i=0; i if (array1[i] == array2[0]) {
playGongNoise();
}
if (array1[i] == array2[1]) {
playGongNoise();
}
if (array1[i] == array2[2]) {
playGongNoise();
}
if (array1[i] == array2[3]) {
playGongNoise();
}
...
...
if (array1[i] == array2[n-1]) {
playGongNoise();
}
}


You need to perform the same number of checks either way, so there is no loss or gain either way except to keep it concise...

Agustino July 16, 2017 at 22:19 #87489
Reply to VagabondSpectre Have a go at this one:
http://codingbat.com/prob/p191363

Solve it without any loops :P (your processing code should pretty much work fine for the purposes you need it inside the Java version there).
Agustino July 16, 2017 at 22:27 #87490
Quoting VagabondSpectre
You need to perform the same number of checks either way, so there is no loss or gain either way except to keep it concise...

The way you've written them that's true, there is no loss or gain. But there might be a better way to do what you're trying to do there (and that would be the way you avoid using nested loops). Arrays for example are just one data structure that you can use to hold your values. Depending what you want/need to do with the values, arrays may not be the best way to store the data... (for example - why do you want to compare every datapoint from one to every datapoint from the other? Are you looking for something? What's the goal in that comparison?) There's also binary trees, hashmaps, treemaps, stacks and more... You may just need a different type of data structure for your project. So you'll either use a library that already has the data structure you need, or you have to create it yourself.
andrewk July 16, 2017 at 22:53 #87495
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.

The array processing paradigm of R (and other, older languages like APL) allows for compact coding of such problems. Here's an R coding that spits out the answer:
sum((x<-1:1000)[x %% 3 ==0 | x %% 5 == 0)


The %% symbol is for the 'mod' operation and '|' means OR.
andrewk July 16, 2017 at 23:25 #87504
Reply to VagabondSpectre Throwing ALL consideration for efficiency out of the window, there is a more concise coding using recursion. Here it is in R:
(findprime<-function(x,n)
if (sum(x %% 1:x == 0)<3)
if (n>1) findprime(x+1,n-1) else
x else
findprime(x+1,n)
)(2,10001)

This is 101 non-blank characters, compared to 204 non-blank chars in the one above. Part, if not all, of that reduction comes from the fact that R does not require declaration of variables, and printout of the value of an expression is automatic, thereby removing the need for a print statement.

Depending on how the recursion is implemented, the code may generate a stack overflow. Mine worked OK for the 101st prime but complained about over-deep nesting in the search for the 1001st prime.

If I could remember LISP I'd try to write it in that, as that enables concise recursive expression.
VagabondSpectre July 16, 2017 at 23:41 #87508
Reply to Agustino Here is the best I can do in short time and without loops!


public int makeChocolate(int small, int big, int goal) {
int remainder = goal%5;

if (goal > big*5+small || big*5 < goal - small || remainder > small) {
return -1;
}
if (big*5 < goal) {
return goal-big*5;
}
return remainder;
}

VagabondSpectre July 16, 2017 at 23:42 #87509
Reply to andrewk

The examples of code you gave are both sexy and terrifying. I think programmers moved way from languages like these because they can be harder to read at a glance compared to higher level languages (although I can definitely appreciate short and well organized code). FORTH was the first programming language I ever got into, which is a very low level language which can build very specific and concise/efficient programs...

noAxioms July 17, 2017 at 00:42 #87534

int makeChocolate(int small, int big, int goal) {
if (goal < big*5)
big = goal / 5;
goal -= big * 5;
return goal > small ? -1 : goal;
}


C code. Only two conditionals, not four.
VagabondSpectre July 17, 2017 at 00:45 #87538
Reply to noAxioms You need to use the code function in the Post Comment editor

it's between quote and strike out (looks like this: <> )
noAxioms July 17, 2017 at 00:48 #87539
Best prime finding program I ever saw was an algorithm that would solve your problem above (10001st prime) with instant runtime. The code included itself and all the work (Sieve of Eratosthenes) took place in the preprocessor. The code compiled to one line that printed the answer, but it took hours to compile on some compilers.
noAxioms July 17, 2017 at 00:49 #87541
Reply to VagabondSpectreAwesome. I fixed it.
Efram July 17, 2017 at 00:53 #87544
As has been vaguely covered already, there's nothing wrong with nested loops when they're doing their job; it's just usually more efficient to avoid them when possible.

It's also not as straight-forward as that either. Take caching for example; code runs faster from the cache and smaller routines (in terms of machine instructions) are more cache-friendly - so depending on the platform and the specifics of the algorithm, shorter code that appears to be less efficient on paper might actually run faster.

In practice, you test and benchmark for these things, rather than adhering to generalised rules.

Anyway. After you guys were talking about writing the 10001st prime code without nested loops, I just couldn't resist. This code is mortifying (I got bored/tired by the time I got it working) and completely impractical, but satisfies the condition of having 'just one loop'. :P

PS. If you're more interested in writing shorter code than efficient code, there is code golf.

Edit: I forgot to explain (for what it's worth) that the code works by using a sieve to find the prime numbers up to an assumed number and continues to increase that number until enough primes have been found e.g. it'll find the primes between 0 and 50,000, then between 50,000 and 100,000, etc.
noAxioms July 17, 2017 at 00:56 #87545
Quoting Efram
Anyway. After you guys were talking about writing the 10001st prime code without nested loops, I just couldn't resist. This code is mortifying (I got bored/tired by the time I got it working) and completely impractical, but satisfies the condition of having 'just one loop'. :P
Technically one loop. Still 0(n squared), but implemented as a state machine instead of loops.
Efram July 17, 2017 at 00:57 #87547
Reply to noAxioms It's purely a pisstake. ;) I'm aware it doesn't necessarily run more efficiently than the other implementations.
noAxioms July 17, 2017 at 01:00 #87548
I know. I was admiring it.
I think it can be done with no loops at all.
Efram July 17, 2017 at 01:02 #87550
Quoting noAxioms
I think it can be done with no loops at all.


Challenge accepted.
noAxioms July 17, 2017 at 01:19 #87556
Don't think you'll keep it to 60 lines. Is multiple calls to isPrime(x) function cheating?

Side note: The language requires the empty else { } clauses? Not used to that as a C person.
I have a harder time thinking in C anymore since I'm pure C++ now.
Efram July 17, 2017 at 01:46 #87565
That's just my failure to clean up after myself; there used to be code in those blocks.
_db July 17, 2017 at 01:53 #87566
Hey can someone please do my programming assignment for me
_db July 17, 2017 at 01:59 #87569
I'll pay you
SophistiCat July 17, 2017 at 07:08 #87613
Quoting VagabondSpectre
Is there really a way to know the number of primes below any integer without having to actually calculate or iterate through those primes?


Prime-counting function
Jamal July 17, 2017 at 07:34 #87616
Quoting Agustino
Btw for the web developers among you, which text editor do you use? Atom, Coda, Sublime, Textastic, Brackets or something else?


I used Sublime for a long time, but now I use Visual Studio Code. There's not a huge difference, but it seems more solid, and looks prettier with less fiddling around.
SophistiCat July 17, 2017 at 07:52 #87620
Reply to andrewk Or, you know, you could just calculate the answer :)

The sum of multiples of 3 below 1000:

3 + 6 + 9 + ... + 999 = 3 * (1 + 2 + 3 + ... + 333) = 3 * 333 * 334 / 2

Likewise, the sum of multiples of 5 below 1000 is 5 * 199 * 200 / 2

But we also need to subtract the sum of multiples of 15, since we counted them in both sums: - 15 * 66 * 67 / 2

Total: 233,168
Agustino July 17, 2017 at 08:19 #87627
Reply to VagabondSpectre Yeah, that seems to work. Here was mine:


public int makeChocolate(int small, int big, int goal) {
if( small+5*big>=goal && goal%5<=small){
if (5*big < goal) {
return goal-5*big;
}
return goal%5;
} else {
return -1;
}
}


Though I will say that one of your conditions is redundant (below is the shorter version with that condition removed):
public int makeChocolate(int small, int big, int goal) {
int remainder = goal%5;

if (goal > big*5+small || remainder > small) {
return -1;
}
if (big*5 < goal) {
return goal-big*5;
}
return remainder;
}
Agustino July 17, 2017 at 08:30 #87628
Quoting darthbarracuda
Hey can someone please do my programming assignment for me

That depends on (1) what is your programming assignment, (2) what programming language are we talking about, (3) how much are you paying? and (4) if that person is fine with the ethics of the situation. But in short - we need more details.

Quite often I see people asking for something generally like that, and it's not helpful to anyone - I don't even know if I can help you based on the info you have provided for example.

Quoting darthbarracuda
I'll pay you

And another important question is how are you paying... because Paypal payments aren't very secure, there is no seller protection for digital goods (but there is buyers' protection though - very messed up). Many programmers aren't even aware of this lol.

Hire a programmer, get the work done, and then go to your bank and file a chargeback aimed at Paypal :P - that's what a ruthless businessman would do >:O

So programmers need to be careful with Paypal as a payment option.
Agustino December 16, 2017 at 14:57 #134185
https://projecteuler.net/problem=67

So I was trying to solve that last night. I had solved the previous one which involved a smaller triangle awhile ago through an evolutionary algorithm - see below (all are written and run in the Processing java-based language).

The evolutionary algorithm works by making a "first guess" at the solution, which is a greedy algorithm, which chooses the best path to take down the triangle at each juncture, without any looking into the future. It records this path as 0s and 1s, with 0 = take a left, and 1 = take a right. Then it takes this first guess at a path, creates copies of it, mutates them (with certain probabilities), and then tests which one from that generation is the best. It selects it, and returns to the beginning by re-creating copies of it, modifying them, testing, etc.

String triangle = "59 73 41 52 40 09 26 53 06 34 10 51 87 86 81 61 95 66 57 25 68 90 81 80 38 92 67 73 30 28 51 76 81 18 75 44 84 14 95 87 62 81 17 78 58 21 46 71 58 02 79 62 39 31 09 56 34 35 53 78 31 81 18 90 93 15 78 53 04 21 84 93 32 13 97 11 37 51 45 03 81 79 05 18 78 86 13 30 63 99 95 39 87 96 28 03 38 42 17 82 87 58 07 22 57 06 17 51 17 07 93 09 07 75 97 95 78 87 08 53 67 66 59 60 88 99 94 65 55 77 55 34 27 53 78 28 76 40 41 04 87 16 09 42 75 69 23 97 30 60 10 79 87 12 10 44 26 21 36 32 84 98 60 13 12 36 16 63 31 91 35 70 39 06 05 55 27 38 48 28 22 34 35 62 62 15 14 94 89 86 66 56 68 84 96 21 34 34 34 81 62 40 65 54 62 05 98 03 02 60 38 89 46 37 99 54 34 53 36 14 70 26 02 90 45 13 31 61 83 73 47 36 10 63 96 60 49 41 05 37 42 14 58 84 93 96 17 09 43 05 43 06 59 66 57 87 57 61 28 37 51 84 73 79 15 39 95 88 87 43 39 11 86 77 74 18 54 42 05 79 30 49 99 73 46 37 50 02 45 09 54 52 27 95 27 65 19 45 26 45 71 39 17 78 76 29 52 90 18 99 78 19 35 62 71 19 23 65 93 85 49 33 75 09 02 33 24 47 61 60 55 32 88 57 55 91 54 46 57 07 77 98 52 80 99 24 25 46 78 79 05 92 09 13 55 10 67 26 78 76 82 63 49 51 31 24 68 05 57 07 54 69 21 67 43 17 63 12 24 59 06 08 98 74 66 26 61 60 13 03 09 09 24 30 71 08 88 70 72 70 29 90 11 82 41 34 66 82 67 04 36 60 92 77 91 85 62 49 59 61 30 90 29 94 26 41 89 04 53 22 83 41 09 74 90 48 28 26 37 28 52 77 26 51 32 18 98 79 36 62 13 17 08 19 54 89 29 73 68 42 14 08 16 70 37 37 60 69 70 72 71 09 59 13 60 38 13 57 36 09 30 43 89 30 39 15 02 44 73 05 73 26 63 56 86 12 55 55 85 50 62 99 84 77 28 85 03 21 27 22 19 26 82 69 54 04 13 07 85 14 01 15 70 59 89 95 10 19 04 09 31 92 91 38 92 86 98 75 21 05 64 42 62 84 36 20 73 42 21 23 22 51 51 79 25 45 85 53 03 43 22 75 63 02 49 14 12 89 14 60 78 92 16 44 82 38 30 72 11 46 52 90 27 08 65 78 03 85 41 57 79 39 52 33 48 78 27 56 56 39 13 19 43 86 72 58 95 39 07 04 34 21 98 39 15 39 84 89 69 84 46 37 57 59 35 59 50 26 15 93 42 89 36 27 78 91 24 11 17 41 05 94 07 69 51 96 03 96 47 90 90 45 91 20 50 56 10 32 36 49 04 53 85 92 25 65 52 09 61 30 61 97 66 21 96 92 98 90 06 34 96 60 32 69 68 33 75 84 18 31 71 50 84 63 03 03 19 11 28 42 75 45 45 61 31 61 68 96 34 49 39 05 71 76 59 62 67 06 47 96 99 34 21 32 47 52 07 71 60 42 72 94 56 82 83 84 40 94 87 82 46 01 20 60 14 17 38 26 78 66 81 45 95 18 51 98 81 48 16 53 88 37 52 69 95 72 93 22 34 98 20 54 27 73 61 56 63 60 34 63 93 42 94 83 47 61 27 51 79 79 45 01 44 73 31 70 83 42 88 25 53 51 30 15 65 94 80 44 61 84 12 77 02 62 02 65 94 42 14 94 32 73 09 67 68 29 74 98 10 19 85 48 38 31 85 67 53 93 93 77 47 67 39 72 94 53 18 43 77 40 78 32 29 59 24 06 02 83 50 60 66 32 01 44 30 16 51 15 81 98 15 10 62 86 79 50 62 45 60 70 38 31 85 65 61 64 06 69 84 14 22 56 43 09 48 66 69 83 91 60 40 36 61 92 48 22 99 15 95 64 43 01 16 94 02 99 19 17 69 11 58 97 56 89 31 77 45 67 96 12 73 08 20 36 47 81 44 50 64 68 85 40 81 85 52 09 91 35 92 45 32 84 62 15 19 64 21 66 06 01 52 80 62 59 12 25 88 28 91 50 40 16 22 99 92 79 87 51 21 77 74 77 07 42 38 42 74 83 02 05 46 19 77 66 24 18 05 32 02 84 31 99 92 58 96 72 91 36 62 99 55 29 53 42 12 37 26 58 89 50 66 19 82 75 12 48 24 87 91 85 02 07 03 76 86 99 98 84 93 07 17 33 61 92 20 66 60 24 66 40 30 67 05 37 29 24 96 03 27 70 62 13 04 45 47 59 88 43 20 66 15 46 92 30 04 71 66 78 70 53 99 67 60 38 06 88 04 17 72 10 99 71 07 42 25 54 05 26 64 91 50 45 71 06 30 67 48 69 82 08 56 80 67 18 46 66 63 01 20 08 80 47 07 91 16 03 79 87 18 54 78 49 80 48 77 40 68 23 60 88 58 80 33 57 11 69 55 53 64 02 94 49 60 92 16 35 81 21 82 96 25 24 96 18 02 05 49 03 50 77 06 32 84 27 18 38 68 01 50 04 03 21 42 94 53 24 89 05 92 26 52 36 68 11 85 01 04 42 02 45 15 06 50 04 53 73 25 74 81 88 98 21 67 84 79 97 99 20 95 04 40 46 02 58 87 94 10 02 78 88 52 21 03 88 60 06 53 49 71 20 91 12 65 07 49 21 22 11 41 58 99 36 16 09 48 17 24 52 36 23 15 72 16 84 56 02 99 43 76 81 71 29 39 49 17 64 39 59 84 86 16 17 66 03 09 43 06 64 18 63 29 68 06 23 07 87 14 26 35 17 12 98 41 53 64 78 18 98 27 28 84 80 67 75 62 10 11 76 90 54 10 05 54 41 39 66 43 83 18 37 32 31 52 29 95 47 08 76 35 11 04 53 35 43 34 10 52 57 12 36 20 39 40 55 78 44 07 31 38 26 08 15 56 88 86 01 52 62 10 24 32 05 60 65 53 28 57 99 03 50 03 52 07 73 49 92 66 80 01 46 08 67 25 36 73 93 07 42 25 53 13 96 76 83 87 90 54 89 78 22 78 91 73 51 69 09 79 94 83 53 09 40 69 62 10 79 49 47 03 81 30 71 54 73 33 51 76 59 54 79 37 56 45 84 17 62 21 98 69 41 95 65 24 39 37 62 03 24 48 54 64 46 82 71 78 33 67 09 16 96 68 52 74 79 68 32 21 13 78 96 60 09 69 20 36 73 26 21 44 46 38 17 83 65 98 07 23 52 46 61 97 33 13 60 31 70 15 36 77 31 58 56 93 75 68 21 36 69 53 90 75 25 82 39 50 65 94 29 30 11 33 11 13 96 02 56 47 07 49 02 76 46 73 30 10 20 60 70 14 56 34 26 37 39 48 24 55 76 84 91 39 86 95 61 50 14 53 93 64 67 37 31 10 84 42 70 48 20 10 72 60 61 84 79 69 65 99 73 89 25 85 48 92 56 97 16 03 14 80 27 22 30 44 27 67 75 79 32 51 54 81 29 65 14 19 04 13 82 04 91 43 40 12 52 29 99 07 76 60 25 01 07 61 71 37 92 40 47 99 66 57 01 43 44 22 40 53 53 09 69 26 81 07 49 80 56 90 93 87 47 13 75 28 87 23 72 79 32 18 27 20 28 10 37 59 21 18 70 04 79 96 03 31 45 71 81 06 14 18 17 05 31 50 92 79 23 47 09 39 47 91 43 54 69 47 42 95 62 46 32 85 37 18 62 85 87 28 64 05 77 51 47 26 30 65 05 70 65 75 59 80 42 52 25 20 44 10 92 17 71 95 52 14 77 13 24 55 11 65 26 91 01 30 63 15 49 48 41 17 67 47 03 68 20 90 98 32 04 40 68 90 51 58 60 06 55 23 68 05 19 76 94 82 36 96 43 38 90 87 28 33 83 05 17 70 83 96 93 06 04 78 47 80 06 23 84 75 23 87 72 99 14 50 98 92 38 90 64 61 58 76 94 36 66 87 80 51 35 61 38 57 95 64 06 53 36 82 51 40 33 47 14 07 98 78 65 39 58 53 06 50 53 04 69 40 68 36 69 75 78 75 60 03 32 39 24 74 47 26 90 13 40 44 71 90 76 51 24 36 50 25 45 70 80 61 80 61 43 90 64 11 18 29 86 56 68 42 79 10 42 44 30 12 96 18 23 18 52 59 02 99 67 46 60 86 43 38 55 17 44 93 42 21 55 14 47 34 55 16 49 24 23 29 96 51 55 10 46 53 27 92 27 46 63 57 30 65 43 27 21 20 24 83 81 72 93 19 69 52 48 01 13 83 92 69 20 48 69 59 20 62 05 42 28 89 90 99 32 72 84 17 08 87 36 03 60 31 36 36 81 26 97 36 48 54 56 56 27 16 91 08 23 11 87 99 33 47 02 14 44 73 70 99 43 35 33 90 56 61 86 56 12 70 59 63 32 01 15 81 47 71 76 95 32 65 80 54 70 34 51 40 45 33 04 64 55 78 68 88 47 31 47 68 87 03 84 23 44 89 72 35 08 31 76 63 26 90 85 96 67 65 91 19 14 17 86 04 71 32 95 37 13 04 22 64 37 37 28 56 62 86 33 07 37 10 44 52 82 52 06 19 52 57 75 90 26 91 24 06 21 14 67 76 30 46 14 35 89 89 41 03 64 56 97 87 63 22 34 03 79 17 45 11 53 25 56 96 61 23 18 63 31 37 37 47 77 23 26 70 72 76 77 04 28 64 71 69 14 85 96 54 95 48 06 62 99 83 86 77 97 75 71 66 30 19 57 90 33 01 60 61 14 12 90 99 32 77 56 41 18 14 87 49 10 14 90 64 18 50 21 74 14 16 88 05 45 73 82 47 74 44 22 97 41 13 34 31 54 61 56 94 03 24 59 27 98 77 04 09 37 40 12 26 87 09 71 70 07 18 64 57 80 21 12 71 83 94 60 39 73 79 73 19 97 32 64 29 41 07 48 84 85 67 12 74 95 20 24 52 41 67 56 61 29 93 35 72 69 72 23 63 66 01 11 07 30 52 56 95 16 65 26 83 90 50 74 60 18 16 48 43 77 37 11 99 98 30 94 91 26 62 73 45 12 87 73 47 27 01 88 66 99 21 41 95 80 02 53 23 32 61 48 32 43 43 83 14 66 95 91 19 81 80 67 25 88 08 62 32 18 92 14 83 71 37 96 11 83 39 99 05 16 23 27 10 67 02 25 44 11 55 31 46 64 41 56 44 74 26 81 51 31 45 85 87 09 81 95 22 28 76 69 46 48 64 87 67 76 27 89 31 11 74 16 62 03 60 94 42 47 09 34 94 93 72 56 18 90 18 42 17 42 32 14 86 06 53 33 95 99 35 29 15 44 20 49 59 25 54 34 59 84 21 23 54 35 90 78 16 93 13 37 88 54 19 86 67 68 55 66 84 65 42 98 37 87 56 33 28 58 38 28 38 66 27 52 21 81 15 08 22 97 32 85 27 91 53 40 28 13 34 91 25 01 63 50 37 22 49 71 58 32 28 30 18 68 94 23 83 63 62 94 76 80 41 90 22 82 52 29 12 18 56 10 08 35 14 37 57 23 65 67 40 72 39 93 39 70 89 40 34 07 46 94 22 20 05 53 64 56 30 05 56 61 88 27 23 95 11 12 37 69 68 24 66 10 87 70 43 50 75 07 62 41 83 58 95 93 89 79 45 39 02 22 05 22 95 43 62 11 68 29 17 40 26 44 25 71 87 16 70 85 19 25 59 94 90 41 41 80 61 70 55 60 84 33 95 76 42 63 15 09 03 40 38 12 03 32 09 84 56 80 61 55 85 97 16 94 82 94 98 57 84 30 84 48 93 90 71 05 95 90 73 17 30 98 40 64 65 89 07 79 09 19 56 36 42 30 23 69 73 72 07 05 27 61 24 31 43 48 71 84 21 28 26 65 65 59 65 74 77 20 10 81 61 84 95 08 52 23 70 47 81 28 09 98 51 67 64 35 51 59 36 92 82 77 65 80 24 72 53 22 07 27 10 21 28 30 22 48 82 80 48 56 20 14 43 18 25 50 95 90 31 77 08 09 48 44 80 90 22 93 45 82 17 13 96 25 26 08 73 34 99 06 49 24 06 83 51 40 14 15 10 25 01 54 25 10 81 30 64 24 74 75 80 36 75 82 60 22 69 72 91 45 67 03 62 79 54 89 74 44 83 64 96 66 73 44 30 74 50 37 05 09 97 70 01 60 46 37 91 39 75 75 18 58 52 72 78 51 81 86 52 08 97 01 46 43 66 98 62 81 18 70 93 73 08 32 46 34 96 80 82 07 59 71 92 53 19 20 88 66 03 26 26 10 24 27 50 82 94 73 63 08 51 33 22 45 19 13 58 33 90 15 22 50 36 13 55 06 35 47 82 52 33 61 36 27 28 46 98 14 73 20 73 32 16 26 80 53 47 66 76 38 94 45 02 01 22 52 47 96 64 58 52 39 88 46 23 39 74 63 81 64 20 90 33 33 76 55 58 26 10 46 42 26 74 74 12 83 32 43 09 02 73 55 86 54 85 34 28 23 29 79 91 62 47 41 82 87 99 22 48 90 20 05 96 75 95 04 43 28 81 39 81 01 28 42 78 25 39 77 90 57 58 98 17 36 73 22 63 74 51 29 39 74 94 95 78 64 24 38 86 63 87 93 06 70 92 22 16 80 64 29 52 20 27 23 50 14 13 87 15 72 96 81 22 08 49 72 30 70 24 79 31 16 64 59 21 89 34 96 91 48 76 43 53 88 01 57 80 23 81 90 79 58 01 80 87 17 99 86 90 72 63 32 69 14 28 88 69 37 17 71 95 56 93 71 35 43 45 04 98 92 94 84 96 11 30 31 27 31 60 92 03 48 05 98 91 86 94 35 90 90 08 48 19 33 28 68 37 59 26 65 96 50 68 22 07 09 49 34 31 77 49 43 06 75 17 81 87 61 79 52 26 27 72 29 50 07 98 86 01 17 10 46 64 24 18 56 51 30 25 94 88 85 79 91 40 33 63 84 49 67 98 92 15 26 75 19 82 05 18 78 65 93 61 48 91 43 59 41 70 51 22 15 92 81 67 91 46 98 11 11 65 31 66 10 98 65 83 21 05 56 05 98 73 67 46 74 69 34 08 30 05 52 07 98 32 95 30 94 65 50 24 63 28 81 99 57 19 23 61 36 09 89 71 98 65 17 30 29 89 26 79 74 94 11 44 48 97 54 81 55 39 66 69 45 28 47 13 86 15 76 74 70 84 32 36 33 79 20 78 14 41 47 89 28 81 05 99 66 81 86 38 26 06 25 13 60 54 55 23 53 27 05 89 25 23 11 13 54 59 54 56 34 16 24 53 44 06 13 40 57 72 21 15 60 08 04 19 11 98 34 45 09 97 86 71 03 15 56 19 15 44 97 31 90 04 87 87 76 08 12 30 24 62 84 28 12 85 82 53 99 52 13 94 06 65 97 86 09 50 94 68 69 74 30 67 87 94 63 07 78 27 80 36 69 41 06 92 32 78 37 82 30 05 18 87 99 72 19 99 44 20 55 77 69 91 27 31 28 81 80 27 02 07 97 23 95 98 12 25 75 29 47 71 07 47 78 39 41 59 27 76 13 15 66 61 68 35 69 86 16 53 67 63 99 85 41 56 08 28 33 40 94 76 90 85 31 70 24 65 84 65 99 82 19 25 54 37 21 46 33 02 52 99 51 33 26 04 87 02 08 18 96 54 42 61 45 91 06 64 79 80 82 32 16 83 63 42 49 19 78 65 97 40 42 14 61 49 34 04 18 25 98 59 30 82 72 26 88 54 36 21 75 03 88 99 53 46 51 55 78 22 94 34 40 68 87 84 25 30 76 25 08 92 84 42 61 40 38 09 99 40 23 29 39 46 55 10 90 35 84 56 70 63 23 91 39 52 92 03 71 89 07 09 37 68 66 58 20 44 92 51 56 13 71 79 99 26 37 02 06 16 67 36 52 58 16 79 73 56 60 59 27 44 77 94 82 20 50 98 33 09 87 94 37 40 83 64 83 58 85 17 76 53 02 83 52 22 27 39 20 48 92 45 21 09 42 24 23 12 37 52 28 50 78 79 20 86 62 73 20 59 54 96 80 15 91 90 99 70 10 09 58 90 93 50 81 99 54 38 36 10 30 11 35 84 16 45 82 18 11 97 36 43 96 79 97 65 40 48 23 19 17 31 64 52 65 65 37 32 65 76 99 79 34 65 79 27 55 33 03 01 33 27 61 28 66 08 04 70 49 46 48 83 01 45 19 96 13 81 14 21 31 79 93 85 50 05 92 92 48 84 59 98 31 53 23 27 15 22 79 95 24 76 05 79 16 93 97 89 38 89 42 83 02 88 94 95 82 21 01 97 48 39 31 78 09 65 50 56 97 61 01 07 65 27 21 23 14 15 80 97 44 78 49 35 33 45 81 74 34 05 31 57 09 38 94 07 69 54 69 32 65 68 46 68 78 90 24 28 49 51 45 86 35 41 63 89 76 87 31 86 09 46 14 87 82 22 29 47 16 13 10 70 72 82 95 48 64 58 43 13 75 42 69 21 12 67 13 64 85 58 23 98 09 37 76 05 22 31 12 66 50 29 99 86 72 45 25 10 28 19 06 90 43 29 31 67 79 46 25 74 14 97 35 76 37 65 46 23 82 06 22 30 76 93 66 94 17 96 13 20 72 63 40 78 08 52 09 90 41 70 28 36 14 46 44 85 96 24 52 58 15 87 37 05 98 99 39 13 61 76 38 44 99 83 74 90 22 53 80 56 98 30 51 63 39 44 30 91 91 04 22 27 73 17 35 53 18 35 45 54 56 27 78 48 13 69 36 44 38 71 25 30 56 15 22 73 43 32 69 59 25 93 83 45 11 34 94 44 39 92 12 36 56 88 13 96 16 12 55 54 11 47 19 78 17 17 68 81 77 51 42 55 99 85 66 27 81 79 93 42 65 61 69 74 14 01 18 56 12 01 58 37 91 22 42 66 83 25 19 04 96 41 25 45 18 69 96 88 36 93 10 12 98 32 44 83 83 04 72 91 04 27 73 07 34 37 71 60 59 31 01 54 54 44 96 93 83 36 04 45 30 18 22 20 42 96 65 79 17 41 55 69 94 81 29 80 91 31 85 25 47 26 43 49 02 99 34 67 99 76 16 14 15 93 08 32 99 44 61 77 67 50 43 55 87 55 53 72 17 46 62 25 50 99 73 05 93 48 17 31 70 80 59 09 44 59 45 13 74 66 58 94 87 73 16 14 85 38 74 99 64 23 79 28 71 42 20 37 82 31 23 51 96 39 65 46 71 56 13 29 68 53 86 45 33 51 49 12 91 21 21 76 85 02 17 98 15 46 12 60 21 88 30 92 83 44 59 42 50 27 88 46 86 94 73 45 54 23 24 14 10 94 21 20 34 23 51 04 83 99 75 90 63 60 16 22 33 83 70 11 32 10 50 29 30 83 46 11 05 31 17 86 42 49 01 44 63 28 60 07 78 95 40 44 61 89 59 04 49 51 27 69 71 46 76 44 04 09 34 56 39 15 06 94 91 75 90 65 27 56 23 74 06 23 33 36 69 14 39 05 34 35 57 33 22 76 46 56 10 61 65 98 09 16 69 04 62 65 18 99 76 49 18 72 66 73 83 82 40 76 31 89 91 27 88 17 35 41 35 32 51 32 67 52 68 74 85 80 57 07 11 62 66 47 22 67 65 37 19 97 26 17 16 24 24 17 50 37 64 82 24 36 32 11 68 34 69 31 32 89 79 93 96 68 49 90 14 23 04 04 67 99 81 74 70 74 36 96 68 09 64 39 88 35 54 89 96 58 66 27 88 97 32 14 06 35 78 20 71 06 85 66 57 02 58 91 72 05 29 56 73 48 86 52 09 93 22 57 79 42 12 01 31 68 17 59 63 76 07 77 73 81 14 13 17 20 11 09 01 83 08 85 91 70 84 63 62 77 37 07 47 01 59 95 39 69 39 21 99 09 87 02 97 16 92 36 74 71 90 66 33 73 73 75 52 91 11 12 26 53 05 26 26 48 61 50 90 65 01 87 42 47 74 35 22 73 24 26 56 70 52 05 48 41 31 18 83 27 21 39 80 85 26 08 44 02 71 07 63 22 05 52 19 08 20 17 25 21 11 72 93 33 49 64 23 53 82 03 13 91 65 85 02 40 05 42 31 77 42 05 36 06 54 04 58 07 76 87 83 25 57 66 12 74 33 85 37 74 32 20 69 03 97 91 68 82 44 19 14 89 28 85 85 80 53 34 87 58 98 88 78 48 65 98 40 11 57 10 67 70 81 60 79 74 72 97 59 79 47 30 20 54 80 89 91 14 05 33 36 79 39 60 85 59 39 60 07 57 76 77 92 06 35 15 72 23 41 45 52 95 18 64 79 86 53 56 31 69 11 91 31 84 50 44 82 22 81 41 40 30 42 30 91 48 94 74 76 64 58 74 25 96 57 14 19 03 99 28 83 15 75 99 01 89 85 79 50 03 95 32 67 44 08 07 41 62 64 29 20 14 76 26 55 48 71 69 66 19 72 44 25 14 01 48 74 12 98 07 64 66 84 24 18 16 27 48 20 14 47 69 30 86 48 40 23 16 61 21 51 50 26 47 35 33 91 28 78 64 43 68 04 79 51 08 19 60 52 95 06 68 46 86 35 97 27 58 04 65 30 58 99 12 12 75 91 39 50 31 42 64 70 04 46 07 98 73 98 93 37 89 77 91 64 71 64 65 66 21 78 62 81 74 42 20 83 70 73 95 78 45 92 27 34 53 71 15 30 11 85 31 34 71 13 48 05 14 44 03 19 67 23 73 19 57 06 90 94 72 57 69 81 62 59 68 88 57 55 69 49 13 07 87 97 80 89 05 71 05 05 26 38 40 16 62 45 99 18 38 98 24 21 26 62 74 69 04 85 57 77 35 58 67 91 79 79 57 86 28 66 34 72 51 76 78 36 95 63 90 08 78 47 63 45 31 22 70 52 48 79 94 15 77 61 67 68 23 33 44 81 80 92 93 75 94 88 23 61 39 76 22 03 28 94 32 06 49 65 41 34 18 23 08 47 62 60 03 63 33 13 80 52 31 54 73 43 70 26 16 69 57 87 83 31 03 93 70 81 47 95 77 44 29 68 39 51 56 59 63 07 25 70 07 77 43 53 64 03 94 42 95 39 18 01 66 21 16 97 20 50 90 16 70 10 95 69 29 06 25 61 41 26 15 59 63 35";
String triangle2 = "75 95 64 17 47 82 18 35 87 10 20 04 82 47 65 19 01 23 75 03 34 88 02 77 73 07 63 67 99 65 04 28 06 16 70 92 41 41 26 56 83 40 80 70 33 41 48 72 33 47 32 37 16 94 29 53 71 44 65 25 43 91 52 97 51 14 70 11 33 28 77 73 17 78 39 68 17 57 91 71 52 38 17 14 91 43 58 50 27 29 48 63 66 04 68 89 53 67 30 73 16 69 87 40 31 04 62 98 27 23 09 70 98 73 93 38 53 60 04 23";
// triangle = active one, problem 67 now. triangle2 = inactive one, problem 18.
String[] total = split(triangle, " ");
int size = 200;
int probability_switch = 200; // reads 1 out of 200
int probability_scramble = 15; // 1 out of 15
int probability_inversion = 100; // 1 out of 100

int[] path_genome(int[] nums) {
int rows = (-1+int(sqrt(1+8*total.length)))/2;;
int[] moves = new int[rows];
int pos = 0;
for(int i=1; i<=rows; i++) {
if(i if(nums[i+pos]>nums[i+pos+1]) {
pos += i;
moves[i] = 0;
} else {
pos += i+1;
moves[i] = 1;
}
}
}
return moves;
}

int getFitness(int[] path, int[]triangles) {
int pos = 0;
int fitness = triangles[pos];
for(int i=1; i pos += i+path[i];
fitness += triangles[pos];
}
return fitness;
}

int[] doMutation(int[] path) {
//FLIP Mutation
for (int i = 1; i < path.length; i++) {
if(floor(random(probability_switch))==1){
if(path[i]==1) {
path[i] = 0;
} else {
path[i] = 1;
}
}

//SCRAMBLE MUTATION
if(floor(random(probability_scramble))==1) {
int start_position = floor(random(path.length));
int end_position = floor(random(path.length));
if (start_position > end_position) {
int temp = start_position;
start_position = end_position;
end_position = temp;
}
for (i = start_position; i < end_position; i++) {
int pick = floor(random(start_position, end_position+1));
int temp = path[i];
path[i] = path[pick];
path[pick] = temp;
}
}

//INVERSION MUTATION
if(floor(random(probability_inversion))==1) {
int start_position = floor(random(path.length));
int end_position = floor(random(path.length));
if (start_position > end_position) {
int temp = start_position;
start_position = end_position;
end_position = temp;
}
int n =0;
for (i = start_position; i < ceil((end_position+start_position)/2); i++) {
int pick = end_position-n;
int temp = path[i];
path[i] = path[pick];
path[pick] = temp;
n++;
}
}
}
return path;
}

int[][] getGenePool(int[] path) {
int[][] pool = new int[size][path.length];
for (int i=0; i pool[i] = makeArrayCopy(path);
}
return pool;
}

int[] makeArrayCopy(int[] old) {
int[] copy = new int[old.length];
for(int i = 0; i copy[i] = old[i];
}
return copy;
}

int getFittest(int[][] pool, int[] nums) {
int fittest_loc = 0;
int fitness_new = 0;
int fitness = 0;
for(int i=0; i fitness_new = getFitness(pool[i], nums);
if(fitness_new > fitness) {
fitness = fitness_new;
fittest_loc = i;
}
}
return fittest_loc;
}

void setup() {
int[] nums = int(split(triangle, " "));
int[] path = path_genome(nums);
int fitness_loc = 0;
int numGens = 0;
while(numGens<1000000) {
numGens++;
int[][] pool = getGenePool(path);
for(int i=1; i pool[i]=doMutation(pool[i]);
}
fitness_loc = getFittest(pool, nums);
path = pool[fitness_loc];
if(numGens%5000==0) {
println(getFitness(path, nums));
}
}
println(getFitness(path, nums));
}


Now, this evolutionary algorithm doesn't manage to solve Problem 67 (although I expected it to, that's why I chose to use it for the first problem, instead of trying brute force), though it gets very close to the answer - gets to around ~7200 and the answer is 7273.

Here's a dynamic programming way to solve it, also written in Processing. Basically, it solves each "small" triangle starting at the very bottom, and then records that answer on the row above.

Note - to run this one, you must download the .txt file from the first link and then save it in the same folder as the program.

void setup() {
int[][] triangle = readInput("triangle.txt");
int lines = triangle.length;
for(int i = lines-2; i>=0; i--) {
for(int j = 0; j < i+1; j++) {
if(triangle[i+1][j]>triangle[i+1][j+1]) {
triangle[i][j] += triangle[i+1][j];
} else {
triangle[i][j] += triangle[i+1][j+1];
}
}
}
println(triangle[0][0]);
}

int[][] readInput(String filename) {
String line;
String[] linePieces;
int lines = 0;
BufferedReader reader;
BufferedReader reader2;
reader = createReader(filename);
reader2 = createReader(filename);

try {
while ((line = reader.readLine()) != null) {
lines++;
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}

int[][] inputTriangle = new int[lines][lines];

try {
int j = 0;
while ((line = reader2.readLine()) != null) {
linePieces = split(line, " ");
for (int i = 0; i < linePieces.length; i++) {
inputTriangle[j][i] = int(linePieces[i]);
}
j++;
}
reader2.close();
} catch (IOException e) {
e.printStackTrace();
}

return inputTriangle;
}

Altering the probabilities of the evolutionary one, the limit of numGens (number of generations tested) in the while loop, and size (the size of the gene pool), can alter the results obtained. Does anyone have a way to make the evolutionary one more efficient to reach the answer?