Hey, I'm currently doing Project Euler's problem 36, a rather simple
problem. The thing is I've just started learning J and I'm having some
problems finishing this problem...

Problem 36
31 January 2003

The decimal number, 585 = 10010010012 (binary), is palindromic in both
bases.

Find the sum of all numbers, less than one million, which are palindromic in
base 10 and base 2.

(Please note that the palindromic number, in either base, may not include
leading zeros.)

One of the things I can't do is one line programs, I always have to break it
up in several pieces and variables, because if I don't my machine will
usually lock up. In this problem I can't run my functions trough the range
of 1-1e6, my machine always jams.

I'll ask your help here in how would I make an optimized algorithm that only
have to run once...


I have created a couple functions:

To see if the number is a palindrome:
     isp=: verb : 'y = 10 #. |. "."0": y'
To see if the number is a palindrome in binary:
     isp2=: '(10 #. #: y) = (10 #. |. #: y)' NB. this one actually dosen't
works =(
     (10 #. #: 585) = (10 #. |. #: 585) NB. but doing like this works

In the second case, for instance, I do the same operation twice (#: 585) but
I don't know how to optimize that....

If those functions worked here's how would I continue:

First go trough 1-1e6 and do isp for each number NB. the machine locked up
here
Store that in a variable
Grab that variable and do a # 1e6 with them
Store all the palindromes in base 2 in a variable
Now run isp2 for all the elements of that list
Do a # with those elements and the variable that stored the palindromes in
base two
+/ all the remaining itens

So as you can see my solution is far from optimal or "clean", and it dosen't
even works =(
I wanted to run the loop only once, and store the values that are
palindromes in both bases without having to do the (0 1 0 ... # elements).
If possible without building functions and other variables. And optimizing
my code, without having to do the same operations twice, etc.

Please don't think I'm asking for help here to have the problem solved for
me, It's a rather simple problem and I could do it in C, I'm here asking for
your help because I wan't to learn J.

Thanks in advance and sorry for the long and unorganized post,
Bruno.
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to