How to find the offset of the last instance of a repeating character in a string? (Geoff Canyon)

Alex Tweedly alex at tweedly.net
Fri Nov 2 22:10:36 EDT 2018


On 03/11/2018 00:43, Geoff Canyon via use-livecode wrote:
> I like that, changing it. Now available at
> https://github.com/gcanyon/alloffsets
>
> One thing I don't see how to do without significantly impacting performance
> is to return all offsets if there are overlapping strings. For example:
>
> allOffsets("aba","abababa")
>
> would return 1,5, when it might be reasonable to expect it to return 1,3,5.
> Using the offset function with numToSkip would make that easy; adapting
> allOffsets to do so would be harder to do cleanly I think.
>
Can I suggest changing it to "someOffsets()" :-) :-)

But seriously, can you not iteratively run "allofsets" ?
something like .... (typed straight into email - totally untested)

function allOffsets pDel, pStr
  repeat with c = 1 to 255  -- or some other upper limit ?
     if NOT pDel contains numtochar(c) then
        put numtochar(c) into c
        exit repeat
     end if
   end repeat
   repeat forever
     put someOffsets(pDel, pStr) into newR
     if the number of items in newR = 0 then exit repeat
     repeat for each item I in newR
        put c into char I of newR
     end repeat
     put newR after R
   end repeat
   sort items of R numeric
   return R
end alloffsets

-- Alex.




More information about the use-livecode mailing list