Comments by "" (@billionai4871) on "A Lifelong Mathematical Obsession" video.

  1. I'm stopped at minute 10, but I wanna take a crack at solving this my way. I'm a computer scientist, so while closed formulas and proofs that they work are interesting, I'm usually more fond of finding an algorithm that can get to the answer instead, and the moment you mentioned that in the 6 case, removing finger number 3 gives you a 2 case and a 3 case, my brain instantly latched on to a Dynamic Programming (DP) algorithm. DP works when solving a smaller version of the problem will inform the bigger version in a way that will reduce the amount of calculations that you need to do. A common way to show this strategy is with the fibbonacci sequence: If I want to calculate f(15), I will need f(14) and f(13); the catch with DP is that I will create a "memoization" vector that will remember previous solutions, so if I calculate f(13) first, when is time to look at f(14), I already know f(13) and it is just a lookup. This problem is a little harder than a straight forward DP, but it is still solvable, but we need 2 memoization vectors: solutions_edge, solutions_other; For convenience, imagine that the first vector will always start with the number 1, and it will be apparent why it is important soon (if not yet). The second one has all other solutions for the N sized problem (including the ones starting the other edge). My idea is: 1. Solve the case starting in pin 1; when we do that, we have exactly the case N-1 except we can't pick pin 1 again, so we have solutions_other(N-1); Save this number in solutions_edge(N) 2. Iterate through all the possible pins from 2 up until N/2 (inclusive); by removing pin I, you get 2 groups of size A and B such that A + B + 1 = N. Then you have multiple ways of solving your new situation: 2.1 solve A and B separately; if you start with A, there are solutions_other(A) possibilities to do it, and moving on to be you have solutions_edge(B)+solutions_other(B); Similarly, you may start with B, for a total of 2 * (solutions_other(A) + solutions_other(B)) + solutions_edge(A) + solutions_edge(B); 2.2 for the other cases, you have to have enough legal moves in the B side to be able to interweave A moves in the illegal possibilities, so for every B permutation, follow it and if you find move than A illegal moves, that permutation is illegal, move on to the next. For every legal legal permutation of B that you find, you can calculate how many solutions it can have as follows: 2.2.1: If you have L illegal moves in the B permutation, you can space them my with A choose L options of moves on the A group; so far the permutation has A choose L moves 2.2.2: for the remainder A-L options, you can interweave them as you'd like in the B+L locations; which give you (B+L) choose (A-L) options 2.2.3: the final part is figuring out if for a given set of A-L choices, they can be side by side instead of neighboured by B moves. I haven't figured out how to do it yet. 2.3: Save this number to solutions_other(N) 3. do solutions_other(N) <= 2 * solutions_other(N) + solutions_edge(N); this is because you can reflect all the solutions of step 2, and we want solutions starting with pin N to be in solutions_other; 4, The final value is obtained by adding solutions_other(N) + solutions_edge(N) this isn't a total solution, but is what I could come up with before work hours started
    11