Mẫu bàn cờ


18

Đầu vào: một số dương, nhỏ hơn 80, từ stdin hoặc làm đối số dòng lệnh.

Đầu ra: Một mẫu bàn cờ vuông, kích thước của số đầu vào. Các trường tối được biểu thị bằng chữ 'X', các trường màu trắng bằng một khoảng trắng. Trường trên cùng bên trái phải là 'X'.

Một chương trình hoàn chỉnh là bắt buộc.


Ví dụ:

Đầu vào : 1

Đầu ra :

X

Đầu vào : 8

Đầu ra :

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
Tôi đang tìm kiếm một thẻ như 'trọng lượng nhẹ' cho việc này.
steenslag

1
Toàn bộ và hoàn thành chương trình, tôi cho là?
JB

@JB: Vâng. Làm thế nào để tôi xây dựng điều đó? Thêm 'vào thiết bị xuất chuẩn' vào đầu ra cần thiết?
steenslag

1
Chỉ cần nói rằng bạn muốn một chương trình hoàn chỉnh. Bạn cũng có thể muốn chỉ định các đối số dòng lệnh , để tránh nhầm lẫn với các đối số chức năng.
JB

Khi bạn nói trên cùng bên phải, bạn có nghĩa là trên cùng bên trái? Nếu không, vui lòng sửa đầu ra ví dụ cho đầu vào 8.
Peter Taylor

Câu trả lời:


5

Bình, 13 ký tự

Lưu ý: Pyth còn quá mới để đủ điều kiện để giành chiến thắng. Tuy nhiên, đó là một sân golf thú vị và tôi nghĩ tôi muốn chia sẻ nó.

VQ<*QX*d2N\XQ

Hãy thử nó ở đây.

Làm thế nào nó hoạt động:

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

Về cơ bản, điều này sử dụng Xđể tạo "X "hoặc " X"luân phiên, sau đó lặp lại chuỗi Qthời gian đó và lấy các Qký tự đầu tiên của nó . Đây là lần lặp lại Q.

Làm thế nào để X(gán at) làm việc chức năng? Nó lấy chuỗi gốc, " "trong trường hợp này, một vị trí gán, Ntrong trường hợp này và một ký tự thay thế, "X"trong trường hợp này. Vì các bài tập của Pyth là mô-đun, điều này thay thế không gian tại vị trí N%2bằng một Xvà trả về chuỗi kết quả, do đó "X "nằm trên các dòng đầu tiên, thứ ba, v.v. và " X"trên các dòng khác.


... nhưng APL thì không. Cảm ơn vì đã va chạm. Tự hỏi nếu OP sẽ chấp nhận lại ...
Adám

"Pyth còn quá mới để đủ điều kiện để giành chiến thắng" Tôi không hiểu điều này và phản ứng lại điều này.
steenslag

1
@steenslag Để giải thích, có một lỗ hổng tiêu chuẩn mà các ngôn ngữ mới hơn câu hỏi không đủ điều kiện. Điều này là để ngăn chặn các ngôn ngữ được thiết kế đặc biệt để làm tốt ở một thách thức cụ thể. Dĩ nhiên, bạn được tự do làm những gì bạn muốn với thử thách của mình.
isaacg

11

Golfscript - 17 ký tự

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

Phân tích

~chuyển đổi đầu vào thành một
:Ncửa hàng int trong biến N
,{...}cho mỗi giá trị của [0 ... N-1]
"X "N*lặp lại "X" để đưa ra một chuỗi các ký tự N * 2
>lấy chuỗi con bắt đầu từ chỉ mục vòng lặp ...
N<... kết thúc N ký tự sau đó
nđặt một dòng mới vào cuối mỗi chuỗi


5

Perl, 41 40

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

Perl 5.10 trở lên, chạy với perl -nE 'code'( ntính theo kích thước mã)

Đầu ra mẫu:

$ 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

'X' trong 'x 40' làm gì?
steenslag

2
@steenslag: xlà toán tử lặp chuỗi. 'a' x 3năng suất 'aaa'.
JB


3

