Yes, our messages crossed.
I'm lazy with verb definitions, nearly always using 3 : 0 even
for a dyad. I could have written
cv =: 3 : 0
3 cv y NB. monad section: supply a default larg for monad use
: NB. colon separates monad and dyad sections
[dyad section]
)
then 3 would be the default left arg if used as a monad.
As it is, attempting to use it as a monad will result in a
domain error.
In my example tableau for depth 5, I should have pointed out
that the differences between columns are alternately 8 6 4 2 0 and 0 2 4 6 8
Any clearer?
Mike
On 27/09/2016 14:22, 'Jon Hough' via Programming wrote:
Sorry, I gave the correct verb in my second mail.
Thanks for your solution. I'm not really sure I understand what cv is...
Is it a monad (i.e. 3 : 0)? It has a reference to the x argument, so it seems
to be a dyad.
Also, what is the purpose of the colon on the first line of cv?
Thanks,
Jon
--------------------------------------------
On Tue, 9/27/16, 'Mike Day' via Programming <programm...@jsoftware.com> wrote:
Subject: Re: [Jprogramming] Zig Zag problem
To: programm...@jsoftware.com
Date: Tuesday, September 27, 2016, 10:12 PM
rmo's definition?
Anyway, here's an approach
which works on the indices.
Please note that
I haven't tested it thoroughly for boundary problems.
I just consider the rising
diagonals as extra columns. Top & bottom
indices will be reduplicated, but can be
removed with nub.
eg for
LHA = 5, we get this index array:
0 8
(8)
1 7 9
2
6 10
3 5 11 ..
4 (4)
12 (12)
It actually works
on the transpose first.
cv
=: 3 : 0
:
n =. x
difs =. (,:~|.) +:@i. n <.l =. #y
start=. i.n<.l
nstep=. (0
>. l-n) >.@% n-1
y{~ l-.~
~.l<.,|:+/\start,nstep$difs
)
3 4 5 cv each/
'';'paypa';1 2 3
4;'paypalishiring'
++-----+-------+--------------+
||paapy|1 2 4 3|pahnaplsiigyir|
++-----+-------+--------------+
||payap|1 2 3 4|pinalsigyahrpi|
++-----+-------+--------------+
||paypa|1 2 3 4|phasiyirpligan|
++-----+-------+--------------+
Any use?
Mike
On 27/09/2016 13:02, 'Jon Hough' via
Programming wrote:
> This is a
programming challenge from here:
https://leetcode.com/problems/zigzag-conversion/
> The challenge is to convert a string into
a "zig zag" formation with the given number of
rows.
>
> e.g. (from
the link)
> PAYPALISHIRING is transformed
into PAHNAPLSIIGYIR (the link explains clearly this
transformation)
>
>
This is my solution, which works.
>
>
> NB. Convert text into
a zigzag text.
> NB. x: number of row
(positive integer)
> NB. y: string
text
> convert =: 4 : 0
> rows =. x
> text =.
y
> len =. # y
> if. 0
= len do. ''
> elseif. 1 = len
do. text
> elseif. 1 = rows do. text
> elseif. 1 do.
> k=.
0
> l=. 0
> res =.
''
> NB. loop through the rows
> while. (k < rows) *. k < len do.
> res =. res, k{text
>
NB. how much to increment. first and last rows are
special
> NB. cases, inner rows switch
the increment.
> nextMax =. (2 * rows) -
2
> rm1 =. rows - 1
>
l1 =.
((+:@:(rm1&-))`(nextMax&[)@.((rmo&=)+.(0&=)))
k
> l2 =.
((+:)`(nextMax&[)@.((rm1&=)+.(0&=)))k
> NB. first incremented value
> nextIndex =. k + l1
>
NB. flag indicates which increment to use.
> flag =. 1
> while.
nextIndex < len do.
> res =. res,
nextIndex{text
> flag =. (flag = 0)
> if. flag do. nextIndex =. nextIndex +
l1
> else. nextIndex =. nextIndex + l2
> end.
> end.
> k =. k + 1 NB. increment the row
> end.
> res
> end.
>
> )
>
> 3 convert 'PAYPALISHIRING'
>
> It's an
interesting challenge and I'm sure there is a much nicer
way to do this in J...
>
> Regards,
> Jon
>
----------------------------------------------------------------------
> 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