Padrão de tabuleiro de xadrez

18

Entrada: um número positivo, menor que 80, de stdin ou como um argumento da linha de comando.

Saída: um padrão de tabuleiro de xadrez quadrado, o tamanho do número de entrada. Os campos escuros são representados pela letra 'X', os campos brancos por um espaço. O campo superior esquerdo deve ser 'X'.

É necessário um programa completo.


Exemplos:

Entrada : 1

Saída :

X

Entrada : 8

Saída :

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
fonte
1
Eu estava procurando por uma tag como 'leve' para isso.
214116 phpBaixar
1
Programa completo e completo, suponho?
JB
@JB: Sim. Como faço para formular isso? Adicione 'to stdout' à saída necessária?
21711
1
Basta dizer que você quer um programa completo. Você também pode especificar argumentos de linha de comando, para evitar confusão com argumentos de função.
JB
Quando você diz superior direito, você quer dizer superior esquerdo? Se não, por favor corrigir o exemplo de saída para a entrada 8.
Peter Taylor

Respostas:

5

Pitão, 13 caracteres

Nota: Pyth é muito novo para ser elegível para ganhar. No entanto, era um golfe divertido e pensei em compartilhá-lo.

VQ<*QX*d2N\XQ

Experimente aqui.

Como funciona:

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

Basicamente, isso é usado Xpara gerar "X "ou " X"alternadamente, depois repete esse Qtempo de sequência e pega seus primeiros Qcaracteres. Isso é repetido Qvezes.

Como funciona a função X(assign at)? Leva a sequência original, " "nesse caso, um local de atribuição, Nnesse caso, e um caractere de substituição, "X"neste caso. Como as atribuições de Pyth são modulares, isso substitui o espaço no local N%2por um Xe retorna a sequência resultante, que está, portanto, "X "na primeira, terceira, etc. linhas e " X"nas outras.

isaacg
fonte
... mas o APL não é. Obrigado por esbarrar.
Gostaria de saber
"Pyth é novo demais para ser elegível para vencer" Eu não entendo isso e aceito este.
18720
1
@steenslag Para explicar, existe uma brecha padrão em que os idiomas mais recentes que a questão não são elegíveis. Isso é para evitar idiomas projetados especificamente para se sair bem em um desafio específico. Você é livre para fazer o que quiser com o seu desafio, é claro.
Isaacg
11

Golfscript - 17 caracteres

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

Análise

~converter entrada para um
:Narmazenamento int na variável N
,{...}para cada valor de [0 ... N-1]
"X "N*repita "X" para fornecer uma sequência de caracteres N * 2,
>pegue a substring a partir do índice do loop ...
N<... N caracteres finais depois
ncolocam uma nova linha no final de cada string

mordedor
fonte
5

Perl, 41 40

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

Perl 5.10 ou posterior, executado com perl -nE 'code'( ncontado no tamanho do código)

Saída de amostra:

$ 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
fonte
O que o 'x' em 'x 40' faz?
21311 rss:
2
@steenslag: xé o operador de repetição de string. 'a' x 3rendimentos 'aaa'.
JB
4

Python, 48 caracteres

x,i=input(),0
exec'print(x*"X ")[i:i+x];i^=1;'*x
Realeza Nolen
fonte
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
fonte
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 Nonde n é sua entrada no programa.

Gareth
fonte
3

APL (16)

Supondo ⎕IO=0(ou seja, matrizes indexadas a zero, é uma configuração)

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

Explicação:

  • ⍳2⍴⎕: leia um número N e crie uma matriz N × N contendo (0,0) a (N-1, N-1).
  • 2⊤¨: obtém o bit menos significativo de cada número na matriz. (Agora, temos (0,0), (0,1), (0,0) ... (1,0), (1,1), (1,0) ...)
  • =/¨: para cada par, veja se os dois números são iguais. (Agora temos 1 0 1 0 1 0 ...)
  • ' X'[... ]: coloque um espaço para cada 0 e um X para cada 1.
marinus
fonte
3

Ruby 45 42

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

Demonstração: http://ideone.com/Mw25e

Cristian Lupascu
fonte
(x=gets.to_i).timessalva três caracteres. Por que o interesse repentino e renovado por esse velho?
steenslag
@steenslag Thanks! Eu apliquei sua dica. Acabei de ver essa pergunta no topo da lista e pensei em postar uma resposta para acabar com minhas habilidades em Ruby. Aparentemente, eu não os espanei o suficiente. :)
Cristian Lupascu
2

Pitão

48 Chars

EDIT: Kinda errado ... Há um espaço extra no final ... mas isso não é visível. Se você alterar o espaço para "O" (ou qualquer caractere que não seja de espaço em branco), modifique [i%2:n]para [i%2:n+i%2]. para a versão correta.

n=input()
i=0;
while i<n:print('X '*n)[i%2:n];i+=1
st0le
fonte
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
fonte
1
Eu amo todos os 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
fonte
Tenho certeza que você pode converter para número como em +'1'vez de parseInt('1'). Não lhe dará um número inteiro, mas não acho importante tê-lo como um número inteiro aqui, é?
Some Guy
2

k (26 caracteres)

26 Para a função nua:

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

Ou mais 7 para receber sugestões de stdin

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

Bash: 60 caracteres

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

O tamanho da tabela é passado como parâmetro de linha de comando, por exemplo bash chesstable.sh 8.

homem a trabalhar
fonte
2

