an optimization to short circuit on first true, while sorting them in order.
break1 =: (1 : 'for_i. y do. if. u i do. i return. end. end.') (-: |.)@": break1 \:~ ~. , */~ 100+i.900 906609 timespacex '(-: |.)@": break1 \:~ ~. , */~ 100+i.900' 0.0350227 3.56737e7 timespacex ' >./ (#~ (-: |.)@":"0) , */~ 100+i. 900' 0.26438 1.78811e7 ----- Original Message ----- From: Roger Hui <[email protected]> To: Programming forum <[email protected]> Cc: Sent: Sunday, June 8, 2014 11:10:07 AM Subject: Re: [Jprogramming] Project Euler Question 4 Or apply the phrase to 900+i.100 instead of to 100+i.900. On Sun, Jun 8, 2014 at 8:07 AM, Roger Hui <[email protected]> wrote: > Slightly shorter if the formatted results are not converted back into > numbers: > > >./ (#~ (-: |.)@("."0@":)"0) , */~ 100+i. 900 > 906609 > >./ (#~ (-: |.)@":"0) , */~ 100+i. 900 > 906609 > > A different and perhaps less brutish method is to start with 6-digit > palindromes and see which ones have two 3-digits factors. > > > > > On Sun, Jun 8, 2014 at 8:00 AM, Henry Rich <[email protected]> wrote: > >> Brute force seems right for this problem. You could write your solution >> as >> >> >./ (#~ (-: |.)@("."0@":)"0) , */~ 100+i. 900 >> >> Henry Rich >> >> On 6/8/2014 10:46 AM, Jon Hough wrote: >> >>> I am pretty pleased that I completed Project Euler Q4. >>> Question: >>> >>> >>> A palindromic number reads the same both ways. The largest palindrome >>> made from the product of two 2-digit numbers is 9009 = 91 99. >>> >>> Find the largest palindrome made from the product of two 3-digit numbers. >>> >>> >>> https://projecteuler.net/problem=4 >>> >>> >>> My solution: >>> >>> base =. "."0 ": >>> >>> NB. Tests if y value is palindrome. >>> is_palindrome =. (# =)@:(=|.)@:base >>> NB. multiply all 3 digit nums (100 ~ 999) >>> mult =: (* is_palindrome"0) @ (*/) >>> NB. Create list of 3 digit nums. >>> list =. 100+ i.900 >>> >>> (>./)@:, list mult list >>> Although I'm glad got the answer, I'm wondering if it could be made >>> terser, or if there is a much terser way to solve it? I went for a brute >>> force approach. >>> For comparison here is a Haskell answer I found: >>> maximum[a*b|a<-[100..999],b<-[a..999],reverse(show(a*b))==show(a*b)] >>> Regards. >>> ---------------------------------------------------------------------- >>> For information about J forums see http://www.jsoftware.com/forums.htm >>> >>> ---------------------------------------------------------------------- >> For information about J forums see http://www.jsoftware.com/forums.htm >> > > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
