g | x | w | all
Bytes Lang Time Link
007Vyxal 3 Rj240131T132446Zpacman25
045AWK250823T175730Zxrs
044Perl 5 a240131T153752ZXcali
017Uiua240131T151924ZJoao-3
010K ngn/k240131T141443Zcoltim
009Japt R201023T151221ZShaggy
094Common Lisp170215T222659Zuser6516
044MATLAB151207T154731Zslvrbld
056Ruby151129T082445ZVasu Ada
185C#151201T184751ZJúl
183Java151130T003943ZPhinet
050Julia151129T213547ZAlex A.
019Vitsy151129T020335ZAddison
013APL151129T030400Zlirtosia
025Japt151129T020255ZETHprodu
093Processing151129T143836Z6infinit
054MATLAB151129T023348ZTom Carp
055JavaScript ES6151129T124258Zintrepid
085Mathematica151129T124116ZLegionMa
005 J151129T081716Zrandomra
060JavaScript ES6151129T072306Zuser8165
016CJam151129T083105ZPeter Ta
066R151129T062409ZAlex A.
060Python 2151129T034150Zxsot
022Minkolang 0.14151129T021354ZEl'e
017Pyth151129T015719ZMaltysen
014K151129T023043ZJohnE
012J151129T022957ZZgarb
043BBC Basic151129T021230ZLevel Ri
020CJam151129T020010ZanOKsqui

Vyxal 3 Rj, 7 bytes

×ᵛ?Ḋ¹Ẇ“

Try it Online!

input as H, W, N

×ƛ?Ḋ]¹Ẇ“­⁡​‎‎⁡⁠⁡‏⁠‎⁡⁠⁢‏⁠⁠‎⁡⁠⁢⁡‏‏​⁡⁠⁡‌⁢​‎‎⁡⁠⁣‏⁠‎⁡⁠⁤‏‏​⁡⁠⁡‌⁣​‎‎⁡⁠⁢⁢‏⁠‎⁡⁠⁢⁣‏⁠‎⁡⁠⁢⁤‏‏​⁡⁠⁡‌⁤​‎‏​⁢⁠⁡‌­
×ƛ  ]     # ‎⁡Map over the range H x W
  ?Ḋ      # ‎⁢Divisible by N?
     ¹Ẇ“  # ‎⁣Split into chunks of length W and join on nothing
# ‎⁤j flag joins on newlines
💎

Created with the help of Luminespire.

AWK, 45 bytes

{for(;i++<$1*$2;)printf(i%$3?0:1)(i%$1?X:RS)}

Attempt This Online!

Input: 7 3 3 Output:

0010010
0100100
1001001

Perl 5 -a, 44 bytes

print$_%$F[1]&&1,$/x!($_%"@F")for 1.."@F"*<>

Try it online!

Input format is:

W N
H

Output uses 1 for the spacer and 0 for the character.

Uiua, 17 bytes

↯⇌⊟⊙⊙(⇌⊂@X↯:@.-1)

Test pad

K (ngn/k), 10 bytes

{y#|x$"X"}

Try it online!

Takes input as two arguments; N as the first/left arg, and (H;W) as the second/right arg. Uses " " and "X" as the output characters.

Japt -R, 9 bytes

Takes input as [W,H],N and uses spaces instead of .s & "s instead of Xs.

×îQùV)òUÎ

Try it

Common Lisp, SBCL, 94 bytes

(lambda(a b c)(dotimes(i(* a b))(format t"~:[.~;X~]~@[~%~]"(=(mod(1+ i)c)0)(=(mod(1+ i)a)0))))

Explanation

~:[.~;X~] <-- takes argument - if argument is true write ., if false write X
~@[~%~] <-- takes argument - if argument is true write newline, if not treat argument as if it was not used