Java 10, função 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":""));}

Experimente online aqui .

Agradecimentos ao ceilingcat por jogar 4 bytes e a Kevin Cruijssen por jogar mais 3.

Versão não destruída:

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

Experimente online aqui .

Versão não destruída:

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
fonte
@ceilingcat Thanks! Consegui reduzir mais um byte e apliquei sua abordagem ao meu programa completo também. 16 bytes salvos lá.
OOBalance
Fazendo duas s+=é de 2 bytes mais curto do que os 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
Ou, mais uma fora de bytes (84 no total), imprimindo directamente (com o parêntesis volta novamente xD): n->{for(int i=0;i<n*n;)System.out.print(((i%n+i/n)%2<1?"X":" ")+(++i%n<1?"\n":""));}. Experimente online.
Kevin Cruijssen
Sugerir em "X ".charAt(i%n+i/n&1)vez de((i%n+i/n)%2<1?"X":" ")
ceilingcat 12/04
2

Japonês, 8 7 bytes

ÆîSi'XY

Execute on-line

7 6 bytes se pudermos substituirXporx:

ÆîSixY

Execute on-line


Solução alternativa de 8 bytes :

Æî"X "éY

Execute on-line

Oliver
fonte
Ah, você editou enquanto eu estava no bate-papo! Ia sugerir a mesma coisa.
Shaggy
2

APL (Dyalog Extended) , SBCS de 12 bytes

Função de prefixo tácito anônimo. Requer ⎕IO←0(indexação baseada em zero).

'X '⊇⍨2|⍳+⍀⍳

Experimente online!

ɩ ndices 0 ... n-1

+⍀ além de tabela com isso horizontal e verticalmente:

ɩ ndices 0 ... n-1

2| restante divisão quando dividido por dois

'X '⊇⍨ use essa matriz para indexar na string

Adão
fonte
2

Scala, 68 bytes

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

ou

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

Experimente online!

Dr. Y Wit
fonte
2

Brainfuck, 140 bytes

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

Javascript, 67 bytes

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

Experimente online

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

Experimente online

C64 básico, 89 bytes

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

enter image description here

Johan du Toit
fonte
Você pode usar o on...go tocomando condicionalmente, como ON-(I+JAND1)GOTO3:?"X";:onde é zero, ele passará para a instrução a seguir, nesse caso, se (I + J AND 1) === 0for imprimir o X. Isso permite que você inclua mais instruções por linha e salve bytes.
Shaun Bebbers
1
C 81 bytes
ceilingcat 14/09
2

Scala, 40 e 54

O número de caracteres é 40 para uma função, 54 para um programa completo.

A solução que fornece apenas um corpo de função é:

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

Experimente online

 

A solução que oferece um programa completo é:

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

Você pode executá-lo usando a seguinte linha de comando.

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

onde 8 é a entrada.

jseteny
fonte
1
Bem-vindo ao PP&CG e boa primeira resposta. Existe um site legal chamado Try It Online que permite obter contagens de bytes fáceis e compartilhar execuções. Verifique a outra resposta Scala para ver um exemplo disso . Não é necessário ter em mente, é bom ter.
Veskah
Obrigado @Veskah pela sugestão.
jseteny 17/05
Solução agradável, alterando isso para uma função e usando o mapa, você obtém 34 caracteres:("X "*n)sliding n take n map println
pme
@ pme Obrigado pela sugestão, mas não há saída se eu substituir o foreach pelo mapa. No entanto, eu mudo para uma função, como você sugeriu.
jseteny
você está certo - desculpe parece mapa é preguiçoso; (.
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)]

fonte
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
fonte
83 Bytes
Johan du Toit
1

Q, 33

{$[1=x mod 2;x;x-1]cut(x*x)#"X "}
tmartin
fonte
{(x;x-1-x mod 2)#"X "}para 22 ... ah não, tem o mesmo bug que o seu - não tem 4 X's nas linhas ímpares para a entrada 8.
streetster
1

Ruby 58

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

PHP - 136 caracteres (sem espaço em branco)

Permite a entrada da função x e y.

Também suporta entradas ímpares agora.

Se você estilizar a saída com 0,65 em altura de linha e alterar ▒█ e █░ para □ ■ e ■ □, ela será parecida com um tabuleiro de xadrez real (quadrado).

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

Resultado:

░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
Horizonte de eventos
fonte
Funciona para placas com um número ímpar de quadrados por lado?
Gareth
@Gareth Agora ele faz
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
fonte
1

CJam, 18 bytes

Eu provavelmente poderia ter portado a resposta GolfScript, mas aqui está uma abordagem diferente. (E CJam não é elegível para ganhar de qualquer maneira.)

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

Teste aqui.

A idéia é iterar sobre a grade 2D com índices x e y na pilha, usando o f{f{...}}truque . Dado xey, podemos simplesmente determinar preto e branco (x+y)%2e usá-lo para escolher entre o caractere Xe uma string que contém um espaço.

Martin Ender
fonte
1

J, 21 caracteres

J também estava desaparecido.

   ([: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 caracteres do padrão mod2 de row # + column #:

   ([:u:88-56*2&|@+/~@i.) 5
randomra
fonte
-2 Bytes:([:{&' X'=/~@$&1 0)
Bolce Bussiere
16 bytes $"1[:|.&'X '"+i. Experimente online!
Jonah
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
fonte
1

PHP, 75 bytes

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