enc=: 4 : 0
 m=. (-2&|) +/ b=. x E. y
 j=. (i.m)+(m$0,#x)+m$I. b
 (m$'{}') j} (-.(i.m+#y) e. j)#^:_1 y
)

x=: 'foo'
y=: 'x xfoo x x xxfoo gogo foofoo barfoo'

   x enc y
 x{foo x x xxfoo} gogo {foofoo} barfoo

However, if the substring occurrences overlap, enc
gives wrong answers:

   'abab' enc 'ababab inside ababab outside'
{ababab} inside {ababab} outside

In such cases, the E. in enc needs to be replaced 
by nos from the "Non-Overlapping Substrings" essay
http://www.jsoftware.com/jwiki/Essays/Non-Overlapping_Substrings
Thus:

nos=: 4 : 0
 s=. x [EMAIL PROTECTED] y
 i=. s I. s+#x
 (i.#y) e. (s,_1) {~ {&(i,_1)^:a: 0
)

enc1=: 4 : 0
 m=. (-2&|) +/ b=. x nos y
 j=. (i.m)+(m$0,#x)+m$I. b
 (m$'{}') j} (-.(i.m+#y) e. j)#^:_1 y
)

   'abab' enc1 'ababab inside ababab outside'
{ababab inside abab}ab outside
   x enc1 y
x x{foo x x xxfoo} gogo {foofoo} barfoo



----- Original Message -----
From: June Kim <[EMAIL PROTECTED]>
Date: Saturday, December 30, 2006 5:25 pm
Subject: [Jprogramming] text replacement without RE

> Could you come up with a verb enc, which encloses each substring that
> starts and ends with x in y without using RE? The substrings are
> discovered from the left.
> 
> Example:
> 
>   'foo' enc 'x xfoo x x xxfoo gogo foofoo barfoo'
> 'x x{foo x x xxfoo} gogo {foofoo} barfoo'
> 
> Happy new year!


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

Reply via email to