J语言打印一个等边三角形

Print an equilateral triangle in J language

我试图在控制台屏幕上打印一个等边三角形。 这是我能找到的

]\ 'hello' NB. which prints
h
he
hel
hell
hello

我想到的第一个解决方案是:

   eq=. ('b< >' 8!:2 (] ,.~ |.@}."1)@:([: >:/~ i.)) 
   eq 5
    1    
   111   
  11111  
 1111111 
111111111
   eq 10
         1         
        111        
       11111       
      1111111      
     111111111     
    11111111111    
   1111111111111   
  111111111111111  
 11111111111111111 
1111111111111111111

eq是一个动词,它首先接受参数并使用([: >:/~ i.)1的左下角创建一个矩阵,然后将其馈送到(] ,.~ |.@}."1) 删除每行的第一个字符,然后在附加到原始矩阵之前反转。最后,为了摆脱丑陋的 0's,我使用外连词 8!:2 将二进制数组格式化为字符,左参数 'b< >' 指定 0's将被空格替换。

第二种解决方案:

   eq2=: ([ ,.~ |.@}."1)@:(]\) 
   eq2 'hello'
    h    
   ehe   
  lehel  
 llehell 
ollehello
   eq2 '*******'
      *      
     ***     
    *****    
   *******   
  *********  
 *********** 
*************

eq2 的工作方式相同,除了它最初使用您的 ]\ 这意味着不需要格式外连词,因为提供给 ([ ,.~ |.@}."1) 的结果已经是字符形式.

从构成字符矩阵的 ]\ 继续,您希望将每行的反转 (|.) 与行本身连接 (,) 并删除第一个字符 (}.)。您想逐行执行此操作,而不是一次对整个矩阵执行此操作,这是由 "1 .

指定的

换句话说:(reverse concat drop) rank 1, or in J: (|. , }.)"1

(|. , }.)"1 ]\ 'Helloooo'
       H       
      eHe      
     leHel     
    lleHell    
   olleHello   
  oolleHelloo  
 ooolleHellooo 
oooolleHelloooo