>>>>>>>>>>>
Thanks to all (Dragan, Marcia and Tore). I wonder which solution is the fastest?>>>>>>>>>>>
>>>>>>>>>>>Since you have all the code, why don't you test all the solutions and let us know?
>>>>>>>>>>
>>>>>>>>>>(Edit: This reply is for Yossi)
>>>>>>>>>>
>>>>>>>>>>I think Dranag's solution is the fastest and optimal, because analyze the string only once and using the minimal instruction set.
>>>>>>>>>>
>>>>>>>>>Imagine tcBig 650KB long with 10000 "A": the check will be done 10000 times,
>>>>>>>>>If the "A" is at the end of the resulting string, will take longer ;-)))
>>>>>>>>
>>>>>>>>You are right, and I didn't saw Marcia's algorithm that is excelent!
>>>>>>>>
>>>>>>>>This is the testing results of the 3 algorithms in my PC with a 50000 chars string:
>>>>>>>>
>>>>>>>>- Dragan: 52.5 secs and maintain the original order
>>>>>>>>- Tore: 30.9 secs and doesn't maintain original order (order is alphabetical because SQL)
>>>>>>>>- Marcia: 1.4 secs and maintain the original order => WINNER!
>>>>>>>>
>>>>>>>>Congrats Marcia! :D
>>>>>>>
>>>>>>>hmmm, Is it too late to enter the compiteition?
>>>>>>>
>>>>>>>
FUNCTION NonDupe(cString)
>>>>>>>LOCAL cNewStr
>>>>>>>
>>>>>>>cNewStr =""
>>>>>>>DO WHILE LEN(cString) > 0
>>>>>>> cNewStr = cNewStr + LEFT(cString,1)
>>>>>>> cString = STRTRAN(cString, LEFT(cString,1))
>>>>>>>ENDDO
>>>>>>>RETURN cNewStr
>>>>>>>ENDFUNC
>>>>>>>
>>>>>>>Which is shorter and faster than Marcia's alghorithm by 40% in my testing
>>>>>>>
>>>>>>>But all are nothing compared when you've got some C++ code working for you.
>>>>>>>The FoxTools.fll contains a function REDUCE() which is extremely fast on eliminating characters from a string.
>>>>>>>It has been written to reduce spaces but has a different role for other characters. It will remove them and replace with spaces.
>>>>>>>
>>>>>>>The following alghorith does not not work for detecting the space as a separate character, but if you're only concerned with non-space characters the following is about a 100 times faster than Marcia's routine.
>>>>>>>
>>>>>>>
>>>>>>>
FUNCTION NonDupe3(cString)
>>>>>>>LOCAL cNewStr
>>>>>>>
>>>>>>>cNewStr =""
>>>>>>>
>>>>>>>DO WHILE LEN(cString) > 0
>>>>>>> cNewStr = cNewStr + LEFT(cString,1)
>>>>>>> cString = LTRIM(REDUCE(cString, LEFT(cString,1)))
>>>>>>>ENDDO
>>>>>>>RETURN cNewStr
>>>>>>>ENDFUNC
>>>>>>>
>>>>>>>Walter,
>>>>>>
>>>>>>How is your entry competitive? You haven't done your own work, just refactored Marcia's entry. Easy to change what's been done rather than come up with a method yourself.
>>>>>
>>>>>John, How can be an entry of close to a 100x times faster, not be competitive?
>>>>>
>>>>>And no, my strategy is different: a cross between dragans and marcias... put on your glasses.
>>>>>On second look mine is just a minor variation on what Thomas wrote. However, I did not see that one (nor you) before I wrote mine.
>>>>>And I did not see anyone bring up REDUCE() in foxtools, did you?
>>>>>
>>>>>Boy you really have a problem with Dutch windmills huh?
>>>>
>>>>Your solution was identical to Marcia including the names, with the addition of 1 new command. Great Work.. You and Naomi win the prize for developerhood...
>>>
>>>Lets see:
>>>
>>>Marcia's solution;
>>>
>>>
>>>FUNCTION NonDupe(tcString)
>>>LOCAL lcNewString, lnI, lnLen, lcChar
>>>lcNewString = tcString
>>>lnLen = LEN(tcString)
>>>lnI = 1
>>>DO WHILE lnI < lnLen
>>> lcChar = SUBSTR(lcNewString, lnI, 1)
>>> IF OCCURS(lcChar, lcNewString) > 0
>>> lcNewString = STRTRAN(lcNewString, lcChar, '', 2, -1, 2)
>>> lnLen = LEN(lcNewString)
>>> ENDIF
>>> lnI = lnI + 1
>>>ENDDO
>>>RETURN lcNewString
>>>
>>>
>>>My solution:
>>>
>>>FUNCTION NonDupe(cString)
>>>LOCAL cNewStr
>>>
>>>cNewStr =""
>>>DO WHILE LEN(cString) > 0
>>> cNewStr = cNewStr + LEFT(cString,1)
>>> cString = LTRIM(REDUCE(cString, LEFT(cString,1)))
>>>ENDDO
>>>RETURN cNewStr
>>>ENDFUNC
>>>
>>>Marcia used 13 lines of code, I 7. Marcia, used only 1 string to do the work. I used 2. Performance difference, 2 orders of magnitude.
>>>Marcia used SUBSTR(), OCCURS(), STRTRAN(), I used LTRIM(), LEFT() and REDUCE()
>>>Yep, really identical, john...
>>>
>>>So where is your contribution John? You sound like the other john... a lot of bla bla bla, but not ever shown any competence in programming, unlike Naomi you only excel in cowardly trolling. Is that what you are John?
>>>
>>>Awaiting your apologies. Lets see whether you've gut the guts...
>>
>>How do you explain the same names? BTW, I haven't written fox code in nearly 10 years. So I have no example to show.
>
>Taking a look at another example and writing a solution with the similar names adds to the ability to compare them.
>But it does not take a genius to see that the interior coding is different. If you can't read that because you lost the ability to read foxcode, you'd better stay silent.
>
>So... do you have the guts? Still waiting for the apology.
Has nothing to do with guts. Don't feel the need to apologize...