Geoff.

Startling, and beautifully presented.

I had no idea ChatGPT was that powerful and knowledgeable.

We are doomed.

Craig

> On Jan 20, 2023, at 8:05 AM, Alex Tweedly via use-livecode 
> <use-livecode@lists.runrev.com> wrote:
> 
> Fascinating. Thank you so much for that Geoff.
> 
> I've been afraid to play with ChatGPT so far - too worried abut getting 
> sucked in and spending way too much time ....
> 
> I did take a look at your third example (since I can never resist a 
> performance challenge :-)
> 
> There are a number of minor tweaks that could be made to improve performance
> 
> 1. set initial value to infinity rather than calculating a distance between 
> the first two points.
> 
> 2. "number of elements in pPoints" is unvarying within any one call - so 
> extract it to a variable at the start
> 
> 3. use the square of the distance rather than the actual distance - save N**2 
> calls to sqrt
> 
> 4. use "DX * DX" rather than "DX ^ 2" (about 25% faster)
> 
> 5. calculate distance in-line rather than call a function
> 
> but those all add up to maybe 10% performance improvement (or less - I didn't 
> test it). That's useful - but not enough.
> 
> For a modest number of points (2000 random points), this takes approx 16.5 
> seconds !!
> 
> We need a better algorithm. If we use a "linear scan", we can change it from 
> essentially Order(N**2) to approx Order(N).
> 
> Summary:
> 
>  - sort the points by X coordinate
> 
>  - while scanning the inner loop, as soon as the difference in Xcoord from 
> the 'outer' point exceeds the minDist so far, you can reject not just this 
> point, but all subsequent points, and hence exit the inner loop immediately.
> 
> This brings the time down from 16500 millisecs to 25 millisecs.
> 
> BUT - I have no clue how I'd go about describing this to ChatGPT :-)
> 
> NB I changed the input parameter to be the list of points rather than the 
> array.
> 
> Code:
> 
> function closestPointsSQ pLines
>    sort pLines by item 1 of each
>    put pLines into pPoints
>    split pPoints by CR
>    put infinity into minDist
>    put the number of elements in pPoints into N
>    repeat with i = 1 to N-1
>       repeat with j = i + 1 to N
>          put item 1 of pPoints[j] - item 1 of pPoints[i] into t1
>          if t1 * t1 > minDist then exit repeat
>          put item 2 of pPoints[j] - item 2 of pPoints[i] into t2
>          put t1 * t1 + t2 * t2 into dist
>          if dist < minDist then
>             put dist into minDist
>             put pPoints[i] & " " & pPoints[j] into closestPoints
>          else if dist = minDist then
>             put return & pPoints[i] & " " & pPoints[j] after closestPoints
>          end if
>       end repeat
>    end repeat
>    return closestPoints
> end closestPointsSQ
> 
> -- Alex.
> 
> On 20/01/2023 06:02, Geoff Canyon via use-livecode wrote:
>> I tested three use cases, with variations, using ChatGPT for (live)code
>> generation. There was a lot of back and forth. In the end, I solved all the
>> problems I set, but in some cases I had to hold ChatGPT's hand pretty
>> tightly.
>> 
>> That said, I learned some things as well -- about LiveCode. ChatGPT's code
>> for Fizz Buzz was faster than mine.
>> 
>> My code was faster for reversing lines. But ChatGPT, when asked to "make
>> the code faster" gave several suggestions, some of which were wrong or
>> impossible, but one of them was my method, and when I said "write that
>> option" it did, with only a few corrections needed.
>> 
>> And one of the ideas, while wrong, caused me to think of a different way to
>> solve the problem, and that way ended up being faster than my original
>> solution by over 3x on reversing 10k lines. Getting ChatGPT to write this
>> new method was *hard*.
>> 
>> In any case, I wrote it all down in a google doc
>> <https://docs.google.com/document/d/1W3j5WaFhYZaqSt0ceRQj8j160945gSwG_nyZsCBP6v4/edit?usp=sharing>.
>> If you're curious, have a read. That URL is open for comments/edit
>> suggestions. If you have any I'd love to hear them.
>> 
>> Thanks!
>> 
>> Geoff
>> _______________________________________________
>> use-livecode mailing list
>> use-livecode@lists.runrev.com
>> Please visit this url to subscribe, unsubscribe and manage your subscription 
>> preferences:
>> http://lists.runrev.com/mailman/listinfo/use-livecode
> 
> _______________________________________________
> use-livecode mailing list
> use-livecode@lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription 
> preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode


_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to