Taki projekt: https://youtu.be/Z3eBgXXaToU
Ogólnie mój algorytm działa, ale jest dosyć wolny ze względu na złożoność silniową. Jeśli gracz ma 10 kropek, znalezienie wszystkich kwadratów zajmuje ~1000ms, jak ma 20 kropek - ~20000ms.
Mój algorytm:
1) znajdź wszytskie 4-elementowe kombinacje w zbiorze kropek i zapisz je.
2) dla każdej kombinacji wyznacz 6 dystansów(1-2,2-3,3-4,4-1,1-3,2-4)
3) dla każdej szóstki dystansów wyznacz i zapisz ich wszystkie 6-elementowe wariacje(jest ich 120)
4) dla każdej takiej wariacji: jeśli pierwsze 4 dystanse są sobie równe(boki kwadratu) i ostatnie dwa są sobie równe(przekątne kwadratu), to znalazłeś kwadrat i przerwij pętlę szukającą kwadratu w wariacjach.
Wydaje mi się, że może być efektywny sposób połączenia 3 i 4 kroku, w każdym razie ta 6! mocno spowalnia algorytm.
Jak ktoś ma jakiś pomysł na usprawnienie algorytmu lub zupełnie inne rozwiązanie, to dajcie znać
PS: algorytm jest wywoływany za każdym razem, jak gracz wybierze kropkę - dla kropek gracza, który właśnie wybrał kropkę