修改数组的一行

Fat*_*ize 3 j

我刚刚开始学习 J,有些事情我不知道该怎么做

例如,假设我想打印一个包含 2 个符号的棋盘格

baba
abab
baba
Run Code Online (Sandbox Code Playgroud)

为此,我假设您可以生成一个数组

baba
baba
baba
Run Code Online (Sandbox Code Playgroud)

并反转第二行。

生成所述阵列易于:3 4 $ 'ba'。但是倒车第二排是我挣扎的地方。

我可以得到第二行的相反结果,|. 1 { 3 4 $ 'ba'但这只会给我第二行,而不是整个数组。我不知道如何使用 J 语法我实际上可以保留顶行和底行并且仅适用|.于中间行。

更一般地说,您将如何|.仅应用每隔一行?

Lyn*_*ynn 5

你问的

要应用于|.一行,请尝试以下操作:

   x =: 3 4 $ 'ba'
   (|. 1{x) 1} x
baba
abab
baba
Run Code Online (Sandbox Code Playgroud)

要反转每隔一行,我不知道是否有比这更简单的东西:

   ,/ 1 (]`(|."1))\ i. 5 4
 0  1  2  3
 7  6  5  4
 8  9 10 11
15 14 13 12
16 17 18 19
Run Code Online (Sandbox Code Playgroud)

这使用了dyad 的一个相对晦涩的特征\ (Infix)

x m\ y将动名词的连续动词应用m到 的中缀ym根据需要循环扩展。

这里,x是 1,所以我们的“中缀”只是 1×4 矩阵;我们在动名词 ( ] ` (|."1)) 中循环以在不做任何事情 ( ]) 和反转子矩阵的单行( )之间交替|."1。然后,我们用 将得到的 5×1×4 数组展平回 5×4 矩阵,/

你可能想要的

实现“棋盘”的一种更简单的方法如下:首先,使用+/两个范围来创建“加法表”,如下所示:

   (i.3) +/ (i.4)
0 1 2 3
1 2 3 4
2 3 4 5
Run Code Online (Sandbox Code Playgroud)

然后将所有这些值取模 2,以获得 0 和 1 的棋盘模式:

   2 | (i.3) +/ (i.4)
0 1 0 1
1 0 1 0
0 1 0 1
Run Code Online (Sandbox Code Playgroud)

然后从选择的字符串中索引{

   (2 | (i.3) +/ (i.4)) { 'ba'
baba
abab
baba
Run Code Online (Sandbox Code Playgroud)