Я пишу игру со змеями в TI-Basic, и каждый раз, когда я двигаюсь, мне нужно посмотреть, не достигла ли голова змеи какой-либо точки в хвосте.Хвост хранится в виде кольцевой очереди на основе списка, и я могу добавить начало и конец в постоянное время.
Единственная сложная часть заключается в том, что мне приходится делать что-то похожее на каждую итерацию: (S= Размер списка)
For(I,1,S)
If X=LX(I) and Y=LY(I)
Then
Disp "GAME OVER"
Return
End
End
Это довольно короткий цикл, но он длится вечно даже в списке из 10 элементов.Я попробовал следующий способ:
If sum(seq(X=LX(I) and Y=LY(I),I,1,S))
...
Единственная другая оптимизация, о которой я могу подумать, это не проверять значения от N до N + 2 (потому что первая часть вашего хвоста, которую можно ударить, находится в N +3), но это только откладывает проблему после 4 очков, а игра, в которую нельзя играть с 14 очками, ничуть не лучше, чем игра без 10 очков.
Использование сборки не вариант, потому что я неесть кабель связи (или желание написать сборку).