Pola papan catur

18

Input: angka positif, lebih kecil dari 80, dari stdin atau sebagai argumen baris perintah.

Output: Pola papan catur persegi, ukuran nomor input. Bidang gelap diwakili oleh huruf 'X', bidang putih dengan spasi. Bidang kiri atas harus 'X'.

Diperlukan program yang lengkap.


Contoh:

Input : 1

Keluaran :

X

Input : 8

Keluaran :

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
sumber
1
Saya mencari label seperti 'ringan' untuk ini.
steenslag
1
Program utuh dan lengkap, saya kira?
JB
@ JK: Ya. Bagaimana cara saya merumuskannya? Tambahkan 'ke stdout' ke output yang diperlukan?
steenslag
1
Katakan saja Anda ingin program lengkap. Anda mungkin juga ingin menentukan argumen baris perintah, untuk mencegah kebingungan dengan argumen fungsi.
JB
Ketika Anda mengatakan kanan atas, apakah maksud Anda atas-kiri? Jika tidak, perbaiki contoh output untuk input 8.
Peter Taylor

Jawaban:

5

Pyth, 13 karakter

Catatan: Pyth terlalu baru untuk dapat menang. Namun, itu adalah golf yang menyenangkan dan saya pikir saya akan membagikannya.

VQ<*QX*d2N\XQ

Coba di sini.

Bagaimana itu bekerja:

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

Pada dasarnya, ini digunakan Xuntuk menghasilkan "X "atau secara " X"bergantian, kemudian mengulangi string itu Qkali, dan mengambil Qkarakter pertamanya . Ini berulang Qkali.

Bagaimana cara fungsi X(assign at) bekerja? Dibutuhkan string asli, " "dalam hal ini, lokasi tugas, Ndalam hal ini, dan karakter pengganti, "X"dalam kasus ini. Karena penugasan Pyth adalah modular, ini menggantikan ruang di lokasi N%2dengan X, dan mengembalikan string yang dihasilkan, yang karenanya "X "pada baris pertama, ketiga, dll., Dan " X"yang lain.

isaacg
sumber
... tapi APL tidak. Terima kasih sudah menabrak. Bertanya-tanya apakah OP akan menerima kembali ...
Adám
"Pyth jauh terlalu baru untuk bisa menang" Saya tidak mengerti ini dan menerima kembali yang ini.
steenslag
1
@steenslag Untuk menjelaskan, ada celah standar bahwa bahasa yang lebih baru dari pertanyaan tidak memenuhi syarat. Ini untuk mencegah bahasa yang secara khusus dirancang untuk bekerja dengan baik pada tantangan tertentu. Anda bebas untuk melakukan apa yang Anda inginkan dengan tantangan Anda, tentu saja.
isaacg
11

Golfscript - 17 karakter

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

Analisis

~konversi input ke
:Npenyimpanan int dalam variabel N
,{...}untuk setiap nilai [0 ... N-1]
"X "N*ulangi "X" untuk memberikan string karakter N * 2,
>ambil substring mulai dari indeks loop ...
N<... Mengakhiri N karakter kemudian
nmenempatkan baris baru di akhir setiap string

gnibbler
sumber
5

Perl, 41 40

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

Perl 5.10 atau lebih baru, jalankan dengan perl -nE 'code'( ndihitung dalam ukuran kode)

Output sampel:

$ 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
sumber
Apa yang dilakukan 'x' dalam 'x 40'?
steenslag
2
@steenslag: xadalah operator pengulangan string. 'a' x 3hasil panen 'aaa'.
JB
4

Python, 48 Karakter

x,i=input(),0
exec'print(x*"X ")[i:i+x];i^=1;'*x
Royalti yang Dicuri
sumber
3

Python, 76 karakter

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

Scala - 141 95 karakter

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

Penggunaan: di scala filename Nmana n adalah input Anda ke program.

Gareth
sumber
3

APL (16)