Con trăn, 76 ký tự

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 ký tự

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

Cách sử dụng: scala filename Ntrong đó n là đầu vào của bạn cho chương trình.


3

APL (16)

Giả sử ⎕IO=0(tức là mảng không có chỉ mục, đó là một cài đặt)

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

Giải trình:

  • ⍳2⍴⎕: đọc một số N và tạo ma trận N × N chứa (0,0) đến (N-1, N-1).
  • 2⊤¨: lấy bit có ý nghĩa nhỏ nhất của mỗi số trong ma trận. (Vì vậy, bây giờ chúng ta có (0,0), (0,1), (0,0) ... (1,0), (1,1), (1,0) ...)
  • =/¨: cho mỗi cặp, xem hai số có bằng nhau không. (Bây giờ chúng tôi có 1 0 1 0 1 0 ...)
  • ' X'[... ]: đặt một khoảng trắng cho mỗi 0 và X cho mỗi 1.

3

Ruby 45 42

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

Bản trình diễn: http://ideone.com/Mw25e


(x=gets.to_i).timestiết kiệm ba ký tự. Tại sao sự quan tâm đột ngột đổi mới trong oldie này?
steenslag

@steenslag Cảm ơn! Tôi đã áp dụng mẹo của bạn. Tôi chỉ thấy câu hỏi này ở đầu danh sách và nghĩ rằng tôi sẽ đăng câu trả lời để loại bỏ các kỹ năng Ruby của mình. Rõ ràng là tôi đã không làm họ chán nản. :)
Cristian Lupascu

2

Con trăn

48 ký tự

EDIT: Kinda Sai ... Có thêm một khoảng trống ở cuối ... nhưng điều đó không thể nhìn thấy. Nếu bạn thay đổi không gian thành "O" (hoặc bất kỳ char không gian trắng nào) thì hãy sửa đổi [i%2:n]thành [i%2:n+i%2]. cho phiên bản chính xác.

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

2

C ++ - 253 ký tự bị xáo trộn

#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
Tôi yêu tất cả các con số kỳ diệu.
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));

Tôi khá chắc chắn rằng bạn có thể chuyển đổi sang số như +'1'thay vì parseInt('1'). Sẽ không cung cấp cho bạn một số nguyên, nhưng tôi không nghĩ rằng nó có một số nguyên là quan trọng ở đây, phải không?
Một số chàng trai

2

k (26 ký tự)

26 Đối với chức năng trần:

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

Hoặc thêm 7 để lấy đầu vào từ stdin

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

2

Bash: 60 ký tự

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

Kích thước bảng được truyền dưới dạng tham số dòng lệnh, ví dụ bash chesstable.sh 8.


2

Java 10, hàm 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":""));}

Hãy thử trực tuyến tại đây .

Nhờ ceilingcat cho chơi golf 4 byte và Kevin Cruijssen cho chơi golf 3 hơn.

Phiên bản bị đánh cắp:

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, chương trình đầy đủ, 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":""));}}

Hãy thử trực tuyến tại đây .

Phiên bản bị đánh cắp:

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 Cảm ơn! Tôi đã xoay sở để tắt thêm một byte và cũng áp dụng cách tiếp cận của bạn vào chương trình đầy đủ của tôi. 16 byte được lưu ở đó.
OOBalance

Làm hai s+=ngắn hơn 2 byte so với dấu ngoặc đơn đó: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

Hoặc giảm thêm 1 byte (tổng cộng 84) bằng cách in trực tiếp (với dấu ngoặc đơn lại xD) : n->{for(int i=0;i<n*n;)System.out.print(((i%n+i/n)%2<1?"X":" ")+(++i%n<1?"\n":""));}. Hãy thử trực tuyến.
Kevin Cruijssen

Đề xuất "X ".charAt(i%n+i/n&1)thay vì((i%n+i/n)%2<1?"X":" ")
trần mèo


2

APL (Dyalog mở rộng) , 12 byte SBCS

Chức năng tiền tố ẩn danh. Yêu cầu ⎕IO←0(lập chỉ mục dựa trên không).

