This comes in a bit simpler:
  pytrpla =: 3 : '/:~ |."1 >: 4$. $. (=/ >/~* +/~) *: }.i.>:y'

The >/~ phrase ensures you only get decreasing triples.

I was going to point out that I use something along the lines of ($#:I.@,) rather than 4$. $.
to locate ones in a boolean array, but on examination your
scant array idiom is much better in this case,  and seems
generally good,  so might be worth adding to the phrases list -
I couldn't see it there.

In any case, this exhaustive search approach eventually
blows up for y somewhere in 1000-2000, and as Raul
says, it's worth looking at the pythagorean triples lab.
There are several problems on these triples in "Project
Euler" which you might enjoy.

Mike


Tracy Harms wrote:
I have been looking at the Rosetta Code task entitled "List
Comprehension", here:
http://www.rosettacode.org/rosettacode/w/index.php?title=List_Comprehens
ion
<http://www.rosettacode.org/rosettacode/w/index.php?title=List_Comprehen
sion> J does not have any special syntax, so it cannot (I think) satisfy this
syntax-specific requirement. I can, however, build the list of
Pythagorean triples. Here's my solution:
Across =: 1 : '*./@(}: u }.)"_1'
   pytrpl =: 3 : '(#~ < Across) 2+ 4$. $. |: (=/ +/~) *: 2+i. 1-~ y'
pytrpl 22
 3  4  5
 5 12 13
 6  8 10
 8 15 17
 9 12 15
12 16 20
I'd be interested in knowing a tacit way to define the adverb, Across. I notice that the phrase (#~ < Across) has an ambiguity Bruno Daniel
criticized: whether this is a fork or a hook depends on whether Across
is verb or adverb. I used capitalization of initial letter to indicate
that it is an adverb, but some other naming convention might be better.
As for alternatives to pytrpl, what I'd find interesting are programs
that bring out the Pythagorean relationship. The heart of the program
listed here-- (=/ +/~) *: --seems rather buried.
The Haskell list comprehension syntax is attractive. It is notational,
and much like familiar set notation. If an analogous presentation can be
phrased in J, it's beyond my creative powers.

--
Tracy
----------------------------------------------------------------------
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