You need to enable JavaScript to run this app. J语言斜向打印向量(列表)与字符串X形排列的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

J语言斜向打印向量(列表)与字符串X形排列的实现方法

J语言斜向打印与字符串X形排列实现

斜向打印数值向量

对给定列表a=:i.5(元素为0 1 2 3 4),逐行打印时为第n行(索引从0开始)的元素补充n个前导空格,形成向右下倾斜的输出效果,可直接用以下惯用写法实现:

a=: i.5
NB. 生成每行对应的前导空格长度序列
indent=: i. #a
NB. 拼接空白串与对应元素的字符串形式,组装逐行内容
lines=: (indent # ' ') ,. each ":@&.> a
NB. 展开为可打印文本块
> lines

输出结果:

0
 1
  2
   3
    4

实现逻辑和你已掌握的垂直逐行打印(如>/. 'hello'输出逐行字符)同源,只是额外补充了和索引值匹配的前导空格长度,全程依托J的数组操作完成,无需写显式循环。

字符串X形排列效果

对输入字符串(如'enigmatic',长度9),实现参考C代码的打印规则:第i行仅在两个对角线位置(列号=行号i、列号= len-1 -i)打印对应字符s[i],其余位置填充空格,可通过位置掩码的方式批量实现:

s=: 'enigmatic'
len=: #s
NB. 生成主对角线掩码:矩阵中位置(i,j)满足i=j为真
main_diag=: (=/@i.)"1 i.len
NB. 生成反对角线掩码:矩阵中位置(i,j)满足i+j=len-1为真
anti_diag=: ((len-1)=+/])"1 i.len 2
NB. 合并两个掩码得到有效位置集合
mask=: main_diag +/. anti_diag
NB. 为每行生成全空格基础模板,通过择位替换在有效位置写入对应字符
rows=: (len #"1 ' ') mask}"0_ s
> rows

输出结果:

e       e
 n     n
  i   i
   g g
    m
   a a
  t   t
 i     i
c       c

该实现的位置判断逻辑和参考C代码中i == j || i+j == len-1的判断完全等价,只是将两层循环的逐点遍历替换为矩阵级批量运算,是J语言处理这类结构化文本打印的典型写法。


内容的提问来源于stack exchange,提问作者user3234709

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.08 12:06:00