Dengan asumsi ⎕IO=0(yaitu array yang diindeks nol, ini adalah pengaturan)

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

Penjelasan:

  • ⍳2⍴⎕: baca angka N, dan buat matriks N × N yang mengandung (0,0) hingga (N-1, N-1).
  • 2⊤¨: dapatkan bit paling signifikan dari setiap angka dalam matriks. (Jadi sekarang kita memiliki (0,0), (0,1), (0,0) ... (1,0), (1,1), (1,0) ...)
  • =/¨: untuk setiap pasangan, lihat apakah kedua angka itu sama. (Sekarang kami memiliki 1 0 1 0 1 0 ...)
  • ' X'[... ]: beri spasi untuk setiap 0 dan X untuk masing-masing 1.
marinus
sumber
3

Ruby 45 42

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

Demo: http://ideone.com/Mw25e

Cristian Lupascu
sumber
(x=gets.to_i).timesmenghemat tiga karakter. Mengapa tiba-tiba minat baru pada oldie ini?
steenslag
@steenslag Terima kasih! Saya sudah menerapkan tip Anda. Saya baru saja melihat pertanyaan ini di bagian atas daftar dan berpikir saya akan memposting jawaban untuk menghilangkan keterampilan Ruby saya. Tampaknya saya belum cukup membersihkannya. :)
Cristian Lupascu
2

Python

48 Chars

EDIT: Agak Salah ... Pada akhirnya ada ruang ekstra ... tapi itu tidak terlihat. Jika Anda mengubah ruang menjadi "O" (atau karakter non-spasi putih), kemudian ubah [i%2:n]menjadi [i%2:n+i%2]. untuk versi yang benar.

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

C ++ - 253 karakter dikaburkan

#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);
}
Mendesis
sumber
1
Saya suka semua angka ajaib.
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
sumber
Saya cukup yakin Anda dapat mengonversi ke nomor seperti +'1'bukan parseInt('1'). Tidak akan memberi Anda bilangan bulat, tapi saya pikir itu bukan bilangan bulat itu penting di sini, bukan?
Some Guy
2

k (26 karakter)

26 Untuk fungsi telanjang:

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

Atau 7 lagi untuk mengambil input dari stdin

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

Bash: 60 karakter

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

Ukuran tabel dilewatkan sebagai parameter baris perintah, misalnya bash chesstable.sh 8 .

manatwork
sumber
2

Java 10, fungsi lambda, 92 87 84 byte

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

Cobalah online sini .

Terima kasih untuk ceilingcat untuk bermain golf 4 byte dan untuk Kevin Cruijssen untuk bermain golf 3 lagi.

Versi tidak disatukan:

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, program lengkap, 155 139 byte

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

Cobalah online sini .

Versi tidak disatukan:

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
        }
    }
}
Ketidakseimbangan
sumber
@ceilingcat Terima kasih! Saya berhasil memangkas satu byte lagi, dan menerapkan pendekatan Anda pada program lengkap saya juga. 16 byte disimpan di sana.
OOBalance
Melakukan dua s+=adalah 2 byte lebih pendek dari tanda kurung: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
Atau 1 byte lebih off (84 total) dengan mencetak langsung (dengan kurung kembali lagi xD): n->{for(int i=0;i<n*n;)System.out.print(((i%n+i/n)%2<1?"X":" ")+(++i%n<1?"\n":""));}. Cobalah online.
Kevin Cruijssen
Sarankan "X ".charAt(i%n+i/n&1)alih-alih((i%n+i/n)%2<1?"X":" ")
ceilingcat
2

APL (Dyalog Extended) , 12 byte SBCS

Fungsi awalan diam-diam anonim. Membutuhkan ⎕IO←0(pengindeksan berbasis nol).

'X '⊇⍨2|⍳+⍀⍳

Cobalah online!

ɩ ndices 0… n – 1

+⍀ plus tabel dengan itu secara horizontal dan vertikal:

ɩ ndices 0… n – 1

