如何测试列表中所有字符的长度并根据长度调整 Output( 的位置?

How can I test the length of all the characters in a list and adjust the location of Output( based on the length?

我写了一个程序来滚动 D&D 5e 角色的统计数据。它滚动 4d6 并丢弃最低值并将该值添加到列表中。它总共重复 6 次,然后将结果输出到屏幕。我希望能够将输出居中,使其看起来不错,并删除列表周围的 {} 括号以及数字之间的逗号。我 运行 遇到的问题是我不能只向所有位置输出空白 space 因为第二个字符之后的所有内容都是可变的。

这是我正在使用的代码。

0→dim(∟STATS
For(I,1,6,1
0→dim(∟ROLLS
randInt(1,6,4)→∟ROLLS
1+sum(not(cumSum(∟ROLLS=min(∟ROLLS))))→X
∟ROLLS(X)-min(∟ROLLS)→∟ROLLS(X)
sum(∟ROLLS)→∟STATS(1+dim(∟STATS
End
ClrHome
While not(getKey
Output(5,4,∟STATS
End
ClrHome

示例输出如下所示:

___{8,10,9,10,9,15}_______| 

另一个可能看起来像这样

___{13,9,14,11,9,10}______|

(|代表屏幕结束,_代表spaces但由于宽度原因显示)

请注意,它总是从一个地方开始,但其余的 os 在不同的位置。

如果屏幕尺寸很重要,这就是 TI-84 Plus CE

字符串是你的朋友!

我和一个朋友谈过这个,她给了我将列表元素存储到字符串中然后输出字符串而不是列表的想法。诀窍是弄清楚如何将数字存储在字符串中。我找到了 toString( 函数来帮助解决这个问题。

这是工作代码片段。

toString(∟STATS(1))→Str0
For(I,2,6,1
Str0+" "+toString(∟STATS(I))→Str0
End

这给了我格式很好的数字和空格字符串。我的最后一个问题是如何将它居中,我的朋友再次来救我,并建议将字符串 /2 的长度作为列坐标。我尝试使用它,但有点偏离中心,所以我减去 2 得到一列。我这样做的方式在下面的代码中。

ClrHome
While not(getKey
Output(5,(int(length(Str0)/2-2)),Str0
End

所以完整的工作代码是

0→dim(∟STATS
For(I,1,6,1
0→dim(∟ROLLS
randInt(1,6,4)→∟ROLLS
1+sum(not(cumSum(∟ROLLS=min(∟ROLLS))))→X
∟ROLLS(X)-min(∟ROLLS)→∟ROLLS(X)
sum(∟ROLLS)→∟STATS(1+dim(∟STATS
End
toString(∟STATS(1))→Str0
For(I,2,6,1
Str0+" "+toString(∟STATS(I))→Str0
End
ClrHome
While not(getKey
Output(5,(int(length(Str0)/2-2)),Str0
End
ClrHome
SetUpEditor

我已经很久没有使用我的 TI 了,但我认为您必须遍历数组并依次输出每个数字。根据索引和数字的大小定位每个。像

For (X, 1, dim(STATS), 1)
Output (5,floor(1+3X+∟STATS(X)/2),∟STATS(X)
End