How to find the offset of the last instance of a repeating character in a string? (Geoff Canyon)
Brian Milby
brian at milby7.com
Sun Nov 4 19:01:55 EST 2018
Logic matches my solution. I also validated my solution using just the
offset function. Speed hit for with overlap is similar. One possible
optimization:
put kList is not empty into pWithOverlaps
If with overlaps was requested but the source delimiter did not contain any
overlaps, then the extra loops are skipped.
Adding a character to the end is clever. I'll need to incorporate that and
see what it does to my method.
My take on the code updates is here:
https://github.com/bwmilby/alloffsets/blob/bwm/bwm/allOffsets_Scripts/stack_allOffsets_button_id_1026.livecodescript
Stack and index of scripts here:
https://github.com/bwmilby/alloffsets/tree/bwm/bwm
On Sun, Nov 4, 2018 at 12:42 PM Geoff Canyon via use-livecode <
use-livecode at lists.runrev.com> wrote:
> Alex, good catch! The code below and at
> https://github.com/gcanyon/alloffsets now puts a stop character after the
> string to prevent the error you found. I also added a "with overlaps"
> option. I think this is correct, and about as efficient as possible, but
> thanks to anyone who finds a bug or a faster way.
>
> gc
>
>
> function allOffsets D,S,pCase,pWithOverlaps
> -- returns a comma-delimited list of the offsets of D in S
> set the caseSensitive to pCase is true
> put length(D) into dLength
> put numtochar(chartonum(char -1 of D) mod 2 + 1) after S
> if pWithOverlaps then
> repeat with i = 1 to dLength - 1
> if not (char i + 1 to -1 of D is char 1 to dLength - i of D) then
> next repeat
> put char -i to -1 of D into OV[i]
> put i & cr after kList
> end repeat
> end if
> set the itemDel to D
> put 1 - dLength into C
> if pWithOverlaps then
> repeat for each item i in S
> repeat for each line K in kList
> if char 1 to K of (i & D) is OV[K] then put (C + K),"" after R
> end repeat
> add length(i) + dLength to C
> put C,"" after R
> end repeat
> else
> repeat for each item i in S
> add length(i) + dLength to C
> put C,"" after R
> end repeat
> end if
> set the itemDel to comma
> repeat until item 1 of R > 0
> delete item 1 of R
> end repeat
> delete item -1 of R
> if R is empty then return 0 else return char 1 to -2 of R
> end allOffsets
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
>
More information about the use-livecode
mailing list