정수 n ≥ 1이 주어지면, 너비 n 의 퍼센트 부호의 2D 표현 † 을 출력하십시오 . 구성은 다음과 같습니다.
- 0으로 채워진 n x n 행렬 (또는 목록 목록)을 만듭니다 .
- 왼쪽 상단과 오른쪽 하단에 삽입하십시오.
- 왼쪽 아래에서 오른쪽 위까지 대각선에 배치하십시오.
입력 n = 4의 경우이 구성은 다음과 같습니다.
1. 4x4 matrix of 0s
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
2. 1s in TL and BR corners
1 0 0 0
0 0 0 0
0 0 0 0
0 0 0 1
3. 1s across BL-TR diagonal
1 0 0 1
0 0 1 0
0 1 0 0
1 0 0 1
이것은 code-golf 이므로 바이트 단위의 가장 짧은 프로그램이 승리합니다.
† 1과 0의 행렬을 사용하지만 공백이 아닌 문자와 공백을 사용하는 것도 가능합니다. 따라서 위의 예는 다음과 같습니다.
# #
#
#
# #
또는
# #
#
#
# #
테스트 사례
n
output
1
1
2
1 1
1 1
3
1 0 1
0 1 0
1 0 1
4
1 0 0 1
0 0 1 0
0 1 0 0
1 0 0 1
10
1 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 1
최종 메모
설명을 추가하면 대단히 감사하겠습니다.
답변
젤리 , 6 바이트
²Rm’Ṭs
작동 원리
²Rm’Ṭs Main link. Argument: n
² Square; yield n².
R Range; yield [1, ..., n²].
’ Decrement; yield n-1.
m Modular; yield every (n-1)-th element of the range, staring with the first.
Ṭ Untruth; yield a Boolean array with 1's at the specified indices.
s Split the resulting array into chunks of length n, creating a matrix.
답변
자바 스크립트 (ES6), 52 바이트
n=>[...Array(n)].map((_,y,a)=>a.map(_=>y++%~-n<1|0))
답변
V , 15 바이트
Àé ÀÄ|r#L.|ò.kl
설명
Àé<space> " Argument times insert a space
ÀÄ " Argument times duplicate this line
" This gives an arg-by-arg matrix of spaces
" and brings the cursor to the end of the first line
|r# " Go to the beginning of this line and replace the first character with #
L. " Go to the end of this matrix (bottom-right corner) and replace that character with a #
| " Go to the beginning of the last line
ò " Recursively do:
. " Repeat the last action, r#, replace the character under the cursor with #
kl " Go 1 up and 1 right
답변
답변
GNU APL, 17 15 바이트
{1=⍵∨⍵⍵⍴1=⍳⍵-1}
오늘은 이상한 날입니다 … GNU는 실제로 Dyalog APL을 능가했습니다 … woah.
TIO는 GNU APL을 지원하지 않습니다 …
설명 (입력은 ⍵
) :
1=⍳⍵-1 - 1 followed by ⍵-2 0's
⍵⍵⍴ - fit into a square
⍵∨ - gcd ⍵ (0 gcd n = n)
1= - test each element for equality with 1
답변
파이썬 2 , 46 바이트
lambda n:zip(*[iter(`10L**n`[:-3]*-~n+'1')]*n)
같은 출력
[('1', '0', '0', '1'), ('0', '0', '1', '0'), ('0', '1', '0', '0'), ('1', '0', '0', '1')]
파이썬 2 , 48 바이트
lambda n:zip(*[iter([1]+(n*[0]+[1])[2:]*-~n)]*n)
같은 출력
[(1, 0, 0, 1), (0, 0, 1, 0), (0, 1, 0, 0), (1, 0, 0, 1)]
파이썬 3 , 48 바이트
lambda n:('%d'*n+'\n')*n%(1,*(*[0]*n,1)[2:]*-~n)
파이썬 3에서는 매우 다른 문자열 대체 방식이 사용됩니다.
1001
0010
0100
1001
답변
젤리 , 9 바이트
=þ¹UF1Q¦s
작동 원리
=þ¹UF1Q¦s Main link. Argument: n
¹ Identity; yield n.
=þ Equals table; compare each i in [1, ..., n] with each j in [1, ..., n].
This yields the n×n identity matrix.
U Upend; reverse each row.
F Flatten the matrix.
¦ Sparse application:
Q Unique; yield the unique elements of the constructed array, i.e.,
[1] if n = 1 and [0, 1] if n > 1.
1 Yield 1.
This replaces the elements at indices 0 (last) and 1 (first) with 1.
s Split the resulting array into chunks of length n.