(=(mod(1+ i)c)0)(=(mod(1+ i)a)0) looks pretty silly (because it's so similiar but I don't know if it can be solved, saving bytes

I use (1+ i) instead of i because dotimes starts from i=0 and I want to start from 1. It is also helpful because I can use (* a b) instead of (1+(* a b))

MATLAB, 44 bytes

Note: Very different approach than the one used by Tom Carpenter.

@(x,y)char(reshape(~mod(1:prod(x),y),x)'+46)

Defines an anonymous function that accepts inputs as [W,H],N. I approached this problem using not-the-modulo-of-N for an array 1:W*H and then simply reshaping the solution to a two-dimensional array, which is then converted to a character array.

Example output for [5,3],7:

.....
./...
.../.

Ruby, 67 56 bytes

->w,h,n{(1..h).map{(1..w).map{o,$.=$.%n<1?1:0,$.+=1;o}}}

Printing an array since it is accepted.

67 bytes

->w,h,n{i=1;puts (1..h).map{(1..w).map{o,i=i%n<1?1:0,i+=1;o}.join}}

Ungolfed:

-> w, h, n {
  (1..h).map {
    (1..w).map {
      o, $. = $.%n < 1 ? 1 : 0, $.+ = 1
      o
    }
  }
}

Usage:

->w,h,n{(1..h).map{(1..w).map{o,$.=$.%n<1?1:0,$.+=1;o}}}[8,6,7]
=> [[0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0]]

C#, 185 bytes

using System;class x{void a(int w,int h,int n){int c=1;for(int i=0;i<h;i++){for(int j=1;j<=w;j++){if(c%n==0){Console.Write("x");}else{Console.Write(".");}c++;}Console.WriteLine();}}}

For a more readable Reading:

using System;
class x
{
  void a(int w, int h, int n)
  {
    int c = 1;
    for (int i = 0; i < h; i++)
    {
        for (int j = 1; j <= w; j++)
        {
            if (c % n == 0)
            {
                Console.Write("x");
            }
            else
            {
                Console.Write(".");
            }
            c++;
        }
        Console.WriteLine();
     }
  }
}

Usage:

new x().a(7, 3, 3);

Java, 185 183 bytes

Thanks Thomas Kwa, for saving me 2 bytes!

interface B{static void main(String[] a){int w = Byte.parseByte(a[0]);for(int i=0;i++<w*Byte.parseByte(a[1]);)System.out.print((i%Byte.parseByte(a[2])>0?".":"X")+(i%w<1?"\n":""));}}

Ungolfed (ish):

interface A {
  static void main(String[] a) {
    int w = Byte.parseByte(a[0]);
    for(
      int i = 0;
      i++ < w*Byte.parseByte(a[1]);
    )
      System.out.print((
        i%Byte.parseByte(a[2]) > 0 ? "." : "X"
        )+(
        i%w < 1 ? "\n" : ""
      ));
  }
}

Usage:

$ java B 5 3 7
.....
.X...
...X.

Maybe java will win one day :P

Julia, 50 bytes

f(w,h,n)=reshape([i%n<1?"X":"." for i=1:w*h],w,h)'

This creates a function f that accepts three integers and returns a 2-dimensional array of strings.

Ungolfed:

function f(w::Integer, h::Integer, n::Integer)
    # Construct an array of strings in reading order
    a = [i % n == 0 ? "X" : "." for i = 1:w*h]

    # Reshape this columnwise into a w×h array
    r = reshape(a, w, h)

    # Return the transpose
    return transpose(r)
end

Vitsy, 25 23 22 21 19 Bytes

Thanks to @Sp3000 for pointing out that I don't need a duplicate and saving me 2 bytes!

Takes input as N W H. Try it online!

1}\0XrV\[V\[{DN]aO]
1                         Push 1 to the stack.
 }                        Push the backmost to the front and subtract 2.
  \0X                     Duplicate the 0 temp variable times.
     r                    Reverse the stack.
      V                   Save as final global variable.
       \[         ]       Repeat top item times.
         V\[   ]          Repeat global variable times.
            {DO           Duplicate, output, then shift over an item.
                aO        Output a newline.

APL, 13 bytes

{⍪,/⍕¨⍺⍴⍵=⍳⍵}

This takes H W as the left argument and N as the right argument.

Explanation:

{⍪,/⍕¨⍺⍴⍵=⍳⍵}     Dyadic function (args are ⍺ on left, ⍵ on right):
        ⍵=⍳⍵      ⍵ = (1 2 3...⍵); this is ⍵-1 0s followed by a 1
      ⍺⍴          Shape by the left argument; e.g. 5 3 gives a 5x3 array
    ⍕¨            Stringify each entry
  ,/              Join the strings in each row 
 ⍪                Make column vector of strings

Try it online: first test cases, last test case. Note that although this shows boxed output, my copy of Dyalog doesn't.

Japt, 33 32 27 25 bytes

SpW-1 +Q p-~U*V/W f'.pU)·

Takes input in format W H N. Uses   and " in place of . and X, respectively. Try it online!

Ungolfed and explanation

SpW-1 +Q p-~U*V/W f'.pU)·qR
          // Implicit: U = width, V = height, W = interval
SpW-1 +Q  // Create a string of W - 1 spaces, plus a quotation mark.
p-~U*V/W  // Repeat this string ceil(U*V/W) times.
f'.pU)    // Split the resulting string into groups of U characters.
qR        // Join with newlines.
          // Implicit: output last expression

Suggestions welcome!

Processing, 93 bytes (Java, 104 bytes)

void f(int a,int b,int c){for(int i=0;i<a*b;i++)print((i%c>c-2?"X":".")+(i%a>a-2?"\n":""));}}

The reason I used Processing instead of Java is that you don't need to acces the pointer by tiping System.out because a local variable is directly accessible. I earned 11 bytes with this. The function doesn't return the result but prints it.

MATLAB, 61 55 54 bytes

function c=g(d,n);b=ones(d);b(n:n:end)=0;c=[b'+45,''];

Wow, I thought MATLAB would be competitive in this one, but how wrong I was!

The function creates an array of 1's of the correct dimensions, and then sets every n'th element to be 0 (MATLAB implicitly handles wrapping around the indices into 2D). We then add on 45 ('-') to this number and converted to a char array to be returned.

The questions allows any distinct two ASCII characters to be used for the grid, I am using '-' in place of 'x' to save some bytes. The input format is also not fixed, so it should be supplied as [w h],n - i.e. an array of width and height, and then n as a second parameter.


This also works with Octave and can be tried online here. The function is already set up in the linked workspace, so you can simply call for example:

g([4,5],3)

Which outputs:

..-.
.-..
-..-
..-.
.-..

JavaScript (ES6), 55 bytes

(w,h,n)=>(f=i=>i++<w*h?+!(i%n)+(i%w?"":`
`)+f(i):"")(0)

Uses the IIFE f to loop to save a return statement.

Output for w=5, h=3, n=7:

00000
01000
00010

Mathematica, 85 bytes

""<>(#<>"
"&/@ReplacePart["."~Table~{t=# #2},List/@Range[#3,t,#3]->"X"]~Partition~#)&

As with many other solutions, this creates a single row, then partitions it.

J, 9 5 bytes

$":&1

Uses spaces and 1's and expects input in the form H W f N

Explanation:

$":&1
   &1 bonds the fixed right argument 1 to ":
 ":   formats the right argument number (1) to take up left argument (N) number of cells
      padding with spaces, resulting  in "  1"
$     reshape to H-by-W with repeating the string if necessary 

Usage:

   3 7 ($":&1) 3
  1  1 
 1  1  
1  1  1

Try it online here.

JavaScript (ES6), 65 60 bytes

(w,h,n)=>eval('for(i=r=``;i++<w*h;i%w?0:r+=`\n`)r+=i%n?0:1')

Explanation

(w,h,n)=>eval('    // use eval to remove need for return keyword
  for(
    i=             // i = current grid index
      r=``;        // r = result
    i++<w*h;       // iterate for each index of the grid
    i%w?0:r+=`\n`  // if we are at the end of a line, print a newline character
                   // note: we need to escape the newline character inside the template
  )                //       string because this is already inside a string for the eval
    r+=i%n?0:1     // add a 0 for . or 1 for X to the result
                   // implicit: return r
')

Test

W = <input type="number" id="W" value="7" /><br />
H = <input type="number" id="H" value="3" /><br />
N = <input type="number" id="N" value="3" /><br />
<button onclick="result.innerHTML=(

(w,h,n)=>eval('for(i=r=``;i++<w*h;i%w?0:r+=`\n`)r+=i%n?0:1')

)(+W.value,+H.value,+N.value)">Go</button>
<pre id="result"></pre>

CJam (16 bytes)

{1$*,:)@f%:!/N*}

Takes input on the stack in the order N W H, returns string using characters 0 and 1. Online demo

Dissection

{        e# Anonymous function. Stack: N W H
  1$*,   e# Stack: N W [0 1 ... W*H-1]
  :)     e# Stack: N W [1 2 ... W*H]
  @f%    e# Stack: W [1%N 2%N ... W*H%N]
  :!     e# Map Boolean not, taking 0 to 1 and anything else to 0
  /      e# Split into W-sized chunks (i.e. the lines of the grid)
  N*     e# Join the lines with newlines
}

R, 66 bytes

function(w,h,n){x=rep(".",a<-w*h);x[1:a%%n<1]="X";matrix(x,h,w,T)}

This is a function that accepts three integers and returns a matrix of character values. To call it, assign it to a variable.

Ungolfed:

f <- function(w, h, n) {
    # Get the area of the square
    a <- w*h

    # Construct a vector of dots
    x <- rep(".", a)

    # Replace every nth entry with X
    x[1:a %% n == 0] <- "X"

    # Return a matrix constructed by row
    matrix(x, nrow = h, ncol = w, byrow = TRUE)
}

Python 2, 60 bytes

w,h,n=input()
s='%%%dd'%n%0*w*h
exec"print s[:w];s=s[w:];"*h

This prints space and 0 in place of . and X. Input is taken as a tuple in the form of w,h,n.

Minkolang 0.14, 34 30 28 22 bytes

n2-D1n$zn[z[1Rd6ZO]lO]

Check one case here and check all test cases here. Expects input like N W H.

Explanation

n                 Take number from input (N)
 2-               Subtract 2
   D              Duplicate the top of stack (which is 0 because it's empty) N-2 times
    1             Push a 1 onto the stack
n                 Take number from input (W)
 $z               Store W in the register (z)
n                 Take number from input (H)
 [                Open a for loop that repeats H times
  z[              Open a for loop that repeats W times
    1R            Rotate 1 step to the right
      d           Duplicate top of stack
       6Z         Convert number to string
         O        Output as character
          ]       Close for loop
           lO     Output a newline
             ]    Close for loop

As Minkolang's codebox is toroidal, this will wrap around to the beginning. As every n will now take in -1, this eventually crashes with an error and no further output, which is allowed.

Pyth - 19 18 17 bytes

Hope to golf it more. Takes input as N\n[W, H].

jc.[k+*dtvzN*FQhQ

Test Suite.

K, 21 19 18 14 bytes

Takes arguments as (H W;N):

{".X"x#y=1+!y}

In action:

  f:{".X"x#y=1+!y};

  f.'((3 5;1);(3 5;2);(3 7;3);(4 10;5);(3 5;16))
(("XXXXX"
  "XXXXX"
  "XXXXX")
 (".X.X."
  "X.X.X"
  ".X.X.")
 ("..X..X."
  ".X..X.."
  "X..X..X")
 ("....X....X"
  "....X....X"
  "....X....X"
  "....X....X")
 ("....."
  "....."
  "....."))

J, 12 bytes

$'X'_1}#&'.'

This is a dyadic function that takes the array H W as its left argument and N as its right argument. Usage:

  f =: $'X'_1}#&'.'
  3 5 f 3
..X..
X..X.
.X..X

Explanation

$'X'_1}#&'.'
         '.'  The character '.'
       #&     repeated N times
    _1}       with the last character
 'X'          replaced by 'X'
$             reshaped into an HxW array

BBC Basic, 67 ASCII characters, tokenised filesize 43 bytes

Download interpreter at http://www.bbcbasic.co.uk/bbcwin/download.html

INPUTw,h,n:WIDTHw:PRINTLEFT$(STRING$(w*h,STRING$(n-1,".")+"X"),w*h)

BBC basic has a handy command for limiting the field width. We use STRING$ to make w*h copies of the string of n-1 periods followed by an X. Then we use LEFT$ to truncate this to w*h characters.

CJam, 20 Bytes

q~:Z;_@*,:){Z%!}%/N*

Takes input as H W N.