2| pembagian divisi ketika dibagi dua

'X '⊇⍨ gunakan matriks itu untuk mengindeks ke dalam string

Adm
sumber
2

Scala, 68 byte

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

atau

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

Cobalah online!

Dr Y Wit
sumber
2

Brainfuck, 140 byte

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

Javascript, 67 byte

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

Cobalah online

C, 83 byte

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

Cobalah online

C64 Dasar, 89 byte

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

masukkan deskripsi gambar di sini

Johan du Toit
sumber
Anda dapat menggunakan on...go toperintah secara kondisional, seperti di ON-(I+JAND1)GOTO3:?"X";:mana nol, itu akan jatuh ke pernyataan berikut, dalam hal ini, jika (I + J AND 1) === 0kemudian akan mencetak X. Ini memungkinkan Anda untuk mengemas lebih banyak pernyataan per baris dan menyimpan byte.
Shaun Bebbers
1
C 81 byte
ceilingcat
2

Scala, 40 dan 54

Jumlah karakter adalah 40 untuk suatu fungsi, 54 untuk program yang lengkap.

Solusi yang hanya memberikan fungsi tubuh adalah:

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

Cobalah online

 

Solusi yang memberikan program lengkap adalah:

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

Anda dapat menjalankannya menggunakan baris perintah berikut.

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

dimana 8 adalah input.

jseteny
sumber
1
Selamat datang di PP&CG dan jawaban pertama yang baik. Ada situs yang bagus bernama Try It Online yang memungkinkan Anda untuk mendapatkan jumlah byte yang mudah dan berbagi proses Periksa jawaban Scala lainnya untuk melihat contohnya . Ini tidak dituntut pikiran Anda, hanya baik untuk memiliki.
Veskah
Terima kasih @ Veskah atas sarannya.
jseteny
Solusi yang bagus untuk mengubah ini menjadi fungsi dan menggunakan peta Anda mendapatkan 34 Karakter: ("X "*n)sliding n take n map println
pme
@ pme Terima kasih atas sarannya, tetapi tidak ada output jika saya mengganti foreach dengan peta. Namun saya mengubahnya ke fungsi seperti yang Anda sarankan.
jseteny
Anda benar - maaf sepertinya peta malas; (.
pme
1

Python - 127 karakter

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

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

Q, 33

{$[1=x mod 2;x;x-1]cut(x*x)#"X "}
tmartin
sumber
{(x;x-1-x mod 2)#"X "}untuk 22 ... ah tidak, memiliki bug yang sama seperti milik Anda - tidak memiliki 4 X pada baris aneh untuk input 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
sumber
1

PHP - 136 karakter (tanpa spasi)

Mengizinkan input fungsi x dan y.

Juga mendukung input ganjil sekarang.

Jika Anda mendesain output memiliki ketinggian garis 0,65 em dan ubah ▒█ dan █░ menjadi □ ■ dan ■ □ maka hasilnya akan terlihat seperti papan catur nyata (persegi).

Kode:

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

Keluaran:

░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
Event_Horizon
sumber
Apakah itu berfungsi untuk papan dengan jumlah kotak ganjil per sisi?
Gareth
@Gareth Now it
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
sumber
1

CJam, 18 byte

Saya mungkin bisa saja porting jawaban GolfScript, tetapi di sini ada pendekatan yang berbeda. (Dan CJam tidak memenuhi syarat untuk menang.)

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

Uji di sini.

Idenya adalah untuk iterate atas grid 2D dengan x dan y indeks pada stack, menggunakan para f{f{...}}trik . Diberikan x dan y, kita cukup menentukan hitam dan putih sebagai (x+y)%2dan menggunakannya untuk memilih antara karakter Xdan string yang berisi spasi.

Martin Ender
sumber
1

J, 21 karakter

J juga hilang.

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

Sebelumnya, 22 karakter:

Kode char dari pola mod2 row #+ column #:

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

PHP, 75 byte

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