'X '⊇⍨2|⍳+⍀⍳

Hãy thử trực tuyến!

ɩ 0 0 nấc 1

+⍀ bảng cộng với đó theo chiều ngang và chiều dọc:

ɩ 0 0 nấc 1

2| phần còn lại khi chia cho hai

'X '⊇⍨ sử dụng ma trận đó để lập chỉ mục vào chuỗi



2

Brainfuck, 140 byte

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

2

Javascript, 67 byte

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

Dùng thử trực tuyến

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

Dùng thử trực tuyến

C64 cơ bản, 89 byte

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

nhập mô tả hình ảnh ở đây


Bạn có thể sử dụng on...go tolệnh một cách có điều kiện, như ON-(I+JAND1)GOTO3:?"X";:khi nó bằng 0, nó sẽ rơi vào câu lệnh sau, trong trường hợp này, nếu (I + J AND 1) === 0sau đó nó sẽ in X. Điều này cho phép bạn đóng gói nhiều câu lệnh trên mỗi dòng và lưu byte.
Shaun Bebbers


2

Scala, 40 và 54

Số lượng ký tự là 40 cho một chức năng, 54 cho một chương trình hoàn chỉnh.

Giải pháp chỉ cung cấp cho cơ thể chức năng là:

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

Dùng thử trực tuyến

 

Giải pháp cho một chương trình hoàn chỉnh là:

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

Bạn có thể chạy nó bằng dòng lệnh sau.

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

trong đó 8 là đầu vào.


1
Chào mừng bạn đến với PP & CG và câu trả lời đầu tiên tốt đẹp. Có một trang web đẹp tên là Try It Online cho phép bạn có được số byte dễ dàng và chia sẻ các lần chạy. Kiểm tra câu trả lời Scala khác để xem ví dụ về nó . Nó không bắt buộc bạn, chỉ cần có tốt đẹp.
Veskah

Cảm ơn @Veskah vì gợi ý.
jseteny

Giải pháp tuyệt vời thay đổi chức năng này thành chức năng và sử dụng bản đồ, bạn nhận được 34 Nhân vật:("X "*n)sliding n take n map println
pme

@pme Cảm ơn bạn đã gợi ý, nhưng không có đầu ra nếu tôi thay thế foreach bằng bản đồ. Tuy nhiên tôi thay đổi nó thành một chức năng như bạn đề xuất.
jseteny

bạn nói đúng - xin lỗi có vẻ như bản đồ là lười biếng; (.
pme

1

Python - 127 ký tự

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 "}trong 22 ... à không, có cùng một lỗi với bạn - không có 4 X trên các hàng lẻ cho đầu vào 8.
streetster

1

Hồng ngọc 58

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

1

PHP - 136 ký tự (không có khoảng trắng)

Cho phép nhập hàm x và y.

Cũng hỗ trợ đầu vào lẻ ​​bây giờ.

Nếu bạn định kiểu đầu ra để có 0,65 em chiều cao và thay đổi ▒█ và █░ thành □ ■ và ■ □ thì nó sẽ trông giống như một bàn cờ (vuông) thực sự.

Mã số:

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

Đầu ra:

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

Nó có hoạt động cho các bảng với số lượng hình vuông lẻ mỗi bên không?
Gareth

@Gareth Bây giờ thì có
Event_Horiz

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 byte

Tôi có thể vừa chuyển câu trả lời GolfScript, nhưng đây là một cách tiếp cận khác. (Và dù sao thì CJam cũng không đủ điều kiện để chiến thắng.)

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

Kiểm tra nó ở đây.

Ý tưởng là để lặp qua lưới với x và các chỉ số y trên stack 2D, sử dụng các f{f{...}}thủ thuật . Cho x và y, chúng ta có thể chỉ cần xác định màu đen và trắng (x+y)%2và sử dụng nó để chọn giữa ký tự Xvà chuỗi chứa khoảng trắng .



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 byte

for(;@$i++<$k=$argv[1];){for($j=0;$j++<$k;)echo($i+$j)%2?' ':'X';echo"\n";}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.