Answers:
您的计算器可以很聪明地为您推断行尾,因此您可以省略很多字符。
:Disp "HELLO WORLD //is the same as...
:Disp "HELLO WORLD"
For(
循环的语法是这样的- For(variable, start, end, increment)
,但是您可以省略增量,它将使用1:
:For(A,1,5 //is the same as...
:For(A,1,5,1)
并且您可以全面省略结尾括号(在行尾):
:Output(1,1,A
:int(A
:round(A
etc.
在我的TI-84银版计算器上测试
如果您认为这是一个以上的想法(推断结局),那么我将其分解
not(iPart(B))+(A=5
可以(A=5)+not(iPart(B
。
{lists}
,"strings"
和[[matrices]]
)。当您到达换行符,冒号(换行符的代表;但不适用于字符串,因为它们可能包含冒号)或变量赋值箭头(→
,使用STO▶`按钮键入)时,表达式将自动关闭。)。这种语言的怪异特征。
稍微先进的提示:
小型查询表对于代码搜索非常有用:通常,我们需要一个将0映射为1、1、2映射为2、2映射为1以及将其他所有内容映射为0的函数。但是,TI-BASIC数组不适合为此:一方面,它们是基于一个的;另一方面,除非将数组存储在Ans
列表变量中,否则无法提取值。
在这里的答案中,我将一个小的查询表存储在以11为基数的魔术常数中。只需列出要使用的值,
{0,-1,5,-1,-1,2,9,-1,8,6}
转换成有用的形式
{1,0,6,0,0,3,10,0,9,7}
写出您想要的基础(基础11)
.106003A097
并转换为基数10
-1+int(11fPart(11^Ans.0954191904
最短的数组方法要长8个字节!
{1,0,6,0,0,3,10,0,9,7}-1:Ans(X+1
TI-BASIC仅存储浮点数到14个十进制数字,因此您最多可以存储44位,但只能存储14个十进制数字。
通常可以通过使用蛮力搜索来查找魔术常数而不是base-N编码来进一步改进此技术。我仍在寻找上述答案的过程中,但TI-BASIC高尔夫球手Weregoose 使用此方法6, 4, 2, 4, 2, 4, 6, 2
在wiki /论坛TI-BASIC上生成数字互质数与30(即的重复列表)之间的差异。使用此代码段的开发人员:
2+2iPart(3fPart(576e^(fPart(I/8
魔法常数576是使用Mathematica找到的,但是如果您没有副本,请使用自己喜欢的语言编写脚本。
放置重复的表达式方程式变量。
例如:
Remainder(randInt(1,9),1
Remainder(randInt(1,9),5
Remainder(randInt(1,9),10
可:
"randInt(1,9→u
Remainder(u,1
Remainder(u,5
Remainder(u,10
注意:很难找到一个好的用法,但这并不意味着您应该忘记方程变量:P
资料来源:http : //tibasicdev.wikidot.com/selfmodify
Omnimaga的-c4ooo
n
第一个表达式以及Remainder(
函数来节省更多。
当前的共识是允许所有代码在新的解释器上运行。我们可以利用这一优势-所有未初始化的实变量都始于0
TI-BASIC,并Xmin
以可能有用的值开始-10
。因此,如果您需要在不接收来自Ans的输入的程序中进行总运行,或者确实需要-10
少一个字节,那么此技巧可以为您提供帮助。
如果您需要一个列表{1,2,...,N}
,其中N是42,那么创建它的明显方法是
seq(X,X,1,42.
但是,使用binomcdf(
(累积二项式分布)命令可以使该字节小一个整洁的hack 。
cumSum(binomcdf(41,0
这仅在N为常数时有效,因为节省的是通过在代码中将N-1替换为其值。
有两种情况允许更短的代码。
如果您已经具有L1
维度N 的列表:
cumSum(1 or L1
如果您不关心订单:
randIntNoRep(1,N ;random permutation of numbers from 1 to N
seq(X,X,1,N
即使N
不是恒定的,也保证比它小一个字节(并且速度慢得多)cumSum(1 or rand(N
。
以下是我通常在代码高尔夫中使用的一些片段:
not(not(Ans
或Ans and 1
。使用哪一个取决于所需的括号。int(e^(Ans
。将保留在上方1+(Ans
。非常有用,因为TI-BASIC具有基于数组的阵列。{0,1}
到{1,-1}
:cos(πAns
。节省一个字节1-2Ans
。tanh(ᴇ9Ans
-int(-Ans
1+int(log(Ans
{Re,Im}
:imag(Ans{i,1
seq(inString("...",sub(Ans,X,1)),X,1,length(Ans
在哪里...
)ΔList(cumSum(Ans
ΔList(cumSum(Ans)-Ans
L1
是否唯一:SortA(L1:min(ΔList(L1
1+sum(not(cumSum(Ans=X
median(Ans,10^(seq(sum(Ans=Ans(X)),X,1,dim(Ans
tanh(ᴇ9Ans
一个可行。
如果您发现自己使用
0→G ;or any other variable
;other lines of code
然后,您可以使用(保存一个字节):
DelVar G;other lines of code
这是因为删除变量(G
)时,它会成为其默认值,在这种情况下为0
。然后,您可以在DelVar
语句后添加另一行,而无需换行。将重要控制语句直接放在语句之后时要小心DelVar
。
(在TI-84上测试)
使用列表时,请避免使用默认列表 L₁
through L₆
,而应使用具有一个字母名称的命名列表:ᶫA
through ᶫZ
(ᶫ
小L)。
要么花费两个字节来引用(虽然L₁
是一个令牌,但是它是一个两个字节的令牌),但是在将值存储在列表中时,可以删除该ᶫ
符号,并保存一个字节:
{1,2,3,4,5→ᶫA
可
{1,2,3,4,5→A
当确定结果存储在何处时,计算器会检查表达式的数据类型。
同样, Input A
如果用户输入列表而不是数字Prompt A
则将存储到或ᶫA
。
其他几个命令也可以不使用ᶫ
,尽管其中大多数命令很少用于打高尔夫球。例如,Matr►list(
允许ᶫ
在其第三,第四和更高参数中删除。
一般规则是,如果命令使用列表变量名而不是列表表达式,并且没有替代语法可以在其中放置其他类型的变量,则该命令可能与合作ᶫ
不放过。
这不适用于修改列表的单个条目: 1→ᶫA(3
不能更改为1→A(3
。
当然,最好使用list变量始终是Ans
。
Input A
”存储到ᶫA
用户是否输入列表的状态。”这意味着我的很多程序都很容易破解。然后,我没有那么多Input
程序是个好主意,我要么拥有没有错误检查的小工具,要么使用GetKey
代替的完整游戏Input
。
A
然后检查它是否已更改Input A
。
如果使用B
-byte表达式N
时间,是否应将其分配给变量?
Ans
花费1+N
使用的字节数(一个用于换行,每次使用一个,因此使用Ans when (B-1)*(N-1)>2
。Ans
每行只能有一个,因此请尝试使用所有值Ans
,可能是有用的。
实际变量(例如X
)成本3+N
字节,因此在时使用它们(B-1)*(N-1)>4
。
列出变量成本 3+2N
字节,因此请在使用时使用它们(B-2)*(N-1)>5
。
公式变量用处最少:它们需要4+2N
字节。时使用它们(B-2)*(N-1)>6
。
Min. bytes in an expression to save
N \ var. | Ans | Real | List | Eqn
------------------------------------
2 4 5 8 9
3 3 4 5 6
4 2 3 4 5
当函数求值到列表时,将其存储到列表而不是方程变量 u
; 这样可以节省一个字节。
请记住,如果重新排列它们,则存在或不存在小括号通常会导致存储表达式具有优势。
现在我要矛盾自己,说一个人应该尽可能多地在一行上编写代码。为什么?通常,当一行上有很长的重复表达式时,可以简化它。
X + int(Yrand等于或小于randInt(X,Y的字节,因为randInt是2字节的令牌。一些潜在的好处:
下界为0时可以省掉X +,节省两个字节
在randInt(之前无论如何都必须使用X +,例如,从诸如{2,5,8,11}之类的阶跃函数中随机获得
X + int(Yrand(N可以像randInt(X,Y,N一样用于生成N个随机数的列表
要轻松地使用Line()函数和像素坐标,必须将图形屏幕轴初始化为正方形像素并删除轴:
AxesOff
84→Xmin
72→Ymax
ZInteger
min(U,max(L,N
其中N是数字或算法,U和L是上下限
max(N={X,Y,Z
L1*L2→L3
instead of
for(A,1,dim(L1
L1(A)*L2(A→L3(A
End
This also works for things like this:
not(L1
L1 and L2
Disp和Text(都可以链接,因此Disp A,B将在单独的行上显示A,然后显示B,而Text(28,40,A,B将在一行的B旁边显示A)
这些优化中有很多是用于在屏幕上以最小字节数移动字符的技术的一部分
http://tibasicdev.wikidot.com/movement
http://tibasicdev.wikidot.com/tokens
求助得分