3
\$\begingroup\$

Question: Print out all the coordinates of a NxN grid. Preferably in C, however other languages also accepted

Input: N (integer)

Output: for N=3, a 3x3 grid:

0,0
1,0
2,0
0,1
1,1
2,1
0,2
1,2
2,2
\$\endgroup\$
10
  • 3
    \$\begingroup\$ Welcome to PPCG! This is the start of a good question. I couldn't find a duplicate from a quick search, though I might be mistaken. One thing I'd suggest is to specify the input and output. I assume that the input is an integer N. Is the output a list of tuples, a list of strings, should it be printed? Does it need to be separated by a comma? \$\endgroup\$
    – maxb
    Commented Dec 12, 2018 at 14:49
  • 4
    \$\begingroup\$ Are we allowed to return a list instead of printing them? Is any order acceptable (i.e. [[0,0],[0,1],[0,2],[1,0],[1,1],[1,2],[2,0],[2,1],[2,2]] instead of what you have above)? Can the output have 1-indexed coordinates instead of 0-indexed? \$\endgroup\$ Commented Dec 12, 2018 at 14:54
  • 1
    \$\begingroup\$ Can we start at (1,1) instead of (0,0) ? \$\endgroup\$
    – sergiol
    Commented Dec 12, 2018 at 15:01
  • 4
    \$\begingroup\$ Is there a particular order they have to be in or is any order fine? \$\endgroup\$
    – Wheat Wizard
    Commented Dec 12, 2018 at 15:18
  • 2
    \$\begingroup\$ Can't decide whether this is a dupe of this (just hardcode \$n=2\$) or this (just duplicate the argument instead of taking two distinct), but probably both. \$\endgroup\$ Commented Dec 12, 2018 at 17:04

17 Answers 17

7
\$\begingroup\$

Japt, 3 bytes

o ï

Try it

o       :Range [0,input)
  ï     :Cartesian product with itself
\$\endgroup\$
2
  • 1
    \$\begingroup\$ I had the same solution with ` ñÌ` at the end to sort it. Hopefully the OP doesn't care about the order. \$\endgroup\$
    – Oliver
    Commented Dec 12, 2018 at 15:38
  • \$\begingroup\$ @Oliver, mw would also work. \$\endgroup\$
    – Shaggy
    Commented Dec 13, 2018 at 22:45
5
\$\begingroup\$

C (gcc), 83 51 bytes

Saved 32 bytes and fixed output order thanks to Kevin Cruijssen.

i;f(n){for(i=0;i<n*n;)printf("%d,%d\n",i++%n,i/n);}

Try it online!

I'm by no means a C programmer (or C golfer), but I thought I'd give it a try. Should the main be included in the byte count?

\$\endgroup\$
3
  • \$\begingroup\$ 51 bytes :) (And no, main method doesn't have to be included. For Java, C, C#, etc. etc. we allows functions instead of full programs, since full programs are quite verbose and doesn't add anything to the actual solution.) \$\endgroup\$ Commented Dec 12, 2018 at 15:00
  • \$\begingroup\$ Btw, to have the exact same order for each coordinate as in the input (ordered by y-then-x instead of x-then-y), the i++/n,i%n should be i++%n,i/n. :) \$\endgroup\$ Commented Dec 12, 2018 at 18:06
  • \$\begingroup\$ @KevinCruijssen Good point, updated the post! \$\endgroup\$
    – maxb
    Commented Dec 13, 2018 at 9:00
5
\$\begingroup\$

R, 33 25 bytes

which(diag(scan())|1,T)-1

Try it online!

Thanks to Kirill L. for suggesting a 2-byte golf, which inspired me to look further :-)

\$\endgroup\$
4
  • \$\begingroup\$ Where do you hear about all of these functions in R? I've never even used arrayInd before, but I feel like it could be useful in a lot of things! \$\endgroup\$
    – Sumner18
    Commented Dec 12, 2018 at 15:34
  • \$\begingroup\$ @Sumner18 You can't be as golfy if you don't understand a big chunk of the language, so it pays to read the docs! there are a few workhorse functions like match and which. which in particular has an arr.ind argument, so looking at the documentation for which, we see a note in the Details under .dimnames about passing to the arrayInd function! \$\endgroup\$
    – Giuseppe
    Commented Dec 12, 2018 at 15:38
  • \$\begingroup\$ 31 bytes. Sadly, requires !!, as otherwise: argument to 'which' is not logical... \$\endgroup\$
    – Kirill L.
    Commented Dec 12, 2018 at 15:56
  • \$\begingroup\$ @KirillL. that's neat! It also inspired me to shave off another 2 bytes. EDIT: another 6 bytes! \$\endgroup\$
    – Giuseppe
    Commented Dec 12, 2018 at 15:58
