Patrón de tablero de ajedrez

18

Entrada: un número positivo, menor que 80, desde stdin o como argumento de línea de comandos.

Salida: un patrón de tablero de ajedrez cuadrado, el tamaño del número de entrada. Los campos oscuros están representados por la letra 'X', los campos blancos por un espacio. El campo superior izquierdo debe ser 'X'.

Se requiere un programa completo.


Ejemplos:

Entrada : 1

Salida :

X

Entrada : 8

Salida :

X X X X 
 X X X X
X X X X 
 X X X X
X X X X 
 X X X X
X X X X 
 X X X X
steenslag
fuente
1
Estaba buscando una etiqueta como 'ligero' para esto.
steenslag
1
Programa completo y completo, supongo.
JB
@JB: Sí ¿Cómo formulo eso? Agregar 'a stdout' a la salida requerida?
steenslag
1
Solo di que quieres un programa completo. También es posible que desee especificar argumentos de línea de comandos, para evitar confusiones con argumentos de función.
JB
Cuando dices arriba a la derecha, ¿te refieres a arriba a la izquierda? De lo contrario, corrija la salida de ejemplo para la entrada 8.
Peter Taylor

Respuestas:

5

Pyth, 13 caracteres

Nota: Pyth es demasiado nuevo para ser elegible para ganar. Sin embargo, fue un golf divertido y pensé en compartirlo.

VQ<*QX*d2N\XQ

Pruébalo aquí

Cómo funciona:

                       Q = eval(input())
VQ                     for N in range(Q):
  <         Q                                                        [:Q]
   *Q                                    (Q*                        )
     X*d2N\X                                assign_at(" "*2, N, "X")

Básicamente, esto se usa Xpara generar "X "o " X"alternativamente, luego repite esa cadena Qveces y toma sus primeros Qcaracteres. Esto se repite Qveces.

¿Cómo funciona la función X(asignar en)? Toma la cadena original, " "en este caso, una ubicación de asignación, Nen este caso, y un carácter de reemplazo, "X"en este caso. Dado que las asignaciones de Pyth son modulares, esto reemplaza el espacio en la ubicación N%2con an X, y devuelve la cadena resultante, que por lo tanto está "X "en la primera, tercera, etc. líneas, y " X"en las otras.

isaacg
fuente
... pero APL no lo es. Gracias por chocar. Me pregunto si OP volverá a aceptar ...
Adám
"Pyth es demasiado nuevo para ser elegible para ganar" No entiendo esto y vuelvo a aceptar este.
steenslag
1
@steenslag Para explicar, hay una laguna estándar en la que los idiomas más nuevos que la pregunta no son elegibles. Esto es para evitar lenguajes específicamente diseñados para funcionar bien en un desafío específico. Eres libre de hacer lo que quieras con tu desafío, por supuesto.
isaacg
11

Golfscript - 17 caracteres

~:N,{"X "N*>N<n}%

Análisis

~ convertir la entrada a un int
:N almacén en la variable N
,{...}para cada valor de [0 ... N-1]
"X "N*repita "X" para dar una cadena de N * 2 caracteres
>tome la subcadena a partir del índice de bucle ...
N<... terminando N caracteres más tarde,
ncoloque una nueva línea al final de cada cadena

gnibbler
fuente
5

Perl, 41 40

for$i(1..$_){say substr" X"x$_,$i%2,$_}

Perl 5.10 o posterior, ejecutar con perl -nE 'code'( ncontado en tamaño de código)

Salida de muestra:

$ perl -nE'for$i(1..$_){say substr" X"x 40,$i%2,$_}' <<<5
X X X
 X X
X X X
 X X
X X X
$ perl -nE'for$i(1..$_){say substr" X"x 40,$i%2,$_}' <<<8
X X X X
 X X X X
X X X X
 X X X X
X X X X
 X X X X
X X X X
 X X X X
JB
fuente
¿Qué hace la 'x' en 'x 40'?
steenslag
2
@steenslag: xes el operador de repetición de cadenas. 'a' x 3rendimientos 'aaa'.
JB
4

Python, 48 caracteres

x,i=input(),0
exec'print(x*"X ")[i:i+x];i^=1;'*x
Nolen Royalty
fuente
3

Python, 76 caracteres

