퍼센트 부호 만들기 diagonal 1 0 0 1 0 0 1

정수 n ≥ 1이 주어지면, 너비 n 의 퍼센트 부호의 2D 표현 을 출력하십시오 . 구성은 다음과 같습니다.

  1. 0으로 채워진 n x n 행렬 (또는 목록 목록)을 만듭니다 .
  2. 왼쪽 상단과 오른쪽 하단에 삽입하십시오.
  3. 왼쪽 아래에서 오른쪽 위까지 대각선에 배치하십시오.

입력 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

이것은 이므로 바이트 단위의 가장 짧은 프로그램이 승리합니다.

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

답변

파이썬 2 , 58 57 바이트

n=input()
x='#'.ljust(n-1)*3
exec'print x[:n];x=x[1:];'*n

온라인으로 사용해보십시오!


답변

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.