체스 판 패턴


18

입력 : stdin에서 또는 명령 행 인수로 80보다 작은 양수.

출력 : 입력 숫자의 크기 인 정사각형 체스 판 패턴입니다. 어두운 필드는 문자 '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 : 그렇습니다. 어떻게 공식화합니까? 필요한 출력에 'stdout'에 추가 하시겠습니까?
steenslag

1
완전한 프로그램을 원한다고 말하십시오. 함수 인수와 혼동되지 않도록 명령 행 인수 를 지정할 수도 있습니다 .
JB

오른쪽 상단이라고 할 때 왼쪽 상단을 의미합니까? 그렇지 않은 경우 입력 8의 출력 예를 수정하십시오.
Peter Taylor

답변:


5

피 이스, 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 "상기 제 1, 제 3, 제 등을 라인 및" X" 다른 사람에.


...하지만 APL은 그렇지 않습니다. 충돌 해 주셔서 감사합니다. OP가 다시 수락하면 궁금해 ...
Adám

"Pyth는 이기기에는 너무나 새롭다"나는 이것을 이해하지 못하고 이것을 받아 들인다.
steenslag

1
@steenslag 설명하자면, 질문보다 새로운 언어는 부적합하다는 표준 허점이 있습니다. 이것은 특정한 도전에 잘 맞도록 특별히 설계된 언어를 막기위한 것입니다. 물론 도전 과제로 원하는 것을 자유롭게 할 수 있습니다.
isaacg

11

골프 스크립트-17 자

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

분석

~[0 ... N-1]의 각 값에 대해
:N변수 N의 입력을 int 저장소 로 변환합니다. "X"를 반복하여 N * 2 문자 의 문자열을 제공하면 루프 인덱스에서 시작하는 하위 문자열을 가져옵니다 ... ... N 문자를 끝내면 나중에 각 문자열의 끝에 줄 바꿈을 넣습니다.
,{...}
"X "N*
>
N<
n


5

펄, 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 40'의 'x'는 무엇을합니까?
steenslag

2
@steenslag : x는 문자열 반복 연산자입니다. 'a' x 3수율 'aaa'.
JB


3

파이썬, 76 자

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

3

스칼라 -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을 읽고 (0,0)에서 (N-1, N-1)을 포함하는 NxN 행렬을 만듭니다.
  • 2⊤¨: 행렬에서 각 숫자의 최하위 비트를 가져옵니다. (이제 (0,0), (0,1), (0,0) ... (1,0), (1,1), (1,0) ...)
  • =/¨: 각 쌍에 대해 두 숫자가 같은지 확인하십시오. (이제 우리는 1010 10 ...을 가지고 있습니다.)
  • ' X'[... ]: 0마다 공백을, 각각 1에 X를 넣습니다.

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 문자

편집 : 킨다 잘못 ... 끝에 여분의 공간이 있지만 ... 보이지 않습니다. 공백을 "O"(또는 공백이 아닌 문자)로 변경 [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

자바 스크립트, 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");}

또는 stdin에서 입력을받는 추가 7

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

2

배쉬 : 60 자

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

테이블 크기는 명령 행 매개 변수로 전달됩니다 (예 :) bash chesstable.sh 8.


2

Java 10, 람다 함수, 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 바이트 골프를위한 ceilingcat 및 3 골프를위한 Kevin Cruijssen 에게 감사합니다 .

언 골프 버전 :

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
}

자바 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

또는 괄호를 다시 xD로 다시 인쇄하여 1 바이트 더 바이트 오프 (총 84 개) : n->{for(int i=0;i<n*n;)System.out.print(((i%n+i/n)%2<1?"X":" ")+(++i%n<1?"\n":""));}. 온라인으로 사용해보십시오.
Kevin Cruijssen

"X ".charAt(i%n+i/n&1)대신 제안((i%n+i/n)%2<1?"X":" ")
ceilingcat


2

APL (Dyalog Extended) , 12 바이트 SBCS

익명의 암묵적 접두사 기능. 필요합니다 ⎕IO←0(0부터 시작).

'X '⊇⍨2|⍳+⍀⍳

온라인으로 사용해보십시오!

ndi 0 ~ n–1을 표시합니다

+⍀ 수평 및 수직으로 테이블을 더하십시오.

ndi 0 ~ n–1을 표시합니다

2| 2로 나눈 나머지 나눗셈

'X '⊇⍨ 해당 행렬을 사용하여 문자열을 색인화하십시오.



2

Brainfuck, 140 바이트

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

2

자바 스크립트, 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

enter image description here


on...go to명령 ON-(I+JAND1)GOTO3:?"X";:이 0 인 경우 와 같이 조건부로 명령을 사용할 수 있습니다 .이 경우 다음 명령문으로 넘어 가고이 경우 (I + J AND 1) === 0X를 인쇄합니다. 그러면 줄당 더 많은 명령문을 압축하여 바이트를 절약 할 수 있습니다.
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

이것을 멋진 함수로 바꾸고 map을 사용하면 34 개의 문자를 얻을 수 있습니다 :("X "*n)sliding n take n map println
pme

@pme 제안 해 주셔서 감사하지만 foreach를 map으로 바꾸면 출력이 없습니다. 그러나 제안한대로 기능으로 변경합니다.
jseteny

당신 말이 맞아-죄송합니다 map is lazy; (.
pme

1

파이썬-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 번 ... 아, 아뇨, 당신과 같은 버그가 있습니다. 입력 8의 홀수 행에 4 개의 X가 없습니다.
streetster

1

루비 58

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

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

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 바이트

아마도 GolfScript 답변을 이식했을 수도 있지만 여기에는 다른 접근법이 있습니다. (그리고 CJam은 어쨌든 이길 자격이 없습니다.)

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

여기에서 테스트하십시오.

아이디어는 트릭을 사용하여 스택의 x 및 y 인덱스를 사용하여 2D 그리드를 반복 하는 것 f{f{...}}입니다 . x와 y가 주어지면 단순히 흑백을 결정 (x+y)%2하고 문자 X와 공백을 포함하는 문자열 중에서 선택하는 데 사용할 수 있습니다.



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.