n=input()
p='X '*n
print n/2*(p[:n]+'\n'+p[1:n+1]+'\n'),
if n&1:print p[:n]
Keith Randall
fuente
3

Scala - 141 95 caracteres

var a=args(0).toInt
for(y<-1 to a;x<-1 to a)print((if((x+y)%2<1)"X"else" ")+("\n"*(x/a)take 1))

Uso: scala filename Ndonde n es su entrada al programa.

Gareth
fuente
3

APL (16)

Suponiendo ⎕IO=0(es decir, matrices indexadas a cero, es una configuración)

' X'[=/¨2⊤¨⍳2⍴⎕]

Explicación:

  • ⍳2⍴⎕: lea un número N y cree una matriz N × N que contenga (0,0) a (N-1, N-1).
  • 2⊤¨: obtiene el bit menos significativo de cada número en la matriz. (Entonces ahora tenemos (0,0), (0,1), (0,0) ... (1,0), (1,1), (1,0) ...)
  • =/¨: para cada par, vea si los dos números son iguales. (Ahora tenemos 1 0 1 0 1 0 ...)
  • ' X'[... ]: ponga un espacio para cada 0 y una X para cada 1.
marinus
fuente
3

Rubí 45 42

(x=gets.to_i).times{|i|puts ("X "*x)[i,x]}

Demostración: http://ideone.com/Mw25e

Cristian Lupascu
fuente
(x=gets.to_i).timesahorra tres caracteres. ¿Por qué el repentino interés renovado en este viejo?
steenslag
@steenslag ¡Gracias! He aplicado tu propina. Acabo de ver esta pregunta en la parte superior de la lista y pensé en publicar una respuesta para desempolvar mis habilidades en Ruby. Aparentemente no los he desempolvado lo suficiente. :)
Cristian Lupascu
2

Pitón

48 caracteres

EDITAR: Un poco equivocado ... Hay un espacio extra al final ... pero eso no es visible. Si cambia el espacio a "O" (o cualquier carácter que no sea un espacio en blanco), modifíquelo [i%2:n]a [i%2:n+i%2]. para la versión correcta

n=input()
i=0;
while i<n:print('X '*n)[i%2:n];i+=1
st0le
fuente
2

C ++ - 253 caracteres ofuscados

#include <iostream.h>
int main(int i,char*c[]=0)
{
  char a=i,b=i>>8;i&32512?((i>>16&255)<a)?(cout<<b)?main((i^30720)+65536):0:(cout<<endl)?(((b=(i>>24)+1)<a)?main((i&2130706559)+((b&1)?16785408:16799744)):0):0:main((i>=2?atoi(1[c]):8)|22528);
}
Skizz
fuente
1
Amo todos los números mágicos.
Joey Adams
2

JavaScript, 169

function b(w){var i=w,j=w,r='';while(i--){while(j--){if((i+j)%2)r+=' ';else r+='X'}j=w;r+="\n"}return r}do{n=parseInt(prompt('Number'))}while(isNaN(n)||n<1);alert(b(n));
zzzzBov
fuente
Estoy bastante seguro de que puede convertir a número como en +'1'lugar de parseInt('1'). No te daré un número entero, pero no creo que sea importante tenerlo aquí, ¿verdad?
Algún tipo
2

k (26 caracteres)

26 Para la función desnuda:

