tag:blogger.com,1999:blog-7577421612120825312.post5368918422278877279..comments2023-10-03T10:41:13.944+01:00Comments on Functional Fun: Project Euler Problem 11Anonymoushttp://www.blogger.com/profile/01345100698738870730noreply@blogger.comBlogger8125tag:blogger.com,1999:blog-7577421612120825312.post-21024192672017565222012-11-22T02:38:28.320+00:002012-11-22T02:38:28.320+00:00well, it didn't preserve tabs (or spaces) Horr...well, it didn't preserve tabs (or spaces) Horray! see below for code, replace ~ with tabs:<br /><br />import time<br />a = [8,2,22,97,38,15,0,40,0,75,4,5,7,78,52,12,50,77,91,8,49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,4,56,62,0,81,49,31,73,55,79,14,29,93,71,40,67,53,88,30,3,49,13,36,65,52,70,95,23,4,60,11,42,69,24,68,56,1,32,56,71,37,2,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,3,45,2,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,2,62,12,20,95,63,94,39,63,8,40,91,66,49,94,21,24,55,58,5,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72,21,36,23,9,75,0,76,44,20,45,35,14,0,61,33,97,34,31,33,95,78,17,53,28,22,75,31,67,15,94,3,80,4,62,16,14,9,53,56,92,16,39,5,42,96,35,31,47,55,58,88,24,0,17,54,24,36,29,85,57,86,56,0,48,35,71,89,7,5,44,44,37,44,60,21,58,51,54,17,58,19,80,81,68,5,94,47,69,28,73,92,13,86,52,17,77,4,89,55,40,4,52,8,83,97,35,99,16,7,97,57,32,16,26,26,79,33,27,98,66,88,36,68,87,57,62,20,72,3,46,33,67,46,55,12,32,63,93,53,69,4,42,16,73,38,25,39,11,24,94,72,18,8,46,29,32,40,62,76,36,20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74,4,36,16,20,73,35,29,78,31,90,1,74,31,49,71,48,86,81,16,23,57,5,54,1,70,54,71,83,51,54,69,16,92,33,48,61,43,52,1,89,19,67,48]<br /><br />start = time.time()<br /><br />maxproduct = 0<br /><br />#vertical and diagonals<br />for i in range(0,16):<br />~for j in range (0,20):<br />~~for k in range(-1,2):<br />~~~if (j+3*k >= 0 and j+3*k <= 20):<br />~~~~product = 1<br />~~~~for x in range(0,4):<br />~~~~~product *= a[20*(i+x)+j+(x*k)]<br />~~~~if product > maxproduct:<br />~~~~~maxproduct = product<br />#horizontals<br />for i in range(0,20):<br />~for j in range (0,16):<br />~~product = 1<br />~~for x in range(0,4):<br />~~~product *= a[20*(i)+j+(x)]<br />~~if product > maxproduct:<br />~~~maxproduct = product<br />print maxproduct<br />print time.time()-startChrisnoreply@blogger.comtag:blogger.com,1999:blog-7577421612120825312.post-26478504169023333002012-11-22T02:35:28.597+00:002012-11-22T02:35:28.597+00:00As other people are posting programs, here is my i...As other people are posting programs, here is my implementation in python. It is quite short and succinct. (I think so anyway):<br /><br />import time<br />a = [8,2,22,97,38,15,0,40,0,75,4,5,7,78,52,12,50,77,91,8,49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,4,56,62,0,81,49,31,73,55,79,14,29,93,71,40,67,53,88,30,3,49,13,36,65,52,70,95,23,4,60,11,42,69,24,68,56,1,32,56,71,37,2,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,3,45,2,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,2,62,12,20,95,63,94,39,63,8,40,91,66,49,94,21,24,55,58,5,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72,21,36,23,9,75,0,76,44,20,45,35,14,0,61,33,97,34,31,33,95,78,17,53,28,22,75,31,67,15,94,3,80,4,62,16,14,9,53,56,92,16,39,5,42,96,35,31,47,55,58,88,24,0,17,54,24,36,29,85,57,86,56,0,48,35,71,89,7,5,44,44,37,44,60,21,58,51,54,17,58,19,80,81,68,5,94,47,69,28,73,92,13,86,52,17,77,4,89,55,40,4,52,8,83,97,35,99,16,7,97,57,32,16,26,26,79,33,27,98,66,88,36,68,87,57,62,20,72,3,46,33,67,46,55,12,32,63,93,53,69,4,42,16,73,38,25,39,11,24,94,72,18,8,46,29,32,40,62,76,36,20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74,4,36,16,20,73,35,29,78,31,90,1,74,31,49,71,48,86,81,16,23,57,5,54,1,70,54,71,83,51,54,69,16,92,33,48,61,43,52,1,89,19,67,48]<br /><br />start = time.time()<br /><br />maxproduct = 0<br /><br />#vertical and diagonals<br />for i in range(0,16):<br /> for j in range (0,20):<br /> for k in range(-1,2):<br /> if (j+3*k >= 0 and j+3*k <= 20):<br /> product = 1<br /> for x in range(0,4):<br /> product *= a[20*(i+x)+j+(x*k)]<br /> if product > maxproduct:<br /> maxproduct = product<br />#horizontals<br />for i in range(0,20):<br /> for j in range (0,16):<br /> product = 1<br /> for x in range(0,4):<br /> product *= a[20*(i)+j+(x)]<br /> if product > maxproduct:<br /> maxproduct = product<br />print maxproduct<br />print time.time()-startChrisnoreply@blogger.comtag:blogger.com,1999:blog-7577421612120825312.post-65874673228303144172012-11-22T02:26:32.296+00:002012-11-22T02:26:32.296+00:00Short answer: no.
Long answer: each number is (pse...Short answer: no.<br />Long answer: each number is (pseudo)randomly generated - there are no number sequences that can be exploited to find a 'pure math' function that can find the answer. Of course a solution can be mathematically proven to be correct, but that wasn't the question.Anonnoreply@blogger.comtag:blogger.com,1999:blog-7577421612120825312.post-78541652019581493812011-03-04T08:06:06.509+00:002011-03-04T08:06:06.509+00:00This comment has been removed by a blog administrator.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-7577421612120825312.post-65623357313496716822009-12-08T21:57:45.518+00:002009-12-08T21:57:45.518+00:00Interesting. I'll have to take a look at Cloju...Interesting. I'll have to take a look at Clojure sometime!Anonymoushttps://www.blogger.com/profile/01345100698738870730noreply@blogger.comtag:blogger.com,1999:blog-7577421612120825312.post-42027006244826909422009-12-08T03:13:21.274+00:002009-12-08T03:13:21.274+00:00Sam: True,
But the point is to have "fun&quo...Sam: True,<br /><br />But the point is to have "fun". Anyway, here is a shorter version with Clojure:<br /><br />(defn transpose[matrix] <br />(for [n (range 0 (count matrix))] (map #(nth % n) matrix)))<br /><br />(defn rotate[matrix]<br /> (let [dim (count matrix)]<br /> (map #(for [n (range 0 (- dim %))]<br /> (nth (nth matrix n) (+ n %))) (range 0 dim))))<br /><br />(defn mirror[matrix] (map reverse matrix))<br /><br />(defn max-consecutive-4[input]<br /> (reduce max<br /> (map #(reduce * %)<br /> (mapcat #(partition 4 1 %)<br /> (concat <br /> (rotate input) (rest (rotate (transpose input))) (rotate (mirror input))<br /> (rest (rotate (transpose (mirror input)))) input (transpose input))))))<br /><br />assuming that grid is a two-dimensioanl vector containing the numbers.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-7577421612120825312.post-68319441573019759052009-04-27T19:36:00.000+01:002009-04-27T19:36:00.000+01:00Yes - work through the list, square by square, and...Yes - work through the list, square by square, and calculate the product of all lines of four numbers leading off from that square ;-)<br /><br />I don't believe there's any way cleverer than that - because we're not told that there is any deeper mathematical structure to the grid - for all intents and purposes, it contains random numbers.Anonymoushttps://www.blogger.com/profile/01345100698738870730noreply@blogger.comtag:blogger.com,1999:blog-7577421612120825312.post-78364346150220309222009-04-26T18:02:00.000+01:002009-04-26T18:02:00.000+01:00hey, is there any mathematical way to solve this c...hey, is there any mathematical way to solve this challenge? i mean with no programming.Anonymousnoreply@blogger.com