Tacit variant:

break2=:1 :'(": 13!:8 (15"_))^:u"u :: (LF taketo }.@(13!:12)@(''''"_) )'
   (-: |.)@("."0@":)"0 break2 \:~ ~. , */~ 100+i.900

Henry Rich

On 6/8/2014 12:05 PM, 'Pascal Jasmin' via Programming wrote:
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

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to