# A challenge for rookies

Print or return the following string:

R******* *R****** **R***** ***R**** ****R*** *****R** ******R* *******R
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*

*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
R******* *R****** **R***** ***R**** ****R*** *****R** ******R* *******R
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*

*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
R******* *R****** **R***** ***R**** ****R*** *****R** ******R* *******R
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*

*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
R******* *R****** **R***** ***R**** ****R*** *****R** ******R* *******R
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*

*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
R******* *R****** **R***** ***R**** ****R*** *****R** ******R* *******R
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*

*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
R******* *R****** **R***** ***R**** ****R*** *****R** ******R* *******R
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*

*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
R******* *R****** **R***** ***R**** ****R*** *****R** ******R* *******R
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*

*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
*....... .*...... ..*..... ...*.... ....*... .....*.. ......*. .......*
R******* *R****** **R***** ***R**** ****R*** *****R** ******R* *******R


This represents all the possible positions of a rook on an 8x8 chessboard and for each the possible moves it can make.

• Standard I/O methods apply, you can output as a string, list of lines, matrix of characters, etc.
• The characters used must be exactly as shown, you cannot substitute them for others.
• Trailing whitespace is permitted on each line, and trailing newlines are permitted, but otherwise the output and spacing must be exactly as shown.
• This is code golf, the shortest code in bytes wins.
• Several answers have a full line of spaces at the end of the output. Is this acceptable as a combination of trailing newlines and trailing whitespace on each line? Aug 15 at 21:17
• "A challenge for rookies"? Heh, I'm too rusty to solve any more challenges Aug 16 at 0:32
• @DLosc Yes, that's acceptable to me. Aug 16 at 3:14

# J, 29 27 24 23 bytes

