월시 행렬 생성


22

월시 행렬은 광장 매트릭스의 특별한 종류 양자의 응용 프로그램 컴퓨팅 (아마 다른 곳에서하고 있지만, 나는 단지 양자 컴퓨팅에 대한 관심).

월시 행렬의 속성

치수는 우리가 그들을 호출, 여기에 2의 지수 이러한 행렬을 참조 할 수 있습니다, 따라서 2의 동일한 전력이다 W(0), W(1), W(2)...

W(0)로 정의됩니다 [[1]].

의 경우 n>0, W(n)외모가 좋아 :

[[W(n-1)  W(n-1)]
 [W(n-1) -W(n-1)]]

그래서 W(1):

[[1  1]
 [1 -1]]

그리고 W(2):

[[1  1  1  1]
 [1 -1  1 -1]
 [1  1 -1 -1]
 [1 -1 -1  1]]

패턴은 계속됩니다 ...

당신의 작업

정수를 입력으로 사용하고 편리한 형식으로 n인쇄 / 반환 하는 프로그램 또는 함수를 작성하십시오 W(n). 이것은 배열의 배열, 평평한 부울의 배열, .svg이미지 일 수 있습니다. 정확한 한 이미지의 이름을 지정할 수 있습니다.

표준 허점 은 금지되어 있습니다.

몇 가지 사항 :

의 경우 W(0)1필요가 한번도 포장 할 수 없습니다. 단순한 정수일 수 있습니다.

결과를 1- 색인화 W(1)할 수 있습니다 [[1]].

테스트 사례

0 -> [[1]]
1 -> [[1  1]
      [1 -1]]
2 -> [[1  1  1  1]
      [1 -1  1 -1]
      [1  1 -1 -1]
      [1 -1 -1  1]]
3 -> [[1  1  1  1  1  1  1  1]
      [1 -1  1 -1  1 -1  1 -1]
      [1  1 -1 -1  1  1 -1 -1]
      [1 -1 -1  1  1 -1 -1  1]
      [1  1  1  1 -1 -1 -1 -1]
      [1 -1  1 -1 -1  1 -1  1]
      [1  1 -1 -1 -1 -1  1  1]
      [1 -1 -1  1 -1  1  1 -1]]

8 -> Pastebin

이것은 이므로 각 언어에서 가장 짧은 솔루션이 승리합니다! 행복한 골프!



결과를 1- 인덱싱 할 수 있습니까? (예를 들어, W(1)반환 [[1]], W(2)반환 [[1,1],[1,-1]...)
레오

@ 레오 Yep, 그들은 할 수 있습니다. 편집 :
Khuldraeseth na'Barya

답변:



10

MATL , 4 바이트

W4YL

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

작동 방식 :

W       % Push 2 raised to (implicit) input
4YL     % (Walsh-)Hadamard matrix of that size. Display (implicit)

내장없이 : 11 바이트

1i:"th1M_hv

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

작동 방식 :

각 월시 매트릭스를 들어 W , 다음의 행렬이 다음과 같이 계산된다 W W ; 도전에 설명 된 바와 같이 W - W ]. 코드는 n1x1 행렬에서 시작하여 그 시간을 수행합니다 [1].

1       % Push 1. This is equivalent to the 1×1 matrix [1]
i:"     % Input n. Do the following n times
  t     %   Duplicate
  h     %   Concatenate horizontally
  1M    %   Push the inputs of the latest function call
  _     %   Negate
  h     %   Concatenate horizontally
  v     %   Concatenate vertically
        % End (implicit). Display (implicit)

2
어 ... 그리고 여기에 사용하려고합니다 kron. ;)
비커


5

내장형 옥타브 , 18 17 바이트

@(x)hadamard(2^x)

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

내장되지 않은 옥타브 , 56 51 47 바이트

function r=f(x)r=1;if x,r=[x=f(x-1) x;x -x];end

온라인으로 사용해보십시오! -4를위한 @Luis Mendo 에게 감사합니다 .

재귀 람다가있는 옥타브 , 54 53 52 48 바이트

f(f=@(f)@(x){@()[x=f(f)(x-1) x;x -x],1}{1+~x}())

온라인으로 사용해보십시오! 이 답변 과 영감에 대한 이 질문 덕분에 .


함수가 파일에 정의되어 있으면 두 번째 end는 필요하지 않습니다. 따라서 TIO의 헤더로 이동하여 바이트 수에서 제거 할 수 있습니다.
Luis Mendo


4

파이썬 2 , 75 71 바이트

r=range(2**input())
print[[int(bin(x&y),13)%2or-1for x in r]for y in r]

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

월시 매트릭스는 사악한 숫자와 관련이있는 것 같습니다. 경우 x&y(0 계 좌표 비트 AND)의 악 번호는, 행렬의 값은 1, -1싫은 숫자. 비트 패리티 계산 int(bin(n),13)%2이 답변에 대한 Noodle9의 의견에서 가져옵니다 .


2
직관적으로 (x, y)의 부호는 (x, y)가 (2 ^ k × 2 ^ k) 행렬의 오른쪽 아래 사분면 에있는 재귀 수준이있는 횟수만큼 여러 번 뒤집 힙니다. x와 y가 k 번째 비트에서 1을 가질 때 이 사실을 사용하여 1 비트를 세어 x&y부호를 뒤집을 횟수를 결정할 수 있습니다.
Lynn

4

R , 61 56 53 50 바이트

