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
我试图在控制台屏幕上打印一个等边三角形。 这是我能找到的
]\ '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