' .*xR'{~*/~,0,.~1+=i.8


Try it online!

My initial observation was that the output is essentially a row-wise function table of the 8x8 identity matrix with itself, where each evaluation is simply an ordinary addition table: row_i +/ row_j.

This can be simplified further by flattening the identity matrix first, as follows:

• 1+=i.8 8 by 8 identity table, plus 1:

2 1 1 1 1 1 1 1
1 2 1 1 1 1 1 1
1 1 2 1 1 1 1 1
1 1 1 2 1 1 1 1
1 1 1 1 2 1 1 1
1 1 1 1 1 2 1 1
1 1 1 1 1 1 2 1
1 1 1 1 1 1 1 2

• 0,.~ Add a column of zeros

2 1 1 1 1 1 1 1 0
1 2 1 1 1 1 1 1 0
1 1 2 1 1 1 1 1 0
1 1 1 2 1 1 1 1 0
1 1 1 1 2 1 1 1 0
1 1 1 1 1 2 1 1 0
1 1 1 1 1 1 2 1 0
1 1 1 1 1 1 1 2 0

• , Flatten:

2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0

• */~ Multiplication table with self:

4 2 2 2 2 2 2 2 0 2 4 2 2 2 2 2 2 0 2 2 4 2 2 2 2 2 0 2 2 2 4 2 2 2 2 0 2 2 2 2 4 2 2 2 0 2 2 2 2 2 4 2 2 0 2 2 2 2 2 2 4 2 0 2 2 2 2 2 2 2 4 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
4 2 2 2 2 2 2 2 0 2 4 2 2 2 2 2 2 0 2 2 4 2 2 2 2 2 0 2 2 2 4 2 2 2 2 0 2 2 2 2 4 2 2 2 0 2 2 2 2 2 4 2 2 0 2 2 2 2 2 2 4 2 0 2 2 2 2 2 2 2 4 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
4 2 2 2 2 2 2 2 0 2 4 2 2 2 2 2 2 0 2 2 4 2 2 2 2 2 0 2 2 2 4 2 2 2 2 0 2 2 2 2 4 2 2 2 0 2 2 2 2 2 4 2 2 0 2 2 2 2 2 2 4 2 0 2 2 2 2 2 2 2 4 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
4 2 2 2 2 2 2 2 0 2 4 2 2 2 2 2 2 0 2 2 4 2 2 2 2 2 0 2 2 2 4 2 2 2 2 0 2 2 2 2 4 2 2 2 0 2 2 2 2 2 4 2 2 0 2 2 2 2 2 2 4 2 0 2 2 2 2 2 2 2 4 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
4 2 2 2 2 2 2 2 0 2 4 2 2 2 2 2 2 0 2 2 4 2 2 2 2 2 0 2 2 2 4 2 2 2 2 0 2 2 2 2 4 2 2 2 0 2 2 2 2 2 4 2 2 0 2 2 2 2 2 2 4 2 0 2 2 2 2 2 2 2 4 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
4 2 2 2 2 2 2 2 0 2 4 2 2 2 2 2 2 0 2 2 4 2 2 2 2 2 0 2 2 2 4 2 2 2 2 0 2 2 2 2 4 2 2 2 0 2 2 2 2 2 4 2 2 0 2 2 2 2 2 2 4 2 0 2 2 2 2 2 2 2 4 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
4 2 2 2 2 2 2 2 0 2 4 2 2 2 2 2 2 0 2 2 4 2 2 2 2 2 0 2 2 2 4 2 2 2 2 0 2 2 2 2 4 2 2 2 0 2 2 2 2 2 4 2 2 0 2 2 2 2 2 2 4 2 0 2 2 2 2 2 2 2 4 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
2 1 1 1 1 1 1 1 0 1 2 1 1 1 1 1 1 0 1 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 1 1 2 0
4 2 2 2 2 2 2 2 0 2 4 2 2 2 2 2 2 0 2 2 4 2 2 2 2 2 0 2 2 2 4 2 2 2 2 0 2 2 2 2 4 2 2 2 0 2 2 2 2 2 4 2 2 0 2 2 2 2 2 2 4 2 0 2 2 2 2 2 2 2 4 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

• ' .*xR'{~ Convert to ascii. This returns the required pattern.

• brilliant! i'm stealing this :)
– ngn
Aug 15 at 12:58
• ended up shorter in k because of the "identity matrix" primitive (=n) and out-of-bounds indexing returning spaces
– ngn
Aug 15 at 13:08

# Ruby, 67 66 bytes

-1 byte thanks to @G B

A function that returns a list of lists.

->{(a=0..70).map{|x|a.map{'.*R '[x%9|_1%9<8?1[x%10]+1[_1%10]:3]}}}


Attempt This Online!

### Ruby, 69 bytes

Alternatively, outputting the string to STDOUT takes two extra bytes.

s/.{8}/& /g
y/s/*/
h
y/R*/*./
H;H;H;H;H;H;H;H
g;H;H;H;G;G
s/.{584}/&\n/g
s/.{1244}$// Attempt This Online! # C (GCC), 102 bytes main(i,k){for(i=9;++i<82;puts(""))for(k=9;++k<82;)putchar(k%9&&i%9?i%10|k%10?i%10&&k%10?46:42:82:32);} Attempt This Online! # C (GCC), 111109 107 bytes #define F(X,c)for(X=0;++X<9;putchar(c)) main(i,j,k,l){F(i,10)F(j,10)F(k,32)F(l,i-j|k-l?i-j&&k-l?46:42:82);} Attempt This Online! • also 102 – c-- Aug 16 at 23:37 # Knight, 80 bytes ;=i~1W>8=i+1i;=j~1;W>8=j+1j;=x~1;W>8=x+1xO+I?j iS*'*'8xT'R'S*'.'8xT'*'' \'O''O''  Try It Online! • ... but this is a problem about a Rook, not a Knight... – Neil Aug 15 at 18:01 • @Neil Well you're in luck, cuz I also got a Knight answer on a problem about a Knight :P Aug 15 at 18:17 • Nice, that's certainly a fitting challenge to answer in! – Neil Aug 15 at 19:38 # gbz80machine code, 7372 70 bytes 21 00 C0 06 00 0E 00 16 00 1E 00 36 00 78 B9 20 01 34 7A BB 20 01 34 AF BE 28 08 3C BE 28 08 3E 52 18 06 3E 2E 18 02 3E 2A 22 3E 08 1C BB 20 DB 36 20 23 14 BA 20 D2 36 0A 23 0C B9 20 C9 36 0A 23 04 B8 20 C0 76  As an ASM rookie, I gladly accept. The string is returned in$C000-$D247 ($1248 long, nice). You may check it by copying that range using an emulator debugger (it finishes very quickly, you'll know it's done if the program counter is on or after the halt) into a text file and opening it with a text editor that supports LF. The emulator I used is BGB.

This code can be placed anywhere in a ROM and jumped to from the entrypoint, or called as a routine if the $76 (halt) at the end is replaced with a$C9 (ret).

Source, which may be assembled with RGBDS:

section "Header", ROM0[$100] jr GenerateMetaTable ; the generated binary could be placed anywhere because of the lack of calls and jps ds$150 - @, 0          ; Make room for the header

GenerateMetaTable:
ld hl, LotsaSpace
ld b, 0                 ; meta-line tracker. each of these hardcoded zeroes is necessary because all of these registers change
.outermost:
ld c, 0                 ; sub-line tracker
.mediumOuter:
ld d, 0                 ; meta-row tracker
.mediumInner:
ld e, 0                 ; sub-row tracker
.innermost:
ld [hl], 0              ; we're out of registers (besides a which is used for comparing), but we have this convenient value we're pointing to that will get overwritten anyway.
ld a, b
cp a, c                 ; meta-line == sub-line -> rook move or rook position
jr nz, .skipFirstInc
inc [hl]
.skipFirstInc:
ld a, d
cp a, e                 ; meta-row == sub-row -> rook move or rook position
jr nz, .skipSecondInc
inc [hl]
.skipSecondInc:
xor a, a
cp a, [hl]
jr z, .period           ; [hl] == 0 -> neither rook position nor rook move
inc a
cp a, [hl]
jr z, .star             ; [hl] == 1 -> rook move
ld a, "R"               ; [hl] == 2 -> rook position
jr .write
.period:
ld a, "."
jr .write
.star:
ld a, "*"
.write:
ld [hl+], a
.innermostEnd:
ld a, 8
inc e
cp a, e
jr nz, .innermost
ld [hl], " "
inc hl
.mediumInnerEnd:
inc d
cp a, d
jr nz, .mediumInner
ld [hl], "\n"
inc hl
.mediumOuterEnd:
inc c
cp a, c
jr nz, .mediumOuter
ld [hl], "\n"
inc hl
.outermostEnd:
inc b
cp a, b
jr nz, .outermost
HangMachine:
db $76 ; directly encoded halt, saves one byte over "halt", which automatically adds a nop ; this is here to prevent the program from repeating endlessly. that may not seem problematic, but if a tester stops it while [hl] is being used to hold the match count, they'll copy a bad output. ; to make GenerateMetaTable a function, just replace this with "ret" section "Memory", WRAM0 LotsaSpace: ; we need$1248 of space, but we can't just ds it because WRAM0 is $1000 long. no formalism for you. we don't bank-switch ever, so it's not a problem.  Edit 1: "ld a, 0" -> "xor a, a", -1 byte Edit 2: rearranging character loading jumps allowed removal of one, -2 bytes # Retina, 64 bytes  R7*$(9*$*R)7*$(¶9*$($*7*$(9*.$*)¶)R7*$(9*$*R
%8,9,.

8,9,.+



Try it online! Explanation:


R7*$(9*$*R)7*$(¶9*$($*7*$(9*.$*)¶)R7*$(9*$*R  Replace the empty input with the pattern of Rs, *s and .s. Note that * is Retina 1's string repetition operator so actual *s have to be quoted as $*.

%8,9,.



Clear out every ninth column.

8,9,.+



Clear out every ninth row.

# Charcoal, 31 bytes

Ｅ⁷¹⭆⁷¹§ .*R∧﹪⊕ι⁹∧﹪⊕λ⁹⊕⁺¬﹪ιχ¬﹪λχ


Try it online! Link is to verbose version of code. Explanation:

 ⁷¹                             Literal integer 71
Ｅ                               Map over implicit range
⁷¹                          Literal integer 71
⭆                            Map over implicit range and join
.*R                     Literal string  .*R
§                         Indexed by
ι                 Current row
⊕                  Incremented
﹪                   Modulo
⁹                Literal integer 9
∧                    Logical And
λ            Current column
⊕             Incremented
﹪              Modulo
⁹           Literal integer 9
∧               Logical And
ι      Current row
﹪       Modulo
χ     Predefined variable 10
¬        Logical Not
⁺         Plus
λ  Current column
﹪   Modulo
χ Predefined variable 10
¬    Logical Not
⊕          Incremented
Implicitly print


Actually using ASCII art drawing commands seems to take 51 bytes: Try it online! Link is to verbose version of code.

# PARI/GP, 69 bytes

f()=matrix(71,,i,j,Vec(".*R ")[if(i%9&&j%9,(i%10==1)+(j%10==1)+1,4)])

Attempt This Online!

# C#, 131 bytes

_=>{T[]F<T>(T x,T y,T z)=>new T[72].Select((_,i)=>i%10<1?x:i%9<8?y:z).ToArray();return F(F("R","*"," "),F("*","."," "),new[]{""});}


Try it online!

Makes use of an inline generic function:

_ => {
/* both the characters within each row and the rows in the whole string follow the same pattern
a default string, a different string at every 10th string,
and a space string at every 9th string, starting at 8

e.g. R******* *R****** **R***** ***R**** ****R*** *****R** ******R* *******R
the default string is "*", the special character is "R" and the space is " "

for the whole result string, the default string is "*....... .*...... [...]"
the special string is "R******* *R****** [...]" and the space is either "" or " " (both work)

*/

// generic function (defines T as the generic type), inputs of type T
T[] F<T> (T specialChar, T defaultChar, T space) =>
// create a new T[] of length 72, and set each element according to its index
new T[72]
.Select((_, i) =>
// special char every 10th element
i % 10 < 1 ? specialChar :
// space every 9 starting at 8, otherwise default
i % 9 < 8 ? defaultChar : space
).ToArray();

// construct rook (special) row string
var a = F("R", "*", " ");
// construct default row string
var b = F("*", ".", " ");
// correctly typed space for next func call
var c = new string[] { "" };

// construct whole string using default, special and space strings
return F(a, b, c);
};


# Haskell, 9990 89 bytes

[[" R*."!!((f(i%10)+f(k%10)+1)*f(k%9*i%9))|k<-r]|i<-r]
(%)=mod
f=fromEnum.(>0)
r=[10..81]

Attempt This Online!

• You don't need the space in front of the list comprehension. For ATO, you can use the CPP pragma and then write a =\  and continue on the next line without indentation. (Also intercalate "\n" is exactly unlines) Attempt This Online! Aug 17 at 21:16
• @Laikoni thank you! Aug 18 at 9:11

# Haskell, 63 bytes

q["",q" .*",q" *R"]
q l=[l!!(0^m 10-0^m 9+1)|m<-mod<$>[10..80]]  Try it online! # Jelly, 17 bytes 8⁼þj-‘×þị“.* R ”  A niladic Link that yields a list of the lines of characters. The empty lines have trailing spaces. Try it online! (Footer joins with newlines) ### How? Implements Jonah's brilliant method. 8⁼þj-‘×þị“.* R ” - Link: no arguments 8 - 8 þ - ([1..8]) table ([1..8]) with: ⁼ - is equal? - - -1 j - join ‘ - increment all values  - use as both arguments of: þ - table with: × - multiply “.* R ” - ".* R " ị - index into (1-indexed and modular, so 0 gives ' ')  • You can remove the trailing ” at the end, it is implicitly closed Aug 15 at 23:48 • Only if it were valid as a full program, which I don't think it would be without joining with newlines. Aug 15 at 23:51 • I guess you're right, I forgot about Jelly's smashing. Aug 15 at 23:52 • You've accidentally used # instead of * in your string (although it doesn't matter for the byte-count) Aug 25 at 7:24 # Factor + math.matrices, 97 bytes [ 8 identity-matrix 1 m+n [ 0 suffix ] map concat dup outer [ "\0"" .*R"zip substitute ] map ]  Try it online! A straight translation of @Jonah's excellent J answer. • 8 identity-matrix Make an 8x8 identity matrix. • 1 m+n Add 1 to each element of the matrix. • [ 0 suffix ] map Add a column of 0s to the far right end of the matrix. • concat Flatten the matrix into a list. • dup outer Take the outer product with itself. • [ "\0"" .*R"zip substitute ] map Convert the resulting matrix to the required code points. # V (vim), 42 bytes iR·* 7o*·. {7ñä}$FR7jdpbñGï{7ñäGGkdd{p


Try it online!

Hexdump:

00000000: 6952 b72a 201b 376f 2ab7 2e20 1b7b 37f1  iR.* .7o*.. .{7.
00000010: e416 7d24 4652 1637 6a64 7062 f147 ef7b  ..}$FR.7jdpb.G.{ 00000020: 37f1 e447 476b 6464 7b70 7..GGkdd{p  # BQN (REPL), 24 bytes " .*xR"⊏˜×⌜˜⥊∾⟜0˘1+=⌜˜↕8  Outputs a 2D array of characters. Try it at BQN online! ### Explanation Ports Jonah's J solution, which you should upvote. " .*xR"⊏˜×⌜˜⥊∾⟜0˘1+=⌜˜↕8 ↕8 Range(8) =⌜˜ Equality table with self (8x8 identity matrix) 1+ Add 1 to each (main diagonal is 2s, rest is 1s) ∾⟜0˘ Append 0 to each row ⥊ Deshape into a flat list ×⌜˜ Multiplication table with self ⊏˜ Use each element of that 2D array to index into " .*xR" this string  Just for fun, here's a different solution (27 bytes) that outputs a 2D array of 2D arrays of characters (feels appropriate, but goes against the challenge's I/O requirements and also is longer): {".*R"⊏˜r(+´𝕨‿𝕩=⋈)⌜r}⌜˜r←↕8  Try it at BQN online! # Vyxal, 18 bytes 8Þ□›0vJf:v* €xRİ  Try it Online! Another port of Jonah's answer. 8Þ□›0vJf:v* €xRİ 8Þ□ # 8x8 identity matrix (8x8 matrix of zeros, but with ones on the main diagonal) › # Increment 0vJ # Append a zero to each f # Flatten :v* # Multiplication table with self  €xRİ # Index each number into " .*xR" # ("€" works for ".*" because it is meant to shorten regexes, but it works here too)  If j (join) worked on lists (see issue), this could be 16 bytes: 8Þ□›0j:v* €xRİ. • Sadly, we don't have a shorthand for .*? Aug 17 at 10:13 # Rust, 171 bytes ||(0..71).any(|x|(0..72).map(|y|(x/9,y/9,x%9,y%9,y/71+1)).any(|(x,y,a,b,l)|print!("{: <1$}",if a>7||b>7{' '}else if x==a&&y==b{'R'}else if x==a||y==b{'*'}else{'.'},l)>()))


Playground Link

# Pyth, 36 bytes

VJU71sm@>".*R "+!%NT!%dT_<7.|%d9%N9J


Try it online!

# JShell (Java), 191 188 bytes

void f(String x){System.out.print(x);}int i,j,x,y;for(j=0;j<8;j++){for(y=0;y<8;y++){for(i=0;i<8;i++){for(x=0;x<8;x++){int X=i^x,Y=j^y;f(X*Y<1?X+Y<1?"R":"x":".");}f(" ");}f("\n");}f("\n");}


Or, expanded:

void f(String x) {
System.out.print(x);
}

int i, j, x, y;
for (j = 0; j < 8; j++) {
for (y = 0; y < 8; y++) {
for (i = 0; i < 8; i++) {
for (x = 0; x < 8; x++) {
int X = i ^ x;
int Y = j ^ y;
f(X * Y < 1 ? X + Y < 1 ? "R" : "x" : ".");
}
f(" ");
}
f("\n");
}
f("\n");
}

• Welcome to CGCC, nice answer! You could save 4 bytes by using int X=i^x,Y=j^y;f(X*Y<1?X+Y<1?"R":"x":".");. Aug 16 at 7:11

# Dart, 173 bytes

main(){var l=[0,1,2,3,4,5,6,7],s="R"+"*"*7+"*......."*7,p=" "*7+"\n",i,j,k,m;print([for(i in l)...[for(j in l)for(k in l)...[for(m in l)s[(k^m)*8+i^j],p[k]],"\n"]].join());}
//       1         2         3         4         5         6         7         8         9         0         1         2         3         4         5         6         7
//345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123


Pretty-printed:

main() {
var l = [0, 1, 2, 3, 4, 5, 6, 7],
s = "R" + "*" * 7 + "*......." * 7,
p = " " * 7 + "\n",
i, j, k, m;
print([
for (i in l) ...[
for (j in l)
for (k in l) ...[for (m in l) s[(k ^ m) * 8 + i ^ j], p[k]],
"\n"
]
].join());
}


# Perl 5, 100 bytes

print$_%72?$_/72%9?$_%9?($v=1==$_%72%10)&($h=1==$_/72%9-$_/648)?R:$v|$h?'*':'.':$":'':$/for 73..5184


Try it online!

# C (gcc), 140 bytes

#define a(z) for(int z=0;z<8;++z){
#define b printf
main(){a(i)a(j)a(k)a(l)b(i==j&l==k?"R":i==j|l==k?"*":".");}b(" ");}b("\n");}b("\n");}}


Try it online!

#include <stdio.h>
int main() {
for (int i = 0; i < 8; ++i) {
for (int j = 0; j < 8; ++j) {
for (int k = 0; k < 8; ++k) {
for (int l = 0; l < 8; ++l) {
printf(i == j && l == k ? "R" : i == j || l == k ? "*" : ".");
}
printf(" ");
}
printf("\n");
}
printf("\n");
}
}

• 102 bytes Sep 3 at 16:19

# Java, 151145 137 bytes

for(int y=0,x,a,b;++y<72;){var s="";for(x=1;x<72;s+=x++%9*(y%9)<1?' ':a+b<1?'R':a*b<1?'*':'.'){a=~-x%10;b=~-y%10;}System.out.println(s);}


Attempt This Online! Link is to a "normal" Java version, as I don't know if the link to the online JShell will stay valid.

Jeffrey's answer made me aware of JShell, which saves a couple of bytes compared to a lambda function or an interface. EDIT It also reminded me that ternary ifs don't always need parentheses. Thanks!

-8 bytes thanks to @ceilingcat!

# 05AB1E, 21 bytes

8LδQ>0δª˜Dδ*" .*xR"sè


Another port of @Jonah's J answer, so make sure to upvote him as well!

Try it online. (Footer J» is to pretty-print the resulting matrix of characters.)

Explanation:

8LδQ          # Push an 8x8 equality matrix (8x8 of 0s, with main diagonal of 1s):
8L            #  Push list [1,2,3,4,5,6,7,8]
#  (implicitly use it twice since there isn't anything else on the stack)
δ           #  Apply double-vectorized:
Q          #   Equality check
>         # Increase each by 1
δ       # Map over each row:
0 ª      #  Append a 0 to the row
˜             # Flatten the matrix to a single list
D            # Duplicate it
δ           # Apply double-vectorized again:
*          #  To create a multiplication matrix
" .*xR"   # Push this string
s  # Swap so the matrix is at the top of the stack
è # Index the matrix into the string
# (after which the result is output implicitly)
`