diff --git a/problems/009_problem/009_problem.py b/problems/009_problem/009_problem.py
new file mode 100644
index 0000000..fce9862
--- /dev/null
+++ b/problems/009_problem/009_problem.py
@@ -0,0 +1,44 @@
+# # Problem 9:
+#
+# [Euler Project #9](https://projecteuler.net/problem=9)
+#
+#
+#
+# >A Pythagorean triplet is a set of three natural numbers, a < b < c, for which,
+# a2 + b2 = c2
+#
+# >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.
+#
+#
+#
+# ---
+import os
+import pprint
+import time # Typically imported for sleep function, to slow down execution in terminal.
+import typing
+import decorators # Typically imported to compute execution duration of functions.
+import math
+import numpy
+
+def get_c(a,b):
+ c = math.sqrt(a*a+b*b)
+ return c
+
+def check_constraint(a,b,c,limit):
+ return (a+b+c)==limit
+
+exit=False
+for a in range(1,1000):
+ for b in range(a,1000):
+ c = get_c(a,b)
+ if check_constraint(a,b,c,1000):
+ #print(a,b,c)
+ #print(not_done)
+ exit=True
+ break
+ if exit:
+ break
+print(a,b,c,a+b+c,a*b*c)
\ No newline at end of file
diff --git a/problems/009_problem_jnotebook.ipynb b/problems/009_problem/009_problem_jnotebook.ipynb
similarity index 100%
rename from problems/009_problem_jnotebook.ipynb
rename to problems/009_problem/009_problem_jnotebook.ipynb
diff --git a/problems/011_problem_jnotebook.ipynb b/problems/010_problem/011_problem_jnotebook.ipynb
similarity index 100%
rename from problems/011_problem_jnotebook.ipynb
rename to problems/010_problem/011_problem_jnotebook.ipynb
diff --git a/problems/011_problem/011_problem.py b/problems/011_problem/011_problem.py
new file mode 100644
index 0000000..62bcc29
--- /dev/null
+++ b/problems/011_problem/011_problem.py
@@ -0,0 +1,237 @@
+# # Problem 11:
+#
+# [Euler Project #11](https://projecteuler.net/problem=11)
+#
+#
+# > In the 20×20 grid below, four numbers along a diagonal line have been marked in red.
+# >
+# > 08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
+# > 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
+# > 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
+# > 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
+# > 22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
+# > 24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
+# > 32 98 81 28 64 23 67 10 **26** 38 40 67 59 54 70 66 18 38 64 70
+# > 67 26 20 68 02 62 12 20 95 **63** 94 39 63 08 40 91 66 49 94 21
+# > 24 55 58 05 66 73 99 26 97 17 **78** 78 96 83 14 88 34 89 63 72
+# > 21 36 23 09 75 00 76 44 20 45 35 **14** 00 61 33 97 34 31 33 95
+# > 78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
+# > 16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
+# > 86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
+# > 19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
+# > 04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
+# > 88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
+# > 04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
+# > 20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
+# > 20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
+# > 01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48
+# >
+# > The product of these numbers is 26 × 63 × 78 × 14 = 1788696.
+# >
+# > What is the greatest product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the 20×20 grid?
+#
+#
+# ---
+import os
+import pprint
+import time # Typically imported for sleep function, to slow down execution in terminal.
+import typing
+import decorators # Typically imported to compute execution duration of functions.
+import math
+import numpy
+
+def check_horizontal(table,solution):
+ '''
+ Args:
+ table: list of lists representing the input table
+ solution: a dictionary storing the product, and three tuples of cell coordinates
+ '''
+ # Let's scan the horizontals first.
+ # Acceptable cells would have a root position (on the LHS) which may reside anywhere in the table,
+ # except for the last three columns.
+
+ # create a list of tuples to store cell coordinates while generating the products
+ cells=[(0,0),(0,0),(0,0),(0,0)]
+
+ # loop over row dimension
+ for row in range(len(table)):
+ # loop over column dimension
+ for column in range(len(table[row])-4):
+ # calculate product
+ product = 1
+ for i in range(4):
+ product *= table[row][column+i]
+ cells[i]=(row,column+i)
+ #print("product=",product)
+ if product>solution['product']:
+ solution['product']=product
+ solution['cella']=cells[0]
+ solution['cellb']=cells[1]
+ solution['cellc']=cells[2]
+ solution['celld']=cells[3]
+
+ return solution
+
+def check_vertical(table,solution):
+ '''
+ Args:
+ table: list of lists representing the input table
+ solution: a dictionary storing the product, and three tuples of cell coordinates
+ '''
+ # Let's scan the verticals next.
+ # Acceptable cells would have a root position (at the top of column) which may reside anywhere in the table,
+ # except for the last three rows.
+
+ # create a list of tuples to store cell coordinates while generating the products
+ cells=[(0,0),(0,0),(0,0),(0,0)]
+
+ # loop over row dimension
+ count = 0
+ for row in range(len(table)-4):
+ # loop over column dimension
+ for column in range(len(table[row])):
+ # convert data type from string to int
+ product = 1
+ for i in range(4):
+ product *= table[row+i][column]
+ cells[i]=(row,column+i)
+ #print("product=",product)
+ count+=1
+ #print("count=",count)
+ if product>solution['product']:
+ solution['product']=product
+ solution['cella']=cells[0]
+ solution['cellb']=cells[1]
+ solution['cellc']=cells[2]
+ solution['celld']=cells[3]
+
+ return solution
+
+def check_upwards_diagonals(table,solution):
+ '''
+ Args:
+ table: list of lists representing the input table
+ solution: a dictionary storing the product, and three tuples of cell coordinates
+ '''
+ # Let's scan the upward (left to right) diagonals next.
+ # Acceptable cells would have a root position (at the bottom-left of the diagonal) which may reside anywhere in the table,
+ # except for the first three rows, and the last three columns.
+
+ # create a list of tuples to store cell coordinates while generating the products
+ cells=[(0,0),(0,0),(0,0),(0,0)]
+
+ # loop over row dimension
+ count = 0
+ for row in range(len(table)-3):
+ # loop over column dimension
+ #print("row=",row)
+ for column in range(len(table[row])-3):
+ # convert data type from string to int
+ product = 1
+ for i in range(4):
+ product *= table[row+3-i][column+i]
+ cells[i]=(row+3-i,column+i)
+ #print("cell=[",row+3-i,"][",column+i,"]")
+ #print("product=",product)
+ count += 1
+ if product>solution['product']:
+ solution['product']=product
+ solution['cella']=cells[0]
+ solution['cellb']=cells[1]
+ solution['cellc']=cells[2]
+ solution['celld']=cells[3]
+
+ return solution
+
+def check_downwards_diagonals(table,solution):
+ '''
+ Args:
+ table: list of lists representing the input table
+ solution: a dictionary storing the product, and three tuples of cell coordinates
+ '''
+ # Let's scan the downward (left to right) diagonals next.
+ # Acceptable cells would have a root position (at the top-left of the diagonal) which may reside anywhere in the table,
+ # except for the last three rows, and the last three columns.
+
+ # create a list of tuples to store cell coordinates while generating the products
+ cells=[(0,0),(0,0),(0,0),(0,0)]
+
+ # loop over row dimension
+ count = 0
+ for row in range(len(table)-3):
+ # loop over column dimension
+ #print("row=",row)
+ for column in range(len(table[row])-3):
+ # convert data type from string to int
+ product = 1
+ for i in range(4):
+ product *= table[row+i][column+i]
+ cells[i]=(row+i,column+i)
+ #print("cell=[",row+i,"][",column+i,"]")
+ #print("product=",product)
+ count += 1
+ #print("count=",count)
+ if product>solution['product']:
+ solution['product']=product
+ solution['cella']=cells[0]
+ solution['cellb']=cells[1]
+ solution['cellc']=cells[2]
+ solution['celld']=cells[3]
+
+ return solution
+
+table = [ ['08', '02', '22', '97', '38', '15', '00', '40', '00', '75', '04', '05', '07', '78', '52', '12', '50', '77', '91', '08'],
+ ['49', '49', '99', '40', '17', '81', '18', '57', '60', '87', '17', '40', '98', '43', '69', '48', '04', '56', '62', '00'],
+ ['81', '49', '31', '73', '55', '79', '14', '29', '93', '71', '40', '67', '53', '88', '30', '03', '49', '13', '36', '65'],
+ ['52', '70', '95', '23', '04', '60', '11', '42', '69', '24', '68', '56', '01', '32', '56', '71', '37', '02', '36', '91'],
+ ['22', '31', '16', '71', '51', '67', '63', '89', '41', '92', '36', '54', '22', '40', '40', '28', '66', '33', '13', '80'],
+ ['24', '47', '32', '60', '99', '03', '45', '02', '44', '75', '33', '53', '78', '36', '84', '20', '35', '17', '12', '50'],
+ ['32', '98', '81', '28', '64', '23', '67', '10', '26', '38', '40', '67', '59', '54', '70', '66', '18', '38', '64', '70'],
+ ['67', '26', '20', '68', '02', '62', '12', '20', '95', '63', '94', '39', '63', '08', '40', '91', '66', '49', '94', '21'],
+ ['24', '55', '58', '05', '66', '73', '99', '26', '97', '17', '78', '78', '96', '83', '14', '88', '34', '89', '63', '72'],
+ ['21', '36', '23', '09', '75', '00', '76', '44', '20', '45', '35', '14', '00', '61', '33', '97', '34', '31', '33', '95'],
+ ['78', '17', '53', '28', '22', '75', '31', '67', '15', '94', '03', '80', '04', '62', '16', '14', '09', '53', '56', '92'],
+ ['16', '39', '05', '42', '96', '35', '31', '47', '55', '58', '88', '24', '00', '17', '54', '24', '36', '29', '85', '57'],
+ ['86', '56', '00', '48', '35', '71', '89', '07', '05', '44', '44', '37', '44', '60', '21', '58', '51', '54', '17', '58'],
+ ['19', '80', '81', '68', '05', '94', '47', '69', '28', '73', '92', '13', '86', '52', '17', '77', '04', '89', '55', '40'],
+ ['04', '52', '08', '83', '97', '35', '99', '16', '07', '97', '57', '32', '16', '26', '26', '79', '33', '27', '98', '66'],
+ ['88', '36', '68', '87', '57', '62', '20', '72', '03', '46', '33', '67', '46', '55', '12', '32', '63', '93', '53', '69'],
+ ['04', '42', '16', '73', '38', '25', '39', '11', '24', '94', '72', '18', '08', '46', '29', '32', '40', '62', '76', '36'],
+ ['20', '69', '36', '41', '72', '30', '23', '88', '34', '62', '99', '69', '82', '67', '59', '85', '74', '04', '36', '16'],
+ ['20', '73', '35', '29', '78', '31', '90', '01', '74', '31', '49', '71', '48', '86', '81', '16', '23', '57', '05', '54'],
+ ['01', '70', '54', '71', '83', '51', '54', '69', '16', '92', '33', '48', '61', '43', '52', '01', '89', '19', '67', '48']
+ ]
+
+# Firstly, this data input creates a list-of-lists which have cells of the ```string``` data type.
+
+# loop over row dimension
+for row in range(len(table)):
+ # loop over column dimension
+ for column in range(len(table[row])):
+ # convert data type from string to int
+ table[row][column] = int(table[row][column])
+
+# create a dictionary that stores information about the solution
+solution = {
+ 'product':1,
+ 'cella':(0,0),
+ 'cellb':(0,0),
+ 'cellc':(0,0),
+ 'celld':(0,0)
+}
+
+# We know brute force will work...
+# Can we can scan through this list-of-lists, following the accepted pattern, and store the largest product?
+
+solution = check_horizontal(table,solution)
+print(solution)
+
+solution = check_vertical(table,solution)
+print(solution)
+
+solution = check_upwards_diagonals(table,solution)
+print(solution)
+
+solution = check_downwards_diagonals(table,solution)
+print('Final Answer!')
+print(solution)
\ No newline at end of file
diff --git a/problems/013_problem/013_problem.py b/problems/013_problem/013_problem.py
new file mode 100644
index 0000000..119679c
--- /dev/null
+++ b/problems/013_problem/013_problem.py
@@ -0,0 +1,280 @@
+# # Problem 13:
+#
+# [Euler Project #13](https://projecteuler.net/problem=13)
+#
+#
+# > Work out the first ten digits of the sum of the following one-hundred 50-digit numbers.
+#
+# > 37107287533902102798797998220837590246510135740250
+# > 46376937677490009712648124896970078050417018260538
+# > 74324986199524741059474233309513058123726617309629
+# > 91942213363574161572522430563301811072406154908250
+# > 23067588207539346171171980310421047513778063246676
+# > 89261670696623633820136378418383684178734361726757
+# > 28112879812849979408065481931592621691275889832738
+# > 44274228917432520321923589422876796487670272189318
+# > 47451445736001306439091167216856844588711603153276
+# > 70386486105843025439939619828917593665686757934951
+# > 62176457141856560629502157223196586755079324193331
+# > 64906352462741904929101432445813822663347944758178
+# > 92575867718337217661963751590579239728245598838407
+# > 58203565325359399008402633568948830189458628227828
+# > 80181199384826282014278194139940567587151170094390
+# > 35398664372827112653829987240784473053190104293586
+# > 86515506006295864861532075273371959191420517255829
+# > 71693888707715466499115593487603532921714970056938
+# > 54370070576826684624621495650076471787294438377604
+# > 53282654108756828443191190634694037855217779295145
+# > 36123272525000296071075082563815656710885258350721
+# > 45876576172410976447339110607218265236877223636045
+# > 17423706905851860660448207621209813287860733969412
+# > 81142660418086830619328460811191061556940512689692
+# > 51934325451728388641918047049293215058642563049483
+# > 62467221648435076201727918039944693004732956340691
+# > 15732444386908125794514089057706229429197107928209
+# > 55037687525678773091862540744969844508330393682126
+# > 18336384825330154686196124348767681297534375946515
+# > 80386287592878490201521685554828717201219257766954
+# > 78182833757993103614740356856449095527097864797581
+# > 16726320100436897842553539920931837441497806860984
+# > 48403098129077791799088218795327364475675590848030
+# > 87086987551392711854517078544161852424320693150332
+# > 59959406895756536782107074926966537676326235447210
+# > 69793950679652694742597709739166693763042633987085
+# > 41052684708299085211399427365734116182760315001271
+# > 65378607361501080857009149939512557028198746004375
+# > 35829035317434717326932123578154982629742552737307
+# > 94953759765105305946966067683156574377167401875275
+# > 88902802571733229619176668713819931811048770190271
+# > 25267680276078003013678680992525463401061632866526
+# > 36270218540497705585629946580636237993140746255962
+# > 24074486908231174977792365466257246923322810917141
+# > 91430288197103288597806669760892938638285025333403
+# > 34413065578016127815921815005561868836468420090470
+# > 23053081172816430487623791969842487255036638784583
+# > 11487696932154902810424020138335124462181441773470
+# > 63783299490636259666498587618221225225512486764533
+# > 67720186971698544312419572409913959008952310058822
+# > 95548255300263520781532296796249481641953868218774
+# > 76085327132285723110424803456124867697064507995236
+# > 37774242535411291684276865538926205024910326572967
+# > 23701913275725675285653248258265463092207058596522
+# > 29798860272258331913126375147341994889534765745501
+# > 18495701454879288984856827726077713721403798879715
+# > 38298203783031473527721580348144513491373226651381
+# > 34829543829199918180278916522431027392251122869539
+# > 40957953066405232632538044100059654939159879593635
+# > 29746152185502371307642255121183693803580388584903
+# > 41698116222072977186158236678424689157993532961922
+# > 62467957194401269043877107275048102390895523597457
+# > 23189706772547915061505504953922979530901129967519
+# > 86188088225875314529584099251203829009407770775672
+# > 11306739708304724483816533873502340845647058077308
+# > 82959174767140363198008187129011875491310547126581
+# > 97623331044818386269515456334926366572897563400500
+# > 42846280183517070527831839425882145521227251250327
+# > 55121603546981200581762165212827652751691296897789
+# > 32238195734329339946437501907836945765883352399886
+# > 75506164965184775180738168837861091527357929701337
+# > 62177842752192623401942399639168044983993173312731
+# > 32924185707147349566916674687634660915035914677504
+# > 99518671430235219628894890102423325116913619626622
+# > 73267460800591547471830798392868535206946944540724
+# > 76841822524674417161514036427982273348055556214818
+# > 97142617910342598647204516893989422179826088076852
+# > 87783646182799346313767754307809363333018982642090
+# > 10848802521674670883215120185883543223812876952786
+# > 71329612474782464538636993009049310363619763878039
+# > 62184073572399794223406235393808339651327408011116
+# > 66627891981488087797941876876144230030984490851411
+# > 60661826293682836764744779239180335110989069790714
+# > 85786944089552990653640447425576083659976645795096
+# > 66024396409905389607120198219976047599490197230297
+# > 64913982680032973156037120041377903785566085089252
+# > 16730939319872750275468906903707539413042652315011
+# > 94809377245048795150954100921645863754710598436791
+# > 78639167021187492431995700641917969777599028300699
+# > 15368713711936614952811305876380278410754449733078
+# > 40789923115535562561142322423255033685442488917353
+# > 44889911501440648020369068063960672322193204149535
+# > 41503128880339536053299340368006977710650566631954
+# > 81234880673210146739058568557934581403627822703280
+# > 82616570773948327592232845941706525094512325230608
+# > 22918802058777319719839450180888072429661980811197
+# > 77158542502016545090413245809786882778948721859617
+# > 72107838435069186155435662884062257473692284509516
+# > 20849603980134001723930671666823555245252804609722
+# > 53503534226472524250874054075591789781264330331690
+#
+#
+# ---
+import os
+import pprint
+import time # Typically imported for sleep function, to slow down execution in terminal.
+import typing
+import decorators # Typically imported to compute execution duration of functions.
+import math
+import numpy
+
+# ### Import the data table above. Let's be lazy and use the nice multi-cursor feature of the code editor.
+
+numbers = [ '37107287533902102798797998220837590246510135740250',
+ '46376937677490009712648124896970078050417018260538',
+ '74324986199524741059474233309513058123726617309629',
+ '91942213363574161572522430563301811072406154908250',
+ '23067588207539346171171980310421047513778063246676',
+ '89261670696623633820136378418383684178734361726757',
+ '28112879812849979408065481931592621691275889832738',
+ '44274228917432520321923589422876796487670272189318',
+ '47451445736001306439091167216856844588711603153276',
+ '70386486105843025439939619828917593665686757934951',
+ '62176457141856560629502157223196586755079324193331',
+ '64906352462741904929101432445813822663347944758178',
+ '92575867718337217661963751590579239728245598838407',
+ '58203565325359399008402633568948830189458628227828',
+ '80181199384826282014278194139940567587151170094390',
+ '35398664372827112653829987240784473053190104293586',
+ '86515506006295864861532075273371959191420517255829',
+ '71693888707715466499115593487603532921714970056938',
+ '54370070576826684624621495650076471787294438377604',
+ '53282654108756828443191190634694037855217779295145',
+ '36123272525000296071075082563815656710885258350721',
+ '45876576172410976447339110607218265236877223636045',
+ '17423706905851860660448207621209813287860733969412',
+ '81142660418086830619328460811191061556940512689692',
+ '51934325451728388641918047049293215058642563049483',
+ '62467221648435076201727918039944693004732956340691',
+ '15732444386908125794514089057706229429197107928209',
+ '55037687525678773091862540744969844508330393682126',
+ '18336384825330154686196124348767681297534375946515',
+ '80386287592878490201521685554828717201219257766954',
+ '78182833757993103614740356856449095527097864797581',
+ '16726320100436897842553539920931837441497806860984',
+ '48403098129077791799088218795327364475675590848030',
+ '87086987551392711854517078544161852424320693150332',
+ '59959406895756536782107074926966537676326235447210',
+ '69793950679652694742597709739166693763042633987085',
+ '41052684708299085211399427365734116182760315001271',
+ '65378607361501080857009149939512557028198746004375',
+ '35829035317434717326932123578154982629742552737307',
+ '94953759765105305946966067683156574377167401875275',
+ '88902802571733229619176668713819931811048770190271',
+ '25267680276078003013678680992525463401061632866526',
+ '36270218540497705585629946580636237993140746255962',
+ '24074486908231174977792365466257246923322810917141',
+ '91430288197103288597806669760892938638285025333403',
+ '34413065578016127815921815005561868836468420090470',
+ '23053081172816430487623791969842487255036638784583',
+ '11487696932154902810424020138335124462181441773470',
+ '63783299490636259666498587618221225225512486764533',
+ '67720186971698544312419572409913959008952310058822',
+ '95548255300263520781532296796249481641953868218774',
+ '76085327132285723110424803456124867697064507995236',
+ '37774242535411291684276865538926205024910326572967',
+ '23701913275725675285653248258265463092207058596522',
+ '29798860272258331913126375147341994889534765745501',
+ '18495701454879288984856827726077713721403798879715',
+ '38298203783031473527721580348144513491373226651381',
+ '34829543829199918180278916522431027392251122869539',
+ '40957953066405232632538044100059654939159879593635',
+ '29746152185502371307642255121183693803580388584903',
+ '41698116222072977186158236678424689157993532961922',
+ '62467957194401269043877107275048102390895523597457',
+ '23189706772547915061505504953922979530901129967519',
+ '86188088225875314529584099251203829009407770775672',
+ '11306739708304724483816533873502340845647058077308',
+ '82959174767140363198008187129011875491310547126581',
+ '97623331044818386269515456334926366572897563400500',
+ '42846280183517070527831839425882145521227251250327',
+ '55121603546981200581762165212827652751691296897789',
+ '32238195734329339946437501907836945765883352399886',
+ '75506164965184775180738168837861091527357929701337',
+ '62177842752192623401942399639168044983993173312731',
+ '32924185707147349566916674687634660915035914677504',
+ '99518671430235219628894890102423325116913619626622',
+ '73267460800591547471830798392868535206946944540724',
+ '76841822524674417161514036427982273348055556214818',
+ '97142617910342598647204516893989422179826088076852',
+ '87783646182799346313767754307809363333018982642090',
+ '10848802521674670883215120185883543223812876952786',
+ '71329612474782464538636993009049310363619763878039',
+ '62184073572399794223406235393808339651327408011116',
+ '66627891981488087797941876876144230030984490851411',
+ '60661826293682836764744779239180335110989069790714',
+ '85786944089552990653640447425576083659976645795096',
+ '66024396409905389607120198219976047599490197230297',
+ '64913982680032973156037120041377903785566085089252',
+ '16730939319872750275468906903707539413042652315011',
+ '94809377245048795150954100921645863754710598436791',
+ '78639167021187492431995700641917969777599028300699',
+ '15368713711936614952811305876380278410754449733078',
+ '40789923115535562561142322423255033685442488917353',
+ '44889911501440648020369068063960672322193204149535',
+ '41503128880339536053299340368006977710650566631954',
+ '81234880673210146739058568557934581403627822703280',
+ '82616570773948327592232845941706525094512325230608',
+ '22918802058777319719839450180888072429661980811197',
+ '77158542502016545090413245809786882778948721859617',
+ '72107838435069186155435662884062257473692284509516',
+ '20849603980134001723930671666823555245252804609722',
+ '53503534226472524250874054075591789781264330331690'
+]
+
+# Data Prep
+# - Firstly, this data input creates a list which have cells of the ```string``` data type.
+# - The strings should be parsed into type ```int``` at some point.
+#
+# ### Solution Approach
+# Can we just employ old-school arithmetic by summing the integers by columns, right to left,
+# carrying over anything greater than *9* to the next column?
+
+# loop over all 50 numbers in the input to convert the string
+# into a list of characters, still as tpye: string
+for row in range(len(numbers)):
+ numbers[row] = list(numbers[row])
+
+ # loop across the newly formed list to convert the string
+ # character into an integer
+ for digit in range(len(numbers[row])):
+ numbers[row][digit] = int(numbers[row][digit])
+
+
+# time to employ the "old math" by running down the columns
+# and summing... Dont forget to carry-over!
+
+# Let's store the sums into a list...
+solution_digits=[]
+column_carryover = 0
+
+print(len(numbers))
+print(len(numbers[0]))
+
+for places in range(len(numbers[0])):
+ # initialize the column sum
+ places = len(numbers[0])-places-1
+ #print(places)
+ column_sum = 0
+
+ for term in range(len(numbers)):
+ #print("row=",term,", column=",places)
+ column_sum+=numbers[term][places]
+
+ column_sum+=column_carryover
+ print(column_sum)
+ column_carryover=0
+ column_sum_element = int(list(str(column_sum))[-1])
+ solution_digits.append(column_sum_element)
+
+
+ column_sum *= 0.1
+ column_carryover = column_sum.__trunc__()
+
+solution_digits.append(column_carryover)
+print(solution_digits)
+
+solution_digits.reverse()
+string=""
+for i in solution_digits[:10]:
+ string+=str(i)
+
+print("The solution is ",string)
diff --git a/problems/013_problem_jnotebook.ipynb b/problems/013_problem/013_problem_jnotebook.ipynb
similarity index 100%
rename from problems/013_problem_jnotebook.ipynb
rename to problems/013_problem/013_problem_jnotebook.ipynb
diff --git a/problems/014_problem/014_problem.py b/problems/014_problem/014_problem.py
new file mode 100644
index 0000000..edd4bb8
--- /dev/null
+++ b/problems/014_problem/014_problem.py
@@ -0,0 +1,50 @@
+# # Problem 14:
+#
+# [Euler Project #14](https://projecteuler.net/problem=14)
+#
+#
+#
+# > The following iterative sequence is defined for the set of positive integers:
+# >
+# > n → n/2 (n is even)
+# > n → 3n + 1 (n is odd)
+# >
+# > Using the rule above and starting with 13, we generate the following sequence:
+# > 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1
+# >
+# > It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms. Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at 1.
+# >
+# > Which starting number, under one million, produces the longest chain?
+# >
+# > NOTE: Once the chain starts the terms are allowed to go above one million.
+#
+#
+# ---
+import os
+
+def collatz_length(n: int):
+ count=0
+ while n != 1:
+ if n%2 == 0:
+ n=int(n/2)
+ count+=1
+ else:
+ n=int(3*n+1)
+ count+=1
+ return int(count+1)
+
+# I can't think of a way to simplify the problem, so brute force then???
+
+# initialize a dictionary for storage
+solution_dict = {
+ 'candidate': 1,
+ 'length': 1
+}
+
+for i in range(1000000):
+ length=collatz_length(i+1)
+ if length > solution_dict['length']:
+ solution_dict['candidate']=i
+ solution_dict['length']=length
+
+print("The longest sequence was ",solution_dict['length']," members long, with a starting number of ",solution_dict['candidate'])
\ No newline at end of file
diff --git a/problems/014_problem_jnotebook.ipynb b/problems/014_problem/014_problem_jnotebook.ipynb
similarity index 100%
rename from problems/014_problem_jnotebook.ipynb
rename to problems/014_problem/014_problem_jnotebook.ipynb