3
\$\begingroup\$

PowerShell, 48 42 bytes

param($n)0..--$n|%{$i=$_;0..$n|%{"$i,$_"}}

Try it online!

Boring double-for loop.

Saved 6 bytes thanks to mazzy.

\$\endgroup\$
2
  • \$\begingroup\$ ? param($n)0..--$n|%{$i=$_;0..$n|%{"$i,$_"}} \$\endgroup\$
    – mazzy
    Commented Dec 12, 2018 at 17:12
  • \$\begingroup\$ @mazzy Of course, removing the -join. Thanks! \$\endgroup\$ Commented Dec 12, 2018 at 17:20
3
\$\begingroup\$

05AB1E, 8 bytes

L<ãí',ý»

Exactly as the challenge description: prints the 0-indexed coordinates ordered by y-then-x comma- and newline-delimited to STDOUT.

Try it online.

Explanation:

L          # Create a list in the range [1, (implicit) input]
           #  i.e. 3 → [1,2,3]
 <         # Decrease each by 1 to make the range [0, input)
           #  i.e. [1,2,3] → [0,1,2]
  ã        # Create each possible pair with itself
           #  i.e. [0,1,2] → [[0,0],[0,1],[0,2],[1,0],[1,1],[1,2],[2,0],[2,1],[2,2]]
   í       # Reverse each pair so they're sorted by y-then-x instead of x-then-y
           #  i.e. [[0,0],[0,1],[0,2],[1,0],[1,1],[1,2],[2,0],[2,1],[2,2]]
           #   → [[0,0],[1,0],[2,0],[0,1],[1,1],[2,1],[0,2],[1,2],[2,2]]
    ',ý   '# Join each pair with a space delimiter
           #  i.e. [[0,0],[1,0],[2,0],[0,1],[1,1],[2,1],[0,2],[1,2],[2,2]]
           #   → ["0,0","1,0","2,0","0,1","1,1","2,1","0,2","1,2","2,2"]
       »   # And then join everything with a newline delimiter (and output implicitly)
           #  i.e. ["0,0","1,0","2,0","0,1","1,1","2,1","0,2","1,2","2,2"]
           #   → "0,0\n1,0\n2,0\n0,1\n1,1\n2,1\n0,2\n1,2\n2,2"

05AB1E, 2 bytes

Returns a list of 1-indexed coordinates ordered by x-then-y.

Try it online.

Explanation:

L     # Create a list in the range [1, (implicit) input]
      #  i.e. 3 → [1,2,3]
 ã    # Create each possible pair with itself (and output implicitly)
      #  i.e. [1,2,3] → [[1,1],[1,2],[1,3],[2,1],[2,2],[2,3],[3,1],[3,2],[3,3]]
\$\endgroup\$
2
  • \$\begingroup\$ How comes that your 2-byter is 1-indexed? \$\endgroup\$
    – maxb
    Commented Dec 12, 2018 at 15:00
  • \$\begingroup\$ @maxb I've added an explanation to my post now. L is a 1-indexed list in the range [1,n] (where n is the implicit input). I've made it 0-indexed in my 8-byte answer with the < (decrease by 1). \$\endgroup\$ Commented Dec 12, 2018 at 18:04
3
\$\begingroup\$

C#, 59, 65

First time posting. Apologies if I do something wrong!

l=>{for(int j=0;j<l*l;)System.Console.Write($"{j%l},{j++/l}\n");}

Try it online! -per Kevin Crujissen's TIO Link.