{-1',/x#',x#'("X ";" X");}

O 7 más para recibir información de stdin

{-1',/x#',x#'("X ";" X");}"I"$0:0
skeevey
fuente
2

Bash: 60 caracteres

yes X|fmt -w80|paste -d '' <(yes '
 ') -|head -$1|cut -c1-$1

El tamaño de la tabla se pasa como parámetro de línea de comandos, por ejemplo bash chesstable.sh 8.

hombre trabajando
fuente
2

Java 10, función lambda, 92 87 84 bytes

n->{for(int i=0;i<n*n;)System.out.print(((i%n+i/n)%2<1?"X":" ")+(++i%n<1?"\n":""));}

Pruébalo en línea aquí .

Gracias a ceilingcat por jugar 4 bytes y a Kevin Cruijssen por jugar 3 más.

Versión sin golf:

n -> { // void lambda taking an int as argument
    for(int i = 0; i < n*n; ) // loop over the entire square
            System.out.print(((i%n + i/n) % 2 < 1 ? "X" : " ") // print an 'X' or a space depending on which line&column we're on
               + (++i % n < 1 ? "\n" : "")); // print a newline at the end of a line
}

Java 8, programa completo, 155 139 bytes

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

Pruébalo en línea aquí .

Versión sin golf:

interface M {
    static void main(String[] a) {
        int i = 0, // iterator variable for the loop
            n = new Byte(a[0]); // take the argument and convert it to an int
        for(; i < n*n; ) // loop over the entire square
            System.out.print( ((i%n + i/n) % 2 < 1 ? "X" : " ") // print an 'X' or a space depending on which line&column we're on
                             +(++i % n < 1 ? "\n" : "") ); // print a newline at the end of a line
        }
    }
}
OOBalance
fuente
@ceilingcat Gracias! Me las arreglé para eliminar un byte más, y también apliqué tu enfoque a mi programa completo. 16 bytes guardados allí.
OOBalance
Hacer dos s+=es 2 bytes más corto que esos paréntesis:n->{var s="";for(int i=0;i<n*n;s+=++i%n<1?"\n":"")s+=(i%n+i/n)%2<1?"X":" ";return s;}
Kevin Cruijssen
O 1 más byte off (84 en total) imprimiendo directamente (con el paréntesis de nuevo xD): n->{for(int i=0;i<n*n;)System.out.print(((i%n+i/n)%2<1?"X":" ")+(++i%n<1?"\n":""));}. Pruébalo en línea.
Kevin Cruijssen
Sugerir en "X ".charAt(i%n+i/n&1)lugar de((i%n+i/n)%2<1?"X":" ")
ceilingcat
2

APL (Dyalog Extended) , SBCS de 12 bytes

Función de prefijo tácito anónimo. Requiere ⎕IO←0(indexación basada en cero).

'X '⊇⍨2|⍳+⍀⍳

Pruébalo en línea!

d ndices 0 ... n – 1

+⍀ tabla plus con eso horizontal y verticalmente:

d ndices 0 ... n – 1

2| resto de división cuando se divide por dos

'X '⊇⍨ usa esa matriz para indexar en la cadena

Adán
fuente
2

Scala, 68 bytes

  def^(n:Int)=for(a<-1 to n)println(("x_"*n).substring(n%2+1,n+n%2+1))

o

  def^(n:Int)=for(a<-1 to n)println(("x_"*n).substring(a%2+1).take(n))

Pruébalo en línea!

Dr. Y Wit
fuente
2

Brainfuck, 140 bytes

-[+[+<]>>+]>++++[<++++++++>-]<<<<<<,[->+>+>+<<<]>>[->[->.<[->>.>]<<<]<[<<<]>>>>>[-<+>]>[-<+>]<<[->>+<<]<<[-<+>]<[->+>>+<<<]++++++++++.[-]>>]
Oyarsa
fuente
2

Javascript, 67 bytes

for(j=n=readline()|0;j--;)console.log(' X'.repeat(n).substr(j%2,n))

Pruébalo en línea

C, 83 bytes

i,j;main(n){for(scanf("%d",&n);i++<n;puts(""))for(j=0;j<n;)putchar(i+j++&1?88:32);}

Pruébalo en línea

C64 básico, 89 bytes

1 INPUTN:FORI=1TON;FORJ=1TON:IFI+JAND1THENPRINT" ";:GOTO3
2 PRINT"X";
3 NEXT:PRINT"":NEXT

ingrese la descripción de la imagen aquí

Johan du Toit
fuente
Puede usar el on...go tocomando condicionalmente, como ON-(I+JAND1)GOTO3:?"X";:donde es cero, pasará a la siguiente declaración, en este caso, si (I + J AND 1) === 0imprime la X. Esto le permite empacar más declaraciones por línea y guardar bytes.
Shaun Bebbers
1
C 81 bytes
ceilingcat
2

Scala, 40 y 54

El número de caracteres es 40 para una función, 54 para un programa completo.

La solución que solo da un cuerpo funcional es:

("X "*n)sliding n take n foreach println

Pruébalo en línea

 

La solución que da un programa completo es:

val n=readInt;("X "*n)sliding n take n foreach println

Puede ejecutarlo usando la siguiente línea de comando.

scala -e 'val n=readInt;("X "*n)sliding n take n foreach println' <<< 8

donde 8 es la entrada.

jseteny
fuente
1
Bienvenido a PP&CG y buena primera respuesta. Hay un buen sitio llamado Try It Online que le permite obtener recuentos de bytes fáciles y compartir ejecuciones. Verifique la otra respuesta de Scala para ver un ejemplo . No es obligatorio, solo es bueno tenerlo.
Veskah
Gracias @Veskah por la sugerencia.
jseteny
Buena solución cambiando esto a una función y usando el mapa obtienes 34 caracteres:("X "*n)sliding n take n map println
pme
@pme Gracias por la sugerencia, pero no hay salida si reemplazo foreach con el mapa. Sin embargo, lo cambio a una función como usted sugirió.
jseteny
tienes razón - lo siento parece que el mapa es vago; (.
pme
1

Python - 127 caracteres

from sys import*
r=stdout.write
s=int(raw_input())
[[r((x+y+1)%2 and"x"or" ")for x in range(s)]and r("\n")for y in range(s)]

fuente
1

C - 92 86

i,j;main(n){for(scanf("%d",&n);i<n;puts(""),i++)for(j=0;j<n;j++)putchar("X "[i+j&1]);}
Joey Adams
fuente
83 Bytes
Johan du Toit
1

Q, 33

{$[1=x mod 2;x;x-1]cut(x*x)#"X "}
tmartin
fuente
{(x;x-1-x mod 2)#"X "}por 22 ... ah no, tiene el mismo error que el tuyo - no tiene 4 X en las filas impares para la entrada 8.
streetter
1

Rubí 58

i=ARGV[0].to_i
1.upto(i*i){|n|print n%i==0?"\n":' x'[n%2]}
Phong Si
fuente
1

PHP - 136 caracteres (sin espacios en blanco)

Permite la entrada de funciones x e y.

También admite entradas impares ahora.

Si le da estilo a la salida para que tenga una altura de línea de 0.65 em y cambie este ▒█ y █ ° a □ ■ y ■ □, entonces se ve como un tablero de ajedrez real (cuadrado).

Código:

function gen_cb($x,$y)
{
$c=0;
$y*=2;
for($i=0;$i<$y;$i++){
for($j=0;$j<$x;$j++){
echo $c%2==0 ? "░█" : "█░";
}
echo "<br/>";
$c++;
}
}
gen_cb(7,7);

Salida:

░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
Evento_Horizonte
fuente
¿Funciona para tableros con un número impar de cuadrados por lado?
Gareth
@Gareth ahora sí
Event_Horizon
1

PHP, 87

for($x=0;$x<$m=$argv[1];$x++){echo"\n";for($y=0;$y<$m;$y++)echo($y^($x%2))%2?' ':'X';}
Dan Lugg
fuente
1

CJam, 18 bytes

Probablemente podría haber portado la respuesta de GolfScript, pero aquí hay un enfoque diferente. (Y CJam no es elegible para ganar de todos modos).

l~,_f{f{+2%S'X?}N}

Pruébalo aquí.

La idea es iterar sobre la cuadrícula 2D con índices x e y en la pila, utilizando el f{f{...}}truco . Dados x e y, simplemente podemos determinar blanco y negro como (x+y)%2y usar eso para elegir entre el carácter Xy una cadena que contiene un espacio.

Martin Ender
fuente
1

J, 21 caracteres

J también faltaba.

   ([:u:32+56*=/~@$&1 0) 5
X X X
 X X 
X X X
 X X 
X X X

Anterior, 22 caracteres:

Códigos de char del patrón mod2 de row #+ column #:

   ([:u:88-56*2&|@+/~@i.) 5
randomra
fuente
-2 Bytes:([:{&' X'=/~@$&1 0)
Bolce Bussiere
16 bytes ¡ $"1[:|.&'X '"+i. Pruébelo en línea!
Jonás
1

VB.net, 161

Module C
   Sub Main()
     Dim n As Integer
     If Integer.TryParse(Console.ReadLine,n) Then
     For x=1To n
        For y=1To n
          Console.Write("* "((x+y)Mod 2))
        Next
        Console.WriteLine()
      Next
     End If
    End Sub
End Module
Adam Speight
fuente
1

PHP, 75 bytes

for(;@$i++<$k=$argv[1];){for($j=0;$j++<$k;)echo($i+$j)%2?' ':'X';echo"\n";}
Boian Ivanov
fuente