Generate a Walsh Matrix
MATL, 4 bytes
W4YL
Try it online!
How it works:
W % Push 2 raised to (implicit) input
4YL % (Walsh-)Hadamard matrix of that size. Display (implicit)
Without the built-in: 11 bytes
1i:"th1M_hv
Try it online!
How it works:
For each Walsh matrix W, the next matrix is computed as [W W; W −W], as is described in the challenge. The code does that n
times, starting from the 1×1 matrix [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)
Perl 6, 63 44 40 bytes
{map {:3(.base(2))%2},[X+&] ^2**$_ xx 2}
Try it online!
Non-recursive approach, exploiting the fact that the value at coordinates x,y is (-1)**popcount(x&y)
. Returns a flattened array of Booleans.
-4 bytes thanks to xnor's bit parity trick.
Haskell, 57 56 bytes
(iterate(\m->zipWith(++)(m++m)$m++(map(0-)<$>m))[[1]]!!)
Try it online! This implements the given recursive construction.
-1 byte thanks to Ørjan Johansen!