w=function(n)"if"(n,w(n-1)%x%matrix(1-2*!3:0,2),1)

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

Kronecker 제품으로 행렬을 재귀 적으로 계산하고 n=0사례에 대해 1을 반환합니다 (이를 지적한 Giuseppe와 초기 버전 골프를 돕는 JAD 덕분).

주세페 덕분에 추가로 -3 바이트 추가.


Dunno 는 유효 1하지 않고 반환하면 matrix(1)유효하지만 골프라면 다운받을 수 있으며 61 바이트 Reduce접근 방식도 있습니다. 시도해보십시오!
Giuseppe

나는 또한 n=0사례 의 형식에 대해 잘 모르겠다 . 대부분의 다른 답변은 [[1]]에 싸지 만, 전부는 아니다 ...
Kirill L.

1
당신은 대체 할 수 있습니다 matrix(1)t(1).
JAD

1
질문이 수정되었습니다. 행렬이 아닌 정수를 반환 할 수 있습니다.
Khuldraeseth na'Barya

1
1-2*!3:0c(1,1,1,-1)3 바이트 보다 짧습니다 .
주세페


2

자바 스크립트 (ES6), 77 바이트

n=>[...Array(1<<n)].map((_,i,a)=>a.map((_,j)=>1|-f(i&j)),f=n=>n&&n%2^f(n>>1))

순진 계산 복용하여 시작 0 <= X, Y <= 2**NW[N]. 간단한 경우는 X또는 Y보다 작은 경우 2**(N-1)이며,이 경우 X%2**(N-1)와에 반복됩니다 Y%2**(N-1). 둘 다의 경우 X그리고 Y적어도 2**(N-1)재귀 호출은 무효화되어야합니다.

비트 마스크를 비교 X하거나 Y그보다 적게 가져 오는 대신 재귀 호출을 무효화해야 할 때는 0이 아니며 그렇지 않으면 0입니다. 이것은 또한 모듈로를 줄여야하는 것을 피 합니다.2**(N-1)X&Y&2**(N-1)2**(N-1)

물론 동일한 결과를 위해 비트를 역순으로 테스트 할 수 있습니다. 그런 다음 좌표를 매번 두 배로 늘리지 않고 좌표를 반으로 줄이면 결과가 XOR 될 수 있으므로 최종 결과는 0부정이 없으며 부정을 1의미합니다.



2

K (ngn / k) , 18 바이트

{x{(x,x),'x,-x}/1}

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


음, 통역사가 GitHub에없는 이유는 무엇입니까?
Outgolfer Erik

@EriktheOutgolfer 나는 현재 코드를 너무 광범위하게 게시하지 않는 것을 선호합니다.
ngn

흠, 그럼 어떻게 TIO에 추가 했습니까?
Outgolfer Erik

@EriktheOutgolfer 나는 정중하게 물었습니다 :) TIO에는 Mathematica, Dyalog와 같은 다른 독점 언어가 있습니다.
ngn

1

05AB1E , 16 바이트

oFoL<N&b0м€g®smˆ

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

설명

oF                 # for N in 2**input do:
  oL<              # push range [1..2**input]-1
     N&            # bitwise AND with N
       b           # convert to binary
        0м         # remove zeroes
          €g       # length of each
            ®sm    # raise -1 to the power of each
               ˆ   # add to global array

해밍 가중치를 계산하는 더 짧은 방법을 알고 싶습니다.
1δ¢˜와 길이가 같습니다 0м€g.


1

껍질 , 13 바이트

!¡§z+DS+†_;;1

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

1- 색인.

설명

!¡§z+DS+†_;;1
 ¡        ;;1    Iterate the following function starting from the matrix [[1]]
  §z+              Concatenate horizontally
     D               The matrix with its lines doubled
      S+†_           and the matrix concatenated vertically with its negation
!                Finally, return the result after as many iterations as specified
                 by the input (where the original matrix [[1]] is at index 1)



0

파이썬 2 , 49 바이트

추가 라이브러리를 사용하여 몇 가지 접근 방식을 보여줍니다. 이것은 Scipy의 내장 기능에 의존합니다.

lambda n:hadamard(2**n)
from scipy.linalg import*

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

파이썬 2 , 65 바이트

그리고 이것은 Numpy 만 사용하고, 크로노 커 제품으로 내 R 답변 과 유사하게 해결합니다 .

from numpy import*
w=lambda n:0**n or kron(w(n-1),[[1,1],[1,-1]])

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


0

Stax , 20 바이트

àΩ2┤â#╣_ê|ª⌐╦è│╞►═∞H

staxlang.xyz에서 실행하고 디버그하십시오!

얼마 후 나만의 도전을 해보겠다고 생각했다. 비재 귀적 접근. 다른 골프 언어에 비해 너무 경쟁적이지 않습니다 ...

압축 해제 (24 바이트) 및 설명

|2c{ci{ci|&:B|+|1p}a*d}*
|2                          Power of 2
  c                         Copy on the stack.
   {                  }     Block:
    c                         Copy on stack.
     i                        Push iteration index (starts at 0).
      {           }           Block:
       ci                       Copy top of stack. Push iteration index.
         |&                     Bitwise and
           :B                   To binary digits
             |+                 Sum
               |1               Power of -1
                 p              Pop and print
                   a          Move third element (2^n) to top...
                    *         And execute block that many times.
                     d        Pop and discard
                       *    Execute block (2^n) times
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.