チェス盤パターン


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の出力例を修正してください
ピーター・テイラー

回答:


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が再受理するか
どうか疑問に思い

「Pythはあまりにも新しいので勝つには適さない」私はこれを理解しておらず、これを受け入れる。
-steenslag

1
@steenslag説明するために、質問より新しい言語は不適格であるという標準的な抜け穴があります。これは、特定の課題でうまく機能するように特別に設計された言語を防ぐためです。もちろん、チャレンジでやりたいことを自由に行うことができます。
isaacg

11

Golfscript-17文字

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

分析

~[0 ... N-1]の各値について
:N、変数Nのint ストアへの入力を変換し、「X」を繰り返して、ループインデックスから始まる部分文字列をとるN * 2文字の文字列を取得します... ... N文字で終わると、各文字列の最後に改行が挿入されます
,{...}
"X "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 40」の「x」は何をしますか?
-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を読み取り、(0,0)から(N-1、N-1)を含むN×N行列を作成します。
  • 2⊤¨:行列の各数値の最下位ビットを取得します。(つまり、(0,0)、(0,1)、(0,0)...(1,0)、(1,1)、(1,0)...)
  • =/¨:各ペアについて、2つの数値が等しいかどうかを確認します。(1 0 1 0 1 0 ...)
  • ' 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).times3つの文字を保存します。なぜこのオールディーズに対する興味が突然新たになったのですか?
-steenslag

@steenslagありがとう!あなたのヒントを適用しました。リストの一番上にこの質問を見たので、Rubyのスキルをほぐすための答えを投稿すると思いました。どうやら私はそれらを十分に払っていない。:)
クリスチャンルパスク

2

Python

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
私はすべての魔法の数字が大好きです。
ジョーイアダムス

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

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

2

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

こちらからオンラインでお試しください。

おかげceilingcat 4バイトのゴルフ用とにケビン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ありがとう!私はもう1バイト削ることができ、あなたのアプローチを私のプログラム全体にも適用しました。そこに16バイトが保存されました。
OOBalance

2実行すると、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;}
ケビンCruijssen

または、直接印刷してさらに1バイト(合計84)をオフにします(括弧を再びxDに戻します)n->{for(int i=0;i<n*n;)System.out.print(((i%n+i/n)%2<1?"X":" ")+(++i%n<1?"\n":""));}オンラインでお試しください。
ケビンクルーイッセン

提案する"X ".charAt(i%n+i/n&1)代わりに((i%n+i/n)%2<1?"X":" ")
ceilingcat


2

APL(Dyalog Extended)、12 バイトSBCS

匿名の暗黙の接頭辞関数。⎕IO←0(ゼロベースのインデックス付け)が必要です。

'X '⊇⍨2|⍳+⍀⍳

オンラインでお試しください!

ɩndices 0…n–1

+⍀ さらに、水平および垂直方向のテーブル:

ɩndices 0…n–1

2| 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) === 0Xを出力します。これにより、行ごとにステートメントを追加してバイトを節約できます。
ショーンビバーズ


2

Scala、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という素晴らしいサイトがあります。他のScalaの回答をチェックして、その例を確認してください。気にする必要はありません。
ヴェスカー

@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

Q、33

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

{(x;x-1-x mod 2)#"X "}doesntの持つ4 Xの奇数行に入力8. - 22 ...ああ、いや、あなたと同じバグがある
streetster


1

PHP-136文字(空白なし)

xおよびy関数の入力を許可します。

奇数入力もサポートするようになりました。

0.65 emの行の高さを持つように出力をスタイルし、このthis█と█░を□■と■□に変更すると、実際の(正方形の)チェス盤のように見えます。

コード:

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今では
-Event_Horizo​​n


1

CJam、18バイト

GolfScriptの答えを移植しただけかもしれませんが、ここでは別のアプローチを示します。(とにかくCJamは勝つ資格がありません。)

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

ここでテストしてください。

考え方はf{f{...}}トリックを使用して、スタック上のxおよびyインデックスで2Dグリッドを反復処理することです。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.