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

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.


... 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


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

¿Qué hace la 'x' en 'x 40'?
steenslag

2
@steenslag: xes el operador de repetición de cadenas. 'a' x 3rendimientos 'aaa'.
JB


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]

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.


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.

3

Rubí 45 42

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

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


(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

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);
}

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));

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

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.


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
        }
    }
}

@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


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!


2

Brainfuck, 140 bytes

-[+[+<]>>+]>++++[<++++++++>-]<<<<<<,[->+>+>+<<<]>>[->[->.<[->>.>]<<<]<[<<<]>>>>>[-<+>]>[-<+>]<<[->>+<<]<<[-<+>]<[->+>>+<<<]++++++++++.[-]>>]

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í


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


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.


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)]


1

Q, 33

{$[1=x mod 2;x;x-1]cut(x*x)#"X "}

{(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]}

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:

░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█

¿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';}

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.


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

-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

1

PHP, 75 bytes

for(;@$i++<$k=$argv[1];){for($j=0;$j++<$k;)echo($i+$j)%2?' ':'X';echo"\n";}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.