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