TI-84+计算器TI-Basic贪吃蛇:双元素子列表查找优化问询
高效查找TI-Basic列表中的二维子元素
核心优化思路
TI-Basic的循环执行效率极低,尤其是当列表长度超过100后,循环次数会直接拖慢程序响应。我们可以利用列表批量运算替代逐次循环,把原本的循环判断转为向量级的比较,大幅减少执行时间。
优化后的代码实现
:dim(L1)/2→N // 计算蛇的身体段数(每段占2个列表元素) :seq(L1(2I-1),I,1,N)→LX // 提取所有X坐标到LX列表 :seq(L1(2I),I,1,N)→LY // 提取所有Y坐标到LY列表 :max((LX=X) and (LY=Y))→P // 批量比较,存在匹配则P=1,否则0
代码说明
- 用
seq()函数一次性提取所有X/Y坐标,避免循环遍历 - 直接通过
(LX=X) and (LY=Y)生成布尔列表,每个元素对应一段身体是否匹配{X,Y} max()函数直接判断布尔列表中是否有1(存在匹配),无需累加计数
更进一步的性能优化
如果不想创建临时列表LX、LY,可以直接在seq里完成比较,节省内存同时减少步骤:
:max(seq((L1(2I-1)=X)*(L1(2I)=Y),I,1,dim(L1)/2))→P
这个版本不需要额外列表,直接生成匹配结果的列表,再取max判断,效率更高。
对比原代码的优势
原代码每次循环都要做判断和累加,且TI-Basic的For循环无法提前终止,哪怕已经找到匹配项仍会跑完所有循环。优化后的代码完全避免了循环,利用TI-Basic的内置列表运算特性,执行速度随列表长度增长的幅度远小于原循环方案,蛇移动的卡顿会明显缓解。
内容的提问来源于stack exchange,提问作者benji bon
相关产品推荐
相关产品推荐

