รูปแบบกระดานหมากรุก


18

อินพุต: จำนวนบวกน้อยกว่า 80 จาก stdin หรือเป็นอาร์กิวเมนต์บรรทัดคำสั่ง

เอาท์พุท:รูปแบบกระดานหมากรุกสี่เหลี่ยมขนาดของหมายเลขอินพุต เขตข้อมูลที่มืดจะแสดงด้วยตัวอักษร 'X' เขตข้อมูลสีขาวด้วยช่องว่าง ฟิลด์ด้านซ้ายบนควรเป็น 'X'

ต้องใช้โปรแกรมที่สมบูรณ์


ตัวอย่าง:

อินพุต : 1

ผลผลิต :

X

อินพุต : 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

1
ฉันกำลังมองหาแท็กเช่น 'น้ำหนักเบา' สำหรับสิ่งนี้
steenslag

1
ฉันคิดว่าโปรแกรมทั้งหมดและสมบูรณ์แบบ
JB

@JB: ใช่ ฉันจะกำหนดได้อย่างไร เพิ่ม 'to stdout' ไปยังเอาต์พุตที่ต้องการหรือไม่
steenslag

1
แค่บอกว่าคุณต้องการโปรแกรมที่สมบูรณ์ คุณอาจต้องการระบุอาร์กิวเมนต์บรรทัดคำสั่งเพื่อป้องกันความสับสนกับอาร์กิวเมนต์ของฟังก์ชัน
JB

เมื่อคุณพูดว่ามุมขวาบนคุณหมายถึงมุมบนซ้ายใช่ไหม ถ้าไม่ได้โปรดแก้ไขตัวอย่างผลลัพธ์สำหรับอินพุต 8
Peter Taylor

คำตอบ:


5

Pyth, 13 ตัวอักษร

หมายเหตุ: Pyth นั้นใหม่เกินไปที่จะมีสิทธิ์ชนะ อย่างไรก็ตามมันเป็นสนามกอล์ฟที่สนุกและฉันคิดว่าฉันจะแบ่งปันมัน

VQ<*QX*d2N\XQ

ลองที่นี่

มันทำงานอย่างไร:

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

โดยทั่วไปสิ่งนี้ใช้Xในการสร้าง"X "หรือ" X"สลับจากนั้นทำซ้ำสตริงQนั้นและใช้Qอักขระตัวแรก นี่เป็นQครั้งซ้ำแล้วซ้ำอีก

อย่างไรX(กำหนดที่) ฟังก์ชั่นการทำงาน? มันจะใช้สตริงเดิม" "ในกรณีนี้สถานที่ที่ได้รับมอบหมายNในกรณีนี้และตัวละครทดแทน"X"ในกรณีนี้ เนื่องจากการมอบหมายของ Pyth เป็นแบบแยกส่วนนี่จะแทนที่ช่องว่างที่ตำแหน่งN%2ด้วยXและส่งกลับสตริงผลลัพธ์ซึ่งจึง"X "อยู่ในบรรทัดแรกบรรทัดที่สาม ฯลฯ และ" X"ที่อื่น ๆ


... แต่ APL ไม่ใช่ ขอบคุณสำหรับการกระแทก สงสัยว่า OP จะยอมรับอีกครั้งหรือไม่
2559

"Pyth นั้นใหม่เกินไปที่จะมีสิทธิ์ชนะ" ฉันไม่เข้าใจและยอมรับสิ่งนี้
steenslag

1
@steenslag เพื่ออธิบายมีช่องโหว่มาตรฐานที่ภาษาใหม่กว่าคำถามนั้นไม่มีสิทธิ์ นี่คือเพื่อป้องกันภาษาที่ออกแบบมาโดยเฉพาะเพื่อทำดีกับความท้าทายเฉพาะ คุณมีอิสระที่จะทำในสิ่งที่คุณต้องการด้วยความท้าทาย
isaacg

11

Golfscript - 17 ตัวอักษร

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

การวิเคราะห์

~แปลงอินพุตเป็น int
:Nstore ในตัวแปร N
,{...}สำหรับแต่ละค่าของ [0 ... N-1]
"X "N*ทำซ้ำ "X" เพื่อให้สตริงของอักขระ N * 2
>ใช้สตริงย่อยที่เริ่มต้นจากดัชนีลูป ...
N<... ลงท้ายด้วยอักขระ N ต่อมา
nให้ขึ้นบรรทัดใหม่เป็นจุดสิ้นสุดของแต่ละสตริง


5

Perl, 41 40

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

Perl 5.10 หรือใหม่กว่าเรียกใช้ด้วยperl -nE 'code'( nนับเป็นขนาดรหัส)

ตัวอย่างผลลัพธ์:

$ 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' ใน 'x 40' ทำอะไร
steenslag

2
@steenslag: xเป็นโอเปอเรเตอร์การทำซ้ำสตริง อัตราผลตอบแทน'a' x 3 'aaa'
JB



3

Scala - 141 95 ตัวอักษร

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

