> NB. colon separates monad and dyad sections

I did not know that, thanks.

Your solution is great. I'll have to spend a little time figuring out what's 
going on, but I can't find any flaws yet. And much more J-like than mine.

Regards,
Jon
--------------------------------------------
On Tue, 9/27/16, 'Mike Day' via Programming <[email protected]> wrote:

 Subject: Re: [Jprogramming] Zig Zag problem
 To: [email protected]
 Date: Tuesday, September 27, 2016, 10:38 PM
 
 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 <[email protected]>
 wrote:
 >
 >   Subject: Re: [Jprogramming]
 Zig Zag problem
 >   To: [email protected]
 >   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
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to