\$\endgroup\$
6
  • 1
    \$\begingroup\$ Welcome to the site! Unfortunately, assuming input is in a predefined variable is not a standard form of input. You could add a console.readline() or however that's supposed to work (I'm not too familiar with C#) or submit a function instead. \$\endgroup\$
    – DJMcMayhem
    Commented Dec 12, 2018 at 17:57
  • 1
    \$\begingroup\$ Hi, welcome to PPCG! We allow either functions or full programs as answers (yours is currently more like a snippet), and all imports add to the byte-count. Which means your current answer should be l=>{for(var j=0;j<l*l;j++)System.Console.Write($"{j%l},{(int)j/l}\n");} instead (71 bytes). However, you can golf 6 bytes by changing (int)j/l to j++/l and remove the j++ like this: l=>{for(int j=0;j<l*l;)System.Console.Write($"{j%l},{j++/l}\n");}. Try it online. \$\endgroup\$ Commented Dec 12, 2018 at 18:00
  • 1
    \$\begingroup\$ Also, if you haven't seen it yet, tips for golfing in C# and tips for golfing in <all languages> might be interesting to read through. Apart from some ruling, your first answer looks fine, so +1 from me. Again welcome, and enjoy your stay! :) \$\endgroup\$ Commented Dec 12, 2018 at 18:01
  • \$\begingroup\$ Thanks guys! Sorry about the function error. Appreciate the for increment golf! \$\endgroup\$
    – Destroigo
    Commented Dec 12, 2018 at 18:18
  • \$\begingroup\$ Can you provide a demo? \$\endgroup\$
    – sergiol
    Commented Dec 12, 2018 at 19:32
2
\$\begingroup\$

Tcl, 70 bytes

proc C {n i\ 0} {time {set j 0
time {puts $i,$j
incr j} $n
incr i} $n}

Try it online!

\$\endgroup\$
1
1
\$\begingroup\$

Python 2, 39 bytes

lambda n:[(i%n,i/n)for i in range(n*n)]

Try it online!

\$\endgroup\$
2
  • \$\begingroup\$ I think the question requires variable N... \$\endgroup\$ Commented Dec 12, 2018 at 15:04
  • \$\begingroup\$ @FelixPalmen Doh.. Fixed :) \$\endgroup\$
    – TFeld
    Commented Dec 12, 2018 at 15:05
1
\$\begingroup\$

Pyth, 4 bytes

^UQ2

Full program. Outputs list of coordinate pairs.

^UQ2   Implicit: Q=eval(input())
 UQ    [0-Q)
^  2   Take the cartesian product of the previous result with itself
\$\endgroup\$
1
\$\begingroup\$

MathGolf, 2 bytes

r■

Try it online!

Explanation

r    Range(0, n)
 ■   Cartesian product with self for lists

For pretty-printing, you could add n to have it print one list item per line.

\$\endgroup\$
1
\$\begingroup\$

APL+WIN, 11 bytes

(⍳n)∘.,⍳n←⎕

Index origin = 0. Prompts for input for n and outputs the following for n=4:

0 0  0 1  0 2  0 3
1 0  1 1  1 2  1 3
2 0  2 1  2 2  2 3
3 0  3 1  3 2  3 3
\$\endgroup\$
1
\$\begingroup\$

Pepe, 88 bytes

I've never done 2D iterating in Pepe before and it doesn't seem to work pretty well due to labels being dynamic. There's quite a lot of two byte commands to avoid moving the pointer.

REREeErEErerErEReREErEEEErreEEreeeEeEEeerEEeerreEErEEEEEreeEReererEEEEErERRREEEEEeRrEree

Try it online!

Warning: Do not run it with input below 1 - it will kill your browser.

\$\endgroup\$
1
\$\begingroup\$

Perl 5 -na, 35 bytes

map{//;say"$',$_"for 0..$F[0]}0..$_

Try it online!

\$\endgroup\$
1
\$\begingroup\$

Powershell, 43 bytes

param($n)$i--..--$n*++$n|%{$i+=!$_;"$i,$_"}

Explanation:

One row 0..$n-1 repeated $n times.

\$\endgroup\$
1
\$\begingroup\$

Pure Bash (no external utilities), 35

eval echo {0..$[$1-1]},{0..$[$1-1]}

Try it online!

\$\endgroup\$
0
\$\begingroup\$

Lua, 63 bytes

s=io.read()-1 for i=0,s do for j=0,s do print(i..','..j)end end

Try it online!

\$\endgroup\$
0
0
\$\begingroup\$

Perl5, 42 38 bytes

for$i(0..--$n){for(0..$n){say"$i,$_"}}

(The inner loop saves a few bytes by using the implicit variable "$_" as an index.)

\$\endgroup\$

Not the answer you're looking for? Browse other questions tagged or ask your own question.