การใช้งาน: scala filename Nโดยที่ n คืออินพุตของคุณไปยังโปรแกรม


3

APL (16)

สมมติว่า⎕IO=0(เช่นอาร์เรย์ที่มีดัชนีเป็นศูนย์จะเป็นการตั้งค่า)

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

คำอธิบาย:

  • ⍳2⍴⎕: อ่านตัวเลข N และสร้างเมทริกซ์ N × N ที่มี (0,0) ถึง (N-1, N-1)
  • 2⊤¨: รับบิตที่มีนัยสำคัญน้อยที่สุดของแต่ละตัวเลขในเมทริกซ์ (ดังนั้นตอนนี้เรามี (0,0), (0,1), (0,0) ... (1,0), (1,1), (1,0) ... )
  • =/¨: สำหรับแต่ละคู่ดูว่าตัวเลขทั้งสองเท่ากันหรือไม่ (ตอนนี้เรามี 1 0 1 0 1 0 ... )
  • ' X'[... ]: ใส่ช่องว่างสำหรับแต่ละ 0 และ X สำหรับแต่ละ 1

3

ทับทิม45 42

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

การสาธิต: http://ideone.com/Mw25e


(x=gets.to_i).timesบันทึกสามตัวอักษร ทำไมความสนใจที่ต่ออายุใหม่อย่างฉับพลันในผู้เฒ่าคนนี้?
steenslag

@steenslag ขอบคุณ! ฉันใช้เคล็ดลับของคุณ ฉันเพิ่งเห็นคำถามนี้ที่ด้านบนของรายการและคิดว่าฉันโพสต์คำตอบเพื่อปัดฝุ่นทักษะทับทิมของฉัน เห็นได้ชัดว่าฉันยังไม่ได้ปัดฝุ่นออกพอ :)
Cristian Lupascu

2

หลาม

48 ตัวอักษร

แก้ไข: Kinda ผิด ... มีพื้นที่เพิ่มเติมในตอนท้าย ... แต่นั่นไม่สามารถมองเห็นได้ ถ้าคุณเปลี่ยนพื้นที่เพื่อ "O" (หรือถ่าน nonwhitespace ใด ๆ ) แล้วปรับเปลี่ยนไป[i%2:n] [i%2:n+i%2]สำหรับรุ่นที่ถูกต้อง

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

2

C ++ - 253 ตัวอักษรที่สับสน

#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
ฉันรักตัวเลขมายากลทั้งหมด
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));

ผมค่อนข้างมั่นใจว่าคุณสามารถแปลงไปยังหมายเลขที่ชอบแทน+'1' parseInt('1')จะไม่ให้จำนวนเต็มกับคุณ แต่ฉันไม่คิดว่าการเป็นจำนวนเต็มนั้นสำคัญที่นี่ใช่ไหม
ผู้ชายบางคน

2

k (26 ตัวอักษร)

26 สำหรับฟังก์ชั่นเปลือย:

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

หรือเพิ่มอีก 7 เพื่อรับอินพุตจาก stdin

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


2

Java 10, ฟังก์ชัน lambda, 92 87 84 ไบต์

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

ลองออนไลน์ได้ที่นี่

ต้องขอขอบคุณแมวป่าสำหรับการเล่นกอล์ฟ 4 ไบต์และKevin Cruijssenสำหรับการเล่นกอล์ฟ 3 เพิ่มเติม

เวอร์ชันที่ไม่ดี:

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, โปรแกรมเต็มรูปแบบ, 155 139 ไบต์

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

ลองออนไลน์ได้ที่นี่

เวอร์ชันที่ไม่ดี:

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 ขอบคุณ! ฉันจัดการเพื่อลบออกอีกหนึ่งไบต์และใช้แนวทางของคุณกับโปรแกรมเต็มของฉันเช่นกัน มีการบันทึก 16 ไบต์
OOBalance

การทำสองอย่างs+=นั้นสั้นกว่าวงเล็บ 2 ไบต์: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

หรืออีก 1 ไบต์ปิด (84 ทั้งหมด) โดยการพิมพ์โดยตรง (มีวงเล็บกลับมาอีกครั้ง n->{for(int i=0;i<n*n;)System.out.print(((i%n+i/n)%2<1?"X":" ")+(++i%n<1?"\n":""));}xD): ลองออนไลน์
Kevin Cruijssen

แนะนำ"X ".charAt(i%n+i/n&1)แทน((i%n+i/n)%2<1?"X":" ")
ceilingcat

2

Japt, 8 7 ไบต์

ÆîSi'XY

เปิดใช้งานออนไลน์

7 6 ไบต์ถ้าเราสามารถแทนที่Xด้วยx:

ÆîSixY

เปิดใช้งานออนไลน์


ทางเลือก8 ไบต์ :

Æî"X "éY

เปิดใช้งานออนไลน์


อ่าคุณได้แก้ไขในขณะที่ฉันกำลังแชทอยู่! จะแนะนำสิ่งเดียวกัน
Shaggy

2

APL (Dyalog Extended) , 12 ไบต์SBCS

ฟังก์ชันนำหน้าเงียบโดยไม่ระบุชื่อ ต้องการ⎕IO←0(การทำดัชนีแบบ zero-based)

'X '⊇⍨2|⍳+⍀⍳

ลองออนไลน์!

ɩ ndices 0 ... n-1

+⍀ บวกตารางด้วยแนวนอนและแนวตั้ง:

ɩ ndices 0 ... n-1

2| ส่วนที่เหลือเมื่อหารด้วยสอง

'X '⊇⍨ ใช้เมทริกซ์นั้นเพื่อจัดทำดัชนีลงในสตริง



2

Brainfuck, 140 ไบต์

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

2

Javascript, 67 ไบต์

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

ลองออนไลน์

C, 83 ไบต์

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

ลองออนไลน์

พื้นฐาน C64, 89 ไบต์

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

ป้อนคำอธิบายรูปภาพที่นี่


คุณสามารถใช้on...go toคำสั่งแบบมีเงื่อนไขเช่นเดียวกับON-(I+JAND1)GOTO3:?"X";:ที่มันเป็นศูนย์มันจะผ่านไปยังคำสั่งต่อไปในกรณีนี้ถ้า(I + J AND 1) === 0มันจะพิมพ์ X ซึ่งจะช่วยให้คุณสามารถแพ็คคำสั่งเพิ่มเติมต่อบรรทัดและบันทึกไบต์
Shaun Bebbers


2

สกาล่า, 40 และ 54

จำนวนตัวอักษรคือ 40 สำหรับฟังก์ชั่น 54 สำหรับโปรแกรมที่สมบูรณ์

วิธีการแก้ปัญหาที่ให้ร่างกายฟังก์ชั่นเท่านั้น:

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

ลองออนไลน์

 

โซลูชันที่ให้โปรแกรมที่สมบูรณ์คือ:

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

คุณสามารถรันโดยใช้บรรทัดคำสั่งต่อไปนี้

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

โดยที่ 8 คืออินพุต


1
ยินดีต้อนรับสู่ PP&CG และคำตอบแรกที่ดี มีเว็บไซต์ที่ดีชื่อว่าTry It Onlineที่ให้คุณนับจำนวนไบต์และแชร์การวิ่งได้ง่าย ตรวจสอบคำตอบที่สกาล่าอื่น ๆ เพื่อดูตัวอย่างของมัน มันไม่จำเป็นต้องใจคุณแค่ดีใจที่ได้มี
Veskah

ขอบคุณ @Veskah สำหรับคำแนะนำ
jseteny

ทางออกที่ดีในการเปลี่ยนฟังก์ชั่นและใช้แผนที่คุณจะได้รับ 34 ตัวอักษร:("X "*n)sliding n take n map println
pme

@ pme ขอบคุณสำหรับคำแนะนำ แต่ไม่มีผลลัพธ์ถ้าฉันแทนที่ foreach ด้วย map อย่างไรก็ตามฉันเปลี่ยนเป็นฟังก์ชันตามที่คุณแนะนำ
jseteny

คุณพูดถูก - ขออภัยดูเหมือนว่าแผนที่ขี้เกียจ (.
pme

1

Python - 127 ตัวอักษร

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

คำถาม, 33

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

{(x;x-1-x mod 2)#"X "}สำหรับ 22 ... อ่าไม่มีข้อผิดพลาดเหมือนกันกับคุณ - ไม่มี 4 X บนแถวคี่สำหรับอินพุต 8
streetster


1

PHP - 136 ตัวอักษร (ไม่มีช่องว่าง)

อนุญาตให้ใส่ฟังก์ชัน x และ y

ยังรองรับอินพุตคี่ในขณะนี้

หากคุณกำหนดรูปแบบผลลัพธ์ให้มีความสูงบรรทัด 0.65 em และเปลี่ยน▒█และ█░นี้เป็น□■และ■□มันจะออกมาเหมือนกระดานหมากรุกจริง (สี่เหลี่ยม)

รหัส:

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

เอาท์พุท:

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

มันใช้งานได้กับบอร์ดที่มีจำนวนสี่เหลี่ยมเป็นคี่ต่อด้านหรือไม่?
Gareth

@Gareth ตอนนี้ทำ
Event_Horizon


1

CJam, 18 ไบต์

ฉันอาจจะเพิ่งจะตอบคำถาม GolfScript แต่นี่เป็นวิธีที่แตกต่างกัน (และ CJam ไม่มีสิทธิ์ชนะเลย)

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

ทดสอบที่นี่

ความคิดที่จะย้ำกว่าตาราง 2D กับ x และ y ที่ดัชนีใน stack โดยใช้เคล็ดลับ รับ x และ y เราสามารถกำหนดขาวดำเป็นและใช้เพื่อเลือกระหว่างตัวละครและสตริงที่มีช่องว่างf{f{...}}(x+y)%2X



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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.