?5 5⍴CHARS
其中CHARS
是包含0-z的变量。
roll操作符不会接受CHARS
,因为它包含的元素不是非负整数,即字母a-z。
答案 0 :(得分:3)
?5 5⍴nums
其中nums
是一个非负整数列表,可能无法提供您想要的内容,因为它会重新整形nums
然后为每个整数进行滚动。实际上,你会5 5⍴(?nums[1])(?nums[2])(?nums[3])
...
相反,我假设您希望5×5矩阵的每个元素包含随机的字符 0-9和a-z,与替换。有关不同的假设,请参阅J. Sallé's excellent answer。
正如J.Sallé所提到的,大写字母是⎕A
,在Dyalog APL中,我们可以使用819⌶⎕A
获得小写(819是mnemonic for "BIg"),而APLX有{{1} }。 Dyalog APL和APLX中的数字均为⎕a
,因此所有36个可能的字符均为⎕D
或symbols←⎕D,819⌶⎕A
。在其他APL系统上,您可能需要生成字符列表;见脚注。
我们可以使用symbols←⎕D,⎕a
得到symbols
的随机索引,最后我们进行实际索引以获得结果; indices←?5 5⍴36
。
作为一个单行,它是:
symbols[indices]
我们可以将它概括为一个效用函数,它将形状作为左参数,将元素列表作为右参数:
(⎕D,819⌶⎕A)[?5 5⍴36]
此处,{⍵[?⍺⍴≢⍵]}
是元素的数量,≢⍵
是形状。这适用于许多系统(例如Dyalog,GNU和ngn)。 Try it online!以下内容适用于所有系统:
⍺
如何在任何APL系统上生成字符列表:
∇ array←shape Random data
array←data[?shape⍴⍴data]
∇
⎕AV[∊-⎕IO-(⍳¨10 26)+⎕AV⍳'0a']
... ⎕AV[
将 A tomic V ector(字符集)编入索引:
]
指数“0”和“a”那里
⎕AV⍳'0a'
... (
将以下内容添加到:
)+
前10个和前26个指数
⍳¨10 26
(我 ndex O rigin)为1,则 -⎕IO-
减去1,因为⎕IO
与{相同{1}}
-(1-x)
ε nlist(展平将两个角色向量合并为一个)
答案 1 :(得分:1)
如果我理解你的问题,你想要一个5×5的0-z字符矩阵,那么让我们一块一块地做:
首先,我们创建一个字符向量CHARS←⎕A
。请注意,此向量包含大写字母。如果你想要小写,你需要使用I-Beam操作819,chars←819⌶⎕A
。
然后,由于您需要数字0-9,我们需要手动将它们添加到chars
向量中,或者使用⎕IO←0
,这就是我在这种情况下要做的事情。因此,在我们的Index Origin设置为0的情况下,我们通过执行chars,←⍳10
将数字0-9添加到向量中。变量chars
现在返回abcdefghijklmnopqrstuvwxyz 0 1 2 3 4 5 6 7 8 9
。
最后,我们需要随机选择这些元素来填充矩阵。要对数字和字符的混合向量执行此操作,我们将随机选择其索引而不是滚动向量:
chars[?≢chars]
将滚动向量的随机元素。由于我们需要的不仅仅是一个元素,因此我们将使用chars[?(≢chars)⍴≢chars]
。这将滚动≢chars
,即36,向量的随机元素。
在这之后,我们将其重塑为5×5矩阵。我们的最终代码是5 5⍴chars[?(≢chars)⍴≢chars]
。
如果您愿意,可以在这个方便的网站上逐步查看:
答案 2 :(得分:0)
岂不
'abcdefghijklmnopqrstuvwxyz0123456789'[5 5⍴36?36]
(5 x 5数组中的唯一字符)
或
'abcdefghijklmnopqrstuvwxyz0123456789'[?5 5⍴36]
(可能重复的字符)
做到了吗?任何来源的作品,应该适用于每个APL。