B←{'/\ '['\/'⍳⍺⍺⍵]}
C←⊢,⌽B
C(⊢⍪⊖B)⊃,/{C⊖A↑⊖' /'[⍵≤∘.+⍨⍳⍵+1]}¨⌽⍳A←⎕
온라인으로 사용해보십시오!
⎕IO←0
많은 시스템에서 표준이라고 가정 하므로 프로그램은 0 색인화됩니다.
이것은 STDIN을 통해 입력을받는 tradfn입니다.
설명
(약간 구식)
참고 ⍺
왼쪽 인자이다가, ⍵
오른쪽 인자이며, ⍺⍺
왼쪽 연산자입니다.
B
다이아몬드를 미러링하는 데 도움이되는 기능입니다. 문자열을 오른쪽 인수로 사용하고 역함수를 왼쪽으로 사용합니다 ( B
연산자도 마찬가지 임).
B←{'/\ '['\/'⍳⍺⍺⍵]}
⍺⍺⍵ Apply ⍺⍺ on ⍵
'\/'⍳ Find the index of the reflected string in '\/' (if the character is not found in `'\/'`, then return an index out of the bounds of the string, ie `2` if the character is a space)
'/\ '[ ] Use these indexes on '/\ ' to reflect the '/\' characters
이제 우리는 프로그램의 주요 부분으로갑니다.
A←⎕ Assign the input to variable A
⍳ Create a range 0 .. A-1
⌽ Reverse it so that it becomes A-1 .. 0
¨ For each element do (the right argument is the element):
⍳⍵+1 Create a range 0 .. ⍵
∘.+⍨ Create an addition table using the range to result in a matrix like so:
0+0 0+1 0+2 .. 0+⍵
1+0 1+1 1+2 .. 1+⍵
2+0 2+1 2+2 .. 2+⍵
...
⍵+0 ⍵+1 ⍵+2 .. ⍵+⍵
⍵≤ The elements of the matrix that are greater than or equal to the ⍵,
this creates a triangle matrix that looks like this:
0 0 .. 0 1
0 0 .. 1 1
..
1 1 .. 1 1
' /'[...] Index it in ' /' to get a character matrix
(ie replace 0s with spaces and 1s with '/'s)
⊖ Flip this vertically
A↑ Pad the top spaces
범위 내의 모든 요소에 대해 생성 된 모든 삼각형의 ⌽⍳A
높이가 같아서 나중에 서로 연결할 수 있도록하는 데 필요합니다.
⊖ Flip the matrix vertically again to go back to the original state
(⊢, ) Concatenate it with
⌽B itself, but flipped horizontally
,/ Concatenate all triangles formed by the range operator
⊃ The resulting matrix is nested, so this operator "un-nests" it
이제 패턴의 왼쪽 상단이 완료되었습니다. 남아있는 것은 수직으로 뒤집은 다음 수평으로 뒤집는 것입니다.
(⊢⍪⊖B) Concatenate the resulting matrix with itself but flipped vertically
(the vertically flipped matrix is concatenated below of the original matrix)
Now the left part of the pattern is complete
(⊢,⌽B) Concatenate the resulting matrix with itself flipped horizontally
그리고 그게 다야! 출력은 /\
s가 있고 공백으로 채워진 문자 행렬입니다 .