Take a positive integern as input, and output an-by-n checkerboard matrix consisting of1 and0.
The top left digit should always be1.
Test cases:
n = 11n = 21 00 1n = 31 0 10 1 01 0 1n = 41 0 1 00 1 0 11 0 1 00 1 0 1Input and output formats are optional. Outputting the matrix as a list of lists is accepted.
- \$\begingroup\$Is a list of strings OK?\$\endgroup\$xnor– xnor2017-06-15 17:52:45 +00:00CommentedJun 15, 2017 at 17:52
- \$\begingroup\$Yes, that's OK.\$\endgroup\$Stewie Griffin– Stewie Griffin2017-06-15 17:53:49 +00:00CommentedJun 15, 2017 at 17:53
- 1
- 2\$\begingroup\$Your examples show spaces between numbers on the same row, is that required, so as to look more like a square?\$\endgroup\$BradC– BradC2017-06-15 19:09:09 +00:00CommentedJun 15, 2017 at 19:09
- \$\begingroup\$@BradC it's not required. The first approachhere is valid.\$\endgroup\$Stewie Griffin– Stewie Griffin2017-06-15 20:19:29 +00:00CommentedJun 15, 2017 at 20:19
64 Answers64
- 8\$\begingroup\$"52 seconds!" like I'm not used to it...\$\endgroup\$Erik the Outgolfer– Erik the Outgolfer2017-06-15 17:35:43 +00:00CommentedJun 15, 2017 at 17:35
- 8\$\begingroup\$Do ya'll have, like, a beeper, you wear 24/7 for new PPCG challenges?\$\endgroup\$Magic Octopus Urn– Magic Octopus Urn2017-06-16 20:43:24 +00:00CommentedJun 16, 2017 at 20:43
- \$\begingroup\$@carusocomputing Those who have a faster internet connection are usually the lucky ones that will win.\$\endgroup\$Erik the Outgolfer– Erik the Outgolfer2017-06-17 14:16:00 +00:00CommentedJun 17, 2017 at 14:16
MATL, 5 bytes
:otYTTry it atMATL online!
Explanation
Consider input4 as an example.
: % Implicit input, n. Push range [1 2 ... n] % STACK: [1 2 3 4]o % Parity, element-wise % STACK: [1 0 1 0]t % Duplicate % STACK: [1 0 1 0], [1 0 1 0]YT % Toeplitz matrix with two inputs. Implicit display % STACK: [1 0 1 0; % 0 1 0 1; % 1 0 1 0; 5 0 1 0 1]Haskell,504139 38 bytes
Thanks to nimi and xnor for helping to shave off a total of9 10 bytes
f n=r[r"10",r"01"]where r=take n.cycleAlternately, for one byte more:
(!)=(.cycle).takef n=n![n!"10",n!"01"]or:
r=flip take.cyclef n=r[r"10"n,r"01"n]nProbably suboptimal, but a clean, straightforward approach.
- \$\begingroup\$
concat.repeatiscycle:n!l=take n$cycle l. If you go pointfree it saves one more byte:(!)=(.cycle).take.\$\endgroup\$nimi– nimi2017-06-15 18:26:41 +00:00CommentedJun 15, 2017 at 18:26 - \$\begingroup\$Lovely! I knew there was a builtin for that, but couldn't remember the name for the life of me\$\endgroup\$Julian Wolf– Julian Wolf2017-06-15 18:31:10 +00:00CommentedJun 15, 2017 at 18:31
- \$\begingroup\$I was going to suggest
f n|r<-take n.cycle=r[r"10",r"01"]or similar. but Haskell seems to infer the wrong type forr? It works with explicit typingf n|r<-take n.cycle::[a]->[a]=r[r"10",r"01"].\$\endgroup\$xnor– xnor2017-06-15 18:59:54 +00:00CommentedJun 15, 2017 at 18:59 - 1\$\begingroup\$@JulianWolf Haskell seems to havetrouble inferring polymorphic types\$\endgroup\$xnor– xnor2017-06-15 19:43:32 +00:00CommentedJun 15, 2017 at 19:43
- 1\$\begingroup\$@zbw I thought this was the case but using
NoMonomorphismRestrictiondidn't help. Nor didRank2TypesorRankNTypes. Do you know what's going on there?\$\endgroup\$xnor– xnor2017-06-16 04:59:03 +00:00CommentedJun 16, 2017 at 4:59
Japt, 6 bytes
ÆÇ+X vTest it online! (Uses-Q flag for easier visualisation)
Explanation
Æ Ç +X vUoX{UoZ{Z+X v}} // Ungolfed // Implicit: U = input numberUoX{ } // Create the range [0...U), and map each item X to UoZ{ } // create the range [0...U), and map each item Z to Z+X // Z + X v // is divisible by 2. // Implicit: output result of last expressionAn interesting thing to note is thatv isnot a "divisible by 2" built-in. Instead, it's a "divisible by X" built-in. However, unlike most golfing languages, Japt's functions do not have fixed arity (they can accept any number of right-arguments). When given 0 right-arguments,v assumes you wanted2, and so acts exactly like it was given2 instead of nothing.
APL (Dyalog), 8 bytes
~2|⍳∘.+⍳Explanation
Let's call the argumentn.
⍳∘.+⍳This creates a matrix
1+1 1+2 1+2 .. 1+n2+1 2+2 2+3 .. 2+n...n+1 n+2 n+3 .. n+nThen2| takes modulo 2 of the matrix (it vectorises) after which~ takes the NOT of the result.
JavaScript ES6,555451 46 bytes
Saved 1 byte thanks to @Neil
Saved 2 bytes thanks to @Arnauld
n=>[...Array(n)].map((_,i,a)=>a.map(_=>++i&1))This outputs as an array of arrays. JavaScript ranges are pretty unweildy but I use[...Array(n)] which generates an array of sizen
- \$\begingroup\$It's still a byte shorter to use the index parameters:
n=>[...Array(n)].map((_,i,a)=>a.map((_,j)=>(i+j+1)%2))\$\endgroup\$Neil– Neil2017-06-15 18:41:59 +00:00CommentedJun 15, 2017 at 18:41 - \$\begingroup\$@Neil huh, I never thought to use the third parameter in map, thanks!\$\endgroup\$Downgoat– Downgoat2017-06-15 18:47:47 +00:00CommentedJun 15, 2017 at 18:47
- \$\begingroup\$@Arnauld thanks! that inspired me to save 5 more bytes!\$\endgroup\$Downgoat– Downgoat2017-06-15 22:55:35 +00:00CommentedJun 15, 2017 at 22:55
05AB1E,9 7 bytes
-2 bytes thanks to Emigna
LDÈD_‚èExplanation
LDÈD_‚sè» Argument nLD Push list [1 .. n], duplicate ÈD Map is_uneven, duplicate _ Negate boolean (0 -> 1, 1 -> 0) ‚ List of top two elements of stack è For each i in [1 .. n], get element at i in above created list In 05AB1E the element at index 2 in [0, 1] is 0 again- \$\begingroup\$You can cut the
»as list-of-lists output is okay and you can also removes.\$\endgroup\$Emigna– Emigna2017-06-16 07:27:45 +00:00CommentedJun 16, 2017 at 7:27 - \$\begingroup\$Explanation is a bit irrelevant.\$\endgroup\$Erik the Outgolfer– Erik the Outgolfer2017-06-17 14:14:31 +00:00CommentedJun 17, 2017 at 14:14
- 1\$\begingroup\$you can do simply
rs $1, saving 3 bytes\$\endgroup\$roblogic– roblogic2025-02-16 07:25:25 +00:00CommentedFeb 16 at 7:25
Mathematica, 25 bytes
1-Plus~Array~{#,#}~Mod~2&Clojure, 36 bytes
#(take %(partition % 1(cycle[1 0])))Yay, right tool for the job.
Retina,33 30 bytes
.+$*1$_¶1110T`10`01`¶.+¶Try it online! Explanation: The first stage converts the input to unary using1s (conveniently!) while the second stage turns the value into a square. The third stage inverts alternate bits on each row while the last stage inverts bits on alternate rows. Edit: Saved 3 bytes thanks to @MartinEnder.
- \$\begingroup\$
$`1$'is just$_.\$\endgroup\$Martin Ender– Martin Ender2017-06-16 05:27:56 +00:00CommentedJun 16, 2017 at 5:27 - \$\begingroup\$
01is justd. (Post is too old for me to bother editing it.)\$\endgroup\$Neil– Neil2025-03-27 16:49:25 +00:00CommentedMar 27 at 16:49
Java (OpenJDK 8),80 77 bytes
-3 bytes thanks to Kevin Cruijssen
j->{String s="1";for(int i=1;i<j*j;s+=i++/j+i%j&1)s+=1>i%j?"\n":"";return s;}Oh look, a semi-reasonable length java answer, with lots of fun operators.
lambda which takes an int and returns a String. Works by using the row number and column number using / and % to determine which value it should be, mod 2;
Ungolfed:
j->{ String s="1"; for(int i=1; i<j*j; s+= i++/j + i%j&1 ) s+= 1>i%j ? "\n" : ""; return s;}- \$\begingroup\$You can remove the space to save a byte. The challenge states the output format is flexible. Oh, and you can save two more bytes by changing
(i++/j+i%j)%2toi++/j+i%j&1so you won't need those parenthesis. Which make the total 1 byte shorter than my nested for-loop solution (n->{String r="";for(int i=0,j;i++<n;r+="\n")for(j=0;j<n;r+=j+++i&1);return r;}), so +1 from me. :)\$\endgroup\$Kevin Cruijssen– Kevin Cruijssen2017-06-16 07:26:16 +00:00CommentedJun 16, 2017 at 7:26 - \$\begingroup\$@KevinCruijssen Yeah I was still waiting on a response on the space. I didn't think about & having higher precedence than % and &1 == %2\$\endgroup\$PunPun1000– PunPun10002017-06-16 12:02:15 +00:00CommentedJun 16, 2017 at 12:02
Arturo,3936 32 bytes
$[n][map n'x->map n'y->%x+y+1 2]-3 thanks to alephalpha's simpler method
Prettified and rearranged for clarity:
$[n][ ; a function taking an argument n map n 'x -> ; map over 1..n, assign current elt to x map n 'y -> ; map over 1..n again, assign current elt to y (x+y+1)%2 ; what it looks like] ; end functionMATL, 7 bytes
:t!+2\~Explanation:
% Implicit input (n): % Range from 1-n, [1,2,3] t % Duplicate, [1,2,3], [1,2,3] ! % Transpose, [1,2,3], [1;2;3] + % Add [2,3,4; 3,4,5; 4,5,6] 2 % Push 2 [2,3,4; 3,4,5; 4,5,6], 2 \ % Modulus [0,1,0; 1,0,1; 0,1,0] ~ % Negate [1,0,1; 0,1,0; 1,0,1]Note: I started solving this in MATLafter I posted the challenge.
- \$\begingroup\$Equivalent, and shorter:
:&+o~\$\endgroup\$Luis Mendo– Luis Mendo2017-06-15 21:25:07 +00:00CommentedJun 15, 2017 at 21:25 - 1\$\begingroup\$Still learning :-) I'll update tomorrow. I liked your other approach too :-)\$\endgroup\$Stewie Griffin– Stewie Griffin2017-06-15 21:44:16 +00:00CommentedJun 15, 2017 at 21:44
- 1\$\begingroup\$This is what I came up with, too. And hey, you only use thepure MATL instruction set, not those pesky
Y-modified instructions @LuisMendo uses.\$\endgroup\$Sanchises– Sanchises2017-06-16 21:04:14 +00:00CommentedJun 16, 2017 at 21:04 - \$\begingroup\$@Sanchises Pesky,huh? :-P\$\endgroup\$Luis Mendo– Luis Mendo2017-06-16 21:09:39 +00:00CommentedJun 16, 2017 at 21:09
Charcoal, 8 bytes
UON10¶01Try it online! Explanation: This roughly translates to the following verbose code (unfortunately the deverbosifier is currently appending an unnecessary separator):
Oblong(InputNumber(), "10\n01");Brachylog, 15 bytes
^₂⟦₁%₂ᵐ;?ḍ₎pᵐ.\Explanation
Example Input: 4^₂ Square: 16 ⟦₁ 1-indexed Range: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] %₂ᵐ Map Mod 2: [1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0] ;?ḍ₎ Input-Chotomize: [[1,0,1,0],[0,1,0,1],[1,0,1,0],[0,1,0,1]] pᵐ. Map permute such that.. .\ ..the output is its own transpose: [[1,0,1,0],[0,1,0,1],[1,0,1,0],[0,1,0,1]]///, 87 bytes + input
/V/\\\///D/VV//*/k#D#k/k#D&k/k&DVk/k\D/SD/#/rDSkk/10DSk/1D&/V#rV#0r;VV0;VVV1;V\D/r/S/&[unary input in asterisks]Try it online! (input for 4)
Unary input in1s, 95 bytes + input
/V/\\\///D/VV//&1/k#&D&|D/#k/k#D&k/k&DVk/k\D/SD/#/rDSkk/10DSk/1D&/V#rV#0r;VV0;VVV1;V\D/r/S/&&[unary input in ones]|Try it online! (input for 8)
How does this work?
VandDare to golf\/and//respectively./*/k#/and/&1/k#&//&|//separate the input into the equivalent of'k#'*len(input())/#k//k#//&k/k&//\/k/k\//move all theks to the/r/S/blockSs are just used to pad instances whereks come after/s so that they don't get moved elsewhere, and theSs are then removed#s are then turned intor\nsThe string of
ks is turned into an alternating1010...stringThe
r\ns are turned into1010...\nsEvery pair of
1010...\n1010\nis turned into1010...\01010...;\nEither
0;or1;are trimmed off (because the01010...string is too long by 1)
Swi-Prolog, 142 bytes.
t(0,1).t(1,0).r([],_).r([H|T],H):-t(H,I),r(T,I).f([],_,_).f([H|T],N,B):-length(H,N),r(H,B),t(B,D),f(T,N,D).c(N,C):-length(C,N),f(C,N,1).Try online -http://swish.swi-prolog.org/p/BuabBPrw.pl
It outputs a nested list, so the rules say:
t()is a toggle, it makes the 0 -> 1 and 1 -> 0.r()succeeds for an individual row, which is a recursive check down a row that it is alternate ones and zeros only.f()recursively checks all the rows, that they are the right length, that they are valid rows withr()and that each row starts with a differing 0/1.c(N,C)says that C is a valid checkerboard of size N if the number of rows (nested lists) is N, and the helper f succeeds.
- \$\begingroup\$Can't you strip off all newlines?\$\endgroup\$Joao-3– Joao-32023-03-29 21:50:54 +00:00CommentedMar 29, 2023 at 21:50
Nekomata, 5 bytes
ᵒ+→2%ᵒ+→2%ᵒ+ Create an (input x input) matrix where the element at (i,j) is i+j → Increment 2% Mod 2QBIC, 19 bytes
[:|?[b|?(a+c+1)%2';Explanation
[:| FOR a = 1 to b (b is read from cmd line)? PRINT - linsert a linebreak in the output[b| FOR c = 1 to b?(a+c+1)%2 PRINT a=c=1 modulo 2 (giving us the 1's and 0's'; PRINT is followed b a literal semi-colon, suppressing newlines and tabs. Printing numbers in QBasic adds one space automatically.- \$\begingroup\$out-golfed\$\endgroup\$Esolanging Fruit– Esolanging Fruit2017-06-15 21:10:04 +00:00CommentedJun 15, 2017 at 21:10
- \$\begingroup\$@Challenger5 Sorry you can't outgolf with deleted answer.\$\endgroup\$Erik the Outgolfer– Erik the Outgolfer2017-06-16 08:19:04 +00:00CommentedJun 16, 2017 at 8:19
Mathematica, 23 bytes
ToeplitzMatrix@#~Mod~2&Mathematica, 28 bytes
Cos[+##/2Pi]^2&~Array~{#,#}&Pure function taking a positive integer as input and returning a 2D array. Uses the periodic function cos²(πx/2) to generate the 1s and 0s.
For a little more fun, how about the 32-byte solution
Sign@Zeta[1-+##]^2&~Array~{#,#}&which uses the locations of the trivial zeros of the Riemann zeta function.
Explore related questions
See similar questions with these tags.













