チェス盤のすべての白または黒の正方形を出力します


29

前書き

これがチェス盤の様子です。

ここに画像の説明を入力してください

あなたはそれa1暗い正方形であることがわかります。しかし、b1ある光の正方形

タスク

課題は、与えられたdarklightまたはboth、すべての暗い色明るい、またはすべての正方形 を区切り文字(空白や改行など)で出力することです。すべての正方形の順序は重要ではありません

テストケース

Input: dark
Output: a1 a3 a5 a7 b2 b4 b6 b8 
        c1 c3 c5 c7 d2 d4 d6 d8 
        e1 e3 e5 e7 f2 f4 f6 f8 
        g1 g3 g5 g7 h2 h4 h6 h8

Input: light
Output: a2 a4 a6 a8 b1 b3 b5 b7 
        c2 c4 c6 c8 d1 d3 d5 d7 
        e2 e4 e6 e8 f1 f3 f5 f7 
        g2 g4 g6 g8 h1 h3 h5 h7

Input: both
Output: a1 a2 a3 a4 a5 a6 a7 a8
        b1 b2 b3 b4 b5 b6 b7 b8
        c1 c2 c3 c4 c5 c6 c7 c8
        d1 d2 d3 d4 d5 d6 d7 d8
        e1 e2 e3 e4 e5 e6 e7 e8
        f1 f2 f3 f4 f5 f6 f7 f8
        g1 g2 g3 g4 g5 g6 g7 g8
        h1 h2 h3 h4 h5 h6 h7 h8

注:出力をきれいにしましたが、これは必要ありません

これはであるため、バイト数が最小の提出が勝ちです!


それで、a2a4a6...大丈夫でしょうか?
コナーオブライエン

@CᴏɴᴏʀO'Bʀɪᴇɴ空白や改行などの区切り文字を含める必要があるため、無効です。
アドナン

生の2Dマトリックスを出力できますか?すなわち[[a2,a4,a6,a8],[...]...]
コナーオブライエン

@CᴏɴᴏʀO'Bʀɪᴇɴはい、それは許可されています
Adnan

lightdarkおよびbothとして入力する必要がStringSまたはそれらが任意のデータ型を経由して表現することができますか?
WKS

回答:


15

Pyth、22 21バイト

@ Sp3000による-1バイト

fn%Chz3%sCMT2sM*<G8S8

関数の下で、1、0、および2 %Chz3darkハッシュします。チェスの正方形のオードの合計のパリティを取得すると(つまり、-> -> = 、暗い正方形は0に、明るいは1になります。これにより、不等式でフィルタリングできます。lightbotha1[97, 33](97 + 33)%20

fn%Chz3%sCMT2sM*<G8S8      implicit: z=input
               *           Cartesian product of
                <G8          first 8 letters in G (alphabet)
                   S8        with [1,...,8] implicitly stringified
             sM*<G8S8      ['a1','a2,...,'a8','b1'...'h8']
f          T               Filter that by gives truthy result to lambda T:
        sCMT                   The sum of the ords of the chars in T,
       %    2                  modulo 2
 n                            does not equal
   Chz                          ord of the first char in z,
  %   3                         modulo 3
                            Implicitly print the list.

ここで試してみてください


21:fn%Chz3%sCMT2sM*<G8S8
Sp3000

@ Sp3000ありがとう!6バイトを使用してフィットさせるため、さまざまなハッシュを試してみるべきでした。
リルトシアスト

13

Bash + GNUユーティリティ、74

printf %s\\n {a..h}{1..9}|sed -n "`sed '/[db]/a1~2p
/t/a2~2p
c/9/d'<<<$1`"

{a..h}{1..9}は、8x8ボードのすべての座標と追加の列を生成するbash brace展開です9。これは、チェッカーボード効果を可能にする行の長さを奇数にするため重要です。

printf、各座標を1行に1つずつフォーマットするだけです。

ビルドされたsed式は、すべてのx9座標を削除してから、スクリプト入力に従って、偶数または奇数、または両方の入力行を出力します。


11

JavaScript(SpiderMonkey 30 +)、90 85 83 82バイト

x=>[for(d of"12345678")for(c of"abcdefgh")if(x>'l'^parseInt(c+=d,19)%2|x<'d')c]+''

コンマ区切りの正方形の文字列を返します。99バイトの互換バージョン:

x=>([..."12345678"].map(d=>[..."abcdefgh"].map(c=>c+d).filter(s=>x>'l'^parseInt(s,19)%2|x<'d')))+''

64個すべての正方形の名前を列挙し、それらをベース19で解析して、2を法とする明るいか暗いかを確認します。


良い。これはES7
edc65

@ edc65ああ、思い出せませんでした。2番目のバージョンは「唯一」のES6です。
ニール

ES6がES7を
破る

@ edc65あなたは言っていた?
ニール

4
@ edc65引き分けに同意できるとは思いませんか?
ニール

10

JavaScript(ES6)、82 87 98

スペースで区切られた正方形の文字列を返す無名関数。

i=>eval("for(o='',v=190;v<322;)v++%19<8&&i<'d'|v&1^i>'l'?o+=v.toString(19)+' ':o")

テスト

f=i=>eval("for(o='',v=190;v<322;)v++%19<8&&i<'d'|v&1^i>'l'?o+=v.toString(19)+' ':o")

// less golfed

q=i=>{
  // loop over the range of number a0 (base 19) to h8 (base 19)
  for(o='',v=190;v<322;) 
  {
    if (v++ %19 < 8) // increment and execute the line below only if second digit in 1..8
      if (i<'d'|v&1^i>'l') // even == light, odd == dark, take both if input is 'both'
        o+=v.toString(19)+' '
  }
  return o
}

document.write('<hr>Both<br>'+f('both'))
document.write('<hr>Light<br>'+f('light'))
document.write('<hr>Dark<br>'+f('dark'))


1
うわー...それはただクレイジーです!ES6でもっと短くすることは可能かしら
...-ETHproductions

@ETHproductionsはい、そうです!86の準備ができていますが、私はまだもっと良いことをしようとしています(私の-移動-目標は85のニールです... 83はありません)
-edc65

7

バッチ、192バイト

@set s=a1 a3 a5 a7
@set t=b2 b4 b6 b8
@if not %1==light call:b
@set s=a2 a4 a6 a8
@set t=b1 b3 b5 b7
@if %1==dark exit/b
:b
@echo %s% %s:a=c% %s:a=e% %s:a=g% %t% %t:b=d% %t:b=f% %t:b=h%

4

Pyth、48 39バイト

K*<G8S8Jfq%xGhT2%seT2K?qhz\bK?qhz\lJ-KJ

ここで試してみてください!

他のPythソリューションよりはまだ長いですが、アルゴリズムでこれを打ち負かすことはできないと思います。

説明

まず、ボード上のすべての正方形のリストを生成し、それをに割り当てYます。次に、明るい正方形のみが残るようにこのリストをフィルタリングし、このリストをに割り当てJます。その後、入力を評価して印刷します。

  • Y 入力が both
  • J 入力が light
  • Y-J 入力が dark

正方形が明るいかどうかを判断するには、次のようにします。

  • charを1〜8(a-> 1、b-> 2)の数値にマッピングします。結果は18for a8などになります。
  • それらの数値が両方とも奇数か偶数かを確認します(x%2 == y%2
  • もしそうであれば、正方形は明るい、そうでなければ暗い

K*<G8S8Jfq%xGhT2%seT2K?qhz\bK?qhz\lJ-KJ  # z=input

 *                                         # Cartesian product of
  <G8                                      # first 8 letters of the alphabet (a-h)
     S8                                    # 1-indexed range (1-8)
K                                          # K holds now all squares
       f             K                     # Filter K 
        q                                  # is equal
         %xGhT2                            # map [a-h] to a number [1-8] and take it modulo 2
               %seT2                       # Take modulo 2 from the row number
                      ?qhz\bK              # If input starts with 'b' print K
                             ?qhz\lJ       # If it starts with 'l' print J
                                    -KJ    # Otherwise print the difference of those 2

ああ、そうねえ、それは長いショットで私より短いです。
アディソンクランプ

4

Python 2、73 71 70バイト

lambda s:[chr(x/8+97)+`x%8+1`for x in range(64)if x+x/8&1^ord(s[0])%3]

チャレンジでは「セパレータ」に言及しているので、関数が問題に対応しているかどうかはまだ少し混乱していますが、他にも多くの関数のサブミットがあるので、同じことをしました。

Erwanの答えに似ていますが、Python 2の機能がかなり多くあります。

(@xnorのおかげで2バイト)


笑私もの間テストしていないs=="dark"s[0]=="d"、本当に最初のが、私の中の私の防衛のためにしてみてください、私が使用s,*_=sし、4cmp
エルワン・

1
ord(s[_])&_またはのような短いものがあるはずord(s[_])/_です。
xnor

@xnor確かに、あります%:)ありがとう!
Sp3000

4

PHP、132の 126 120 108 106バイト

for($s=strtr($argv[1],bdl,210);$c<8;$c++)for($r=0;$r<8;)if((++$r+$c)%2==$s||$s>1)echo"abcdefgh"[$c]."$r ";

列(0〜7)と行(1〜8)をループし、両方の合計が奇数/偶数かどうかを確認します。

PHP 5.6.4でテストし、実行します。 php -d error_reporting=30709 -r '<CODE>' {dark|light|both}


1
PPCGへようこそ!これは良い答えですが、説明を追加するとより多くの票を獲得できます。
リルトシアスト

私はあなたが交換することができると思います$s==2$s-1。$ S = 2場合は、-1、それがtruthyあるとcontiniueれる、1だ
マルタイン

そして、私はそれ$c=0ができると思う$c、それは通知の束を与えるでしょうが、少なくとも暗い場合はうまく動作します
-Martijn

ありがとう、マーティン!中括弧も削除するのを忘れました。今のところは-6バイトです。そして、理由はわかり$s-1ませんが、動作しませんが、動作するはずです。この素晴らしいアイデアをありがとう!後でデバッグします。
killerbees19

このサイトは初めてですが、未定義の$c変数のためにエラーメッセージが表示されますか?それは少し奇妙で無効に聞こえます。か否か?
killerbees19

3

Vitsy90 82バイト

'`'8\[1+8\:]Yy1-\?8\['1'v8\[vD1+vr?]vX]i'h'-)[88*\[Z?aO]]i'r'-)[?1m]1m
84*\[Z??aO]

最初の行の説明:

'`'8\[1+8\:]Yy1-\?8\['1'v8\[vD1+vr?]vX]i'h'-)[88*\[Z?aO]]i'r'-)[?1m]i'g'-)[1m]
'`'                     Push ` to the stack. (this is 1 less than a in ASCII)
   8\[     ]            Do the stuff in brackets 8 times.
      1+                Add one on every recursion (this gets a, b, c, d...)
        8\:             Clone the stack 8 times. (This gets 8 of each a, b, c...)
Y                       Remove the current stack.
 y1-\?                  Go one stack to the left (I really need to builtin this)
8\[                 ]   Do the stuff in brackets 8 times.
   '1'                  Push character literal 1 to the stack.
      v                 Save it as a temporary variable.
       8\[       ]      Do the stuff in brackets 8 times.
          v             Push the temporary variable to the stack.
           D            Duplicate the top item of the stack.
            1+          Add one to it (this gives us 1, 2, 3, 4...)
              v         Capture the top item of the stack as a temporary variable.
               r        Reverse the stack.
                ?       Go a stack to the right.
                  vX    Clear the temporary variable slot.
i'h')[          ]       If the last character of the input is 'h', do the stuff in brackets
      88*\[    ]        Do the stuff in brackets 64 times.
           Z            Output everything in the stack as a character.
            ?           Rotate right a stack.
             aO         Output a newline.
i'r')[?1m]              If the penultimate character of the input is 'r', rotate over a 
                        stack, then execute the first index of lines of code.
1m                      Execute the first index of lines of code.

2行目の説明:

84*\[Z??aO]
84*\[     ]   Do the stuff in brackets 32 times.
     Z        Output everything in the stack as a char.
      ??      Rotate two stacks over.
        aO    Output a newline.

'dark'と 'both'には、ボーナスの末尾の改行があります。'dark'、 'both'、または 'light'のみを入力する必要があります。

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


3

PowerShell v3 +、142 129バイト

param($a)$d=$a[0]-in('d','b');$l=$a[0]-in('l','b')
97..104|%{$i=[char]$_;1..8|%{if((($q=($_+$i)%2)-eq$l)-or($q+1-eq$d)){"$i$_"}}}

入力を受け取り$a、入力の最初の文字に基づいて$darkまたは$light squaresを出力する場合に2つの変数を設定します。

その後、我々をループa-h1-8し、上と同じトリックを使用してチェスの正方形の色を決定し、それは光や暗い正方形ですかどうかを解析する(ヘルパー変数を設定する$q最初の試験で)、適切な場合はパイプラインにその四角形を追加します。実行後、パイプライン上の要素は行ごとに1つ出力されます。

-inオペレーターにはv3以降が必要です。

編集- switch平等テストの順序を変更し、変更することで13バイトを節約


3

Jolf、48バイト

Ζ-ώ~1tΜ fΜZAQ8ΨΖ+ζ|<%ζγwώt8ώ6d|<i'd!x%H2>i'ldbHγ

それはすべて私にとってギリシャ語です¯\ _(ツ)_ /¯これはedc65の優れた答えの翻訳です。

Ζ-ώ~1t
Ζ        set ζ to 
  ώ~1     100 * 2
 -   t    minus 10 (=190)

ΜZAQ8ΨΖ+ζ|<%ζγwώt8+2t
 ZAQ8                 A zero array of length Q8 (8*8 = 64)
Μ    Ψ                map that
      Ζ+ζ             ζ += 
           %ζγwώt       ζ % (γ = 19)
          <      8      < 8
         |        ώ6  || 12

Μ f■above thing■d|<i'd!x%H2>i'ldbHγ
 _f■above thing■d                    filter the above thing
                 |<i'd!x%H2>i'l      removing all the bad stuff (i<'d'|v%2^i>'l')
Μ                              dbHγ  map each character to base 19

3

Perl、69 + 3 = 72バイト

$b=/b/;$i=/l/;$_="@{[grep{$i=!$i||$b}map{$l=$_;map{$l.$_}1..8}a..h]}"

で実行するにはperl -p、3バイトを追加しました。

ゴルフの少ないバージョン(babycartオペレーターがうまくフォーマットするのを難しくしているため、少し異なります):

$b=/b/;                       # flag for input containing b
$i=/l/;                       # start $i as true if input contains 'l'

@a = grep {
    $i = !$i||$b                # alternate unless $b is true
} map {
    $l = $_;                    # save letter
    map {
        $l.$_                   # join letter and number
    } 1..8                      # generate number sequence
} a..h;                         # generate letter sequence

# golfed version uses babycart operator around array expr to save one byte
$_ = "@a"                       # write array, separated

ゴルフバージョンでは次を使用し"@{[]}"ます。コメント付きバージョンは@a=...; "@"、コメント付きコードが引き続き実行できるように使用します。


map$l.$_,1..8-1
チョロバ

grepの同じトリック:grep$i=!$i||$b,map再び-1
choroba

3

C ++、132バイト

コマンドラインで入力を取ります。印刷条件にポインター/モジュロブードゥーを使用します。

#include<stdio.h>
int main(int i,char**v){for(int n=0;n<64;n++)if((n+(i=n/8))%2-*v[1]%3){putchar(i+97);putchar(n%8+49);putchar(32);}}

n-loopが必要だとは思わない。forループをネストするij、数バイトが削減されると思います。(i+j)%2アプローチは本当に賢いです。私はそれを考えていませんでした。
WKS

(i//8+i%8)%2それと同じことに気づいた(i//8+i)%2ので、次の定義を削除すると、いくつかのバイトを獲得できますj=n%8
-Erwan

3

Java、143

class H{public static void main(String[]a){for(char
c=96;++c<'i';)for(int
i=0;++i<9;)if((i+c)%2!=a[0].charAt(0)%3)System.out.println(c+""+i);}}

ねえ、それは最長の答えではありません:)

入力はコマンドライン引数として取得されます。


3

PHP、99 82 79 76 74 73バイト

ISO 8859-1エンコードを使用します。

for($z=$argv[1];++$x<72;)$x%9&&$z<c|$z>k^$x&1&&print~ß.chr($x/9+97).$x%9;

次のように実行します(-d美学のためにのみ追加):

php -d error_reporting=30709 -r 'for($z=$argv[1];++$x<72;)$x%9&&$z<c|$z>k^$x&1&&print~ß.chr($x/9+97).$x%9; echo"\n";' dark

これは次のように機能し$xます。変数は1から71にインクリメントされ、数値は以下に示すようにセルに対応します。

r\c 1  2  3  4  5  6  7  8  [invalid column]
A   1  2  3  4  5  6  7  8  9
B  10 11 12 13 14 15 16 17 18
C  19 20 21 22 23 24 25 26 27
D  28 29 30 31 32 33 34 35 36
E  37 38 39 40 41 42 43 44 45
F  46 47 48 49 50 51 52 53 54
G  55 56 57 58 59 60 61 62 63
H  64 65 66 67 68 69 70 71 72

したがって、$x modulo 9列番号と$x / 9行番号が得られ、これを使用して文字に変換しchrます。コード$z<c|$z>k^$x&1true、入力both$z<c)と、それぞれ偶数または奇数のセルの場合、lightまたはdarkそれぞれに対してのみ($z>k ^ $x&1)を生成します。この式の結果により、セル座標が印刷されるかどうかが決まります。最後に、$x modulo 9結果がの場合0、その存在しないセルをスキップします。

  • ループを1つだけにすることで18 17バイトを節約し(バグを修正)、数値を他の方法ではなくcharに変換しました
  • 暗闇と明かりの条件を組み合わせて3バイトを節約 xor
  • 最初の文字ではなく、完全な入力と比較して3バイトを節約しました
  • 文字に変換する前に正しい行番号を取得するために.125$x/9+69.9を減算する必要がなくなったため、2バイトを節約しました。
  • を使用してスペースを生成してバイトを保存しました

2

JavaScriptのES6、187の 160 159バイト

私はおそらく痛いほど明らかな何かを見逃しています。しかたがない。配列を平らにする必要はありません。

l=s=>(E=[2,4,6,8],O=[1,3,5,7],h=(z=s[0]=="d")?O:E,d=z?E:O,[...h.map(t=>[..."aceg"].map(e=>e+t)),...(d.map(t=>[..."bdfh"].map(e=>e+t))),...(s[0]=="b"?l`d`:[])])

2D配列を返します。


ここで試してください:


2

ルビー、85

これにはもっと短い方法があると思いますが、これはのかわいい使い方です.upto

gets;'a1'.upto('h8'){|e|puts e if e[/[1-8]/]&&(~/b/||((e.ord%2!=e[1].ord%2)^! ~/l/))}

2

R、129 94バイト

ボードをより良く生成できるとわかっていました:)。基本的に、これは反転したボードを作成し、シェードが入力と一致しないグリッド参照をフィルタリングします。出力はスペースで区切られます。

a=which(array(c('light','dark'),c(9,9))[-9,-9]!=scan(,''),T);cat(paste0(letters[a[,1]],a[,2]))

非ゴルフ

a=which(                           # Get the indexes of
  array(c('light','dark'),c(9,9))  # an array of light dark
    [-9,-9]                        # except for the ninth row and column
      !=scan(,'')                  # where the value doesn't equal the input
    ,T                             # return array index not vector
  );
cat(paste0(letters[a[,1]],a[,2]))  # using letters for col

テスト

> a=which(array(c('light','dark'),c(9,9))[-9,-9]!=scan(,''),T);cat(paste0(letters[a[,1]],a[,2]))
1: dark
2: 
Read 1 item
a1 c1 e1 g1 b2 d2 f2 h2 a3 c3 e3 g3 b4 d4 f4 h4 a5 c5 e5 g5 b6 d6 f6 h6 a7 c7 e7 g7 b8 d8 f8 h8
> a=which(array(c('light','dark'),c(9,9))[-9,-9]!=scan(,''),T);cat(paste0(letters[a[,1]],a[,2]))
1: light
2: 
Read 1 item
b1 d1 f1 h1 a2 c2 e2 g2 b3 d3 f3 h3 a4 c4 e4 g4 b5 d5 f5 h5 a6 c6 e6 g6 b7 d7 f7 h7 a8 c8 e8 g8
> a=which(array(c('light','dark'),c(9,9))[-9,-9]!=scan(,''),T);cat(paste0(letters[a[,1]],a[,2]))
1: both
2: 
Read 1 item
a1 b1 c1 d1 e1 f1 g1 h1 a2 b2 c2 d2 e2 f2 g2 h2 a3 b3 c3 d3 e3 f3 g3 h3 a4 b4 c4 d4 e4 f4 g4 h4 a5 b5 c5 d5 e5 f5 g5 h5 a6 b6 c6 d6 e6 f6 g6 h6 a7 b7 c7 d7 e7 f7 g7 h7 a8 b8 c8 d8 e8 f8 g8 h8
>

2

OracleのSQL 11.2、192の 180バイト

SELECT CHR(64+x),DECODE(y,0,8,y)FROM(SELECT CEIL(LEVEL/8)x,MOD(LEVEL,8)y FROM DUAL CONNECT BY LEVEL<=64)WHERE(:1='dark'AND MOD(x+y,2)=0)OR(:1='light'AND MOD(x+y,2)=1)OR(:1='both');

ゴルフをしていない

WITH v AS
(
  SELECT CEIL(LEVEL/8)x, DECODE(MOD(LEVEL,8),0,8,MOD(LEVEL,8))y  
  FROM DUAL CONNECT BY LEVEL<=64
)
SELECT CHR(64+x),y
FROM   v
WHERE  (:1='dark' AND MOD(x+y,2)=0)OR(:1='light' AND MOD(x+y,2)=1)OR(:1='both');

vビューは、各正方形の座標を生成します。座標の合計が偶数の場合、正方形は黒で、そうでない場合は白です。


2

錆、263の 259の 244バイト

use std::char;use std::env;fn main(){let n=env::args().nth(1).unwrap();for i in 0..8{for j in 0..8{if n=="both"||(n=="dark"&&(i+j)%2==0)||(n== "light"&&(i+j)%2!=0){println!("{}{}",char::from_u32(i+97).unwrap(),char::from_u32(j+49).unwrap())}}}}

拡張フォーム:

fn main() {
    let input = env::args().nth(1).unwrap();
    for i in 0..8{
            for j in 0..8{
                if input == "both"
                || (input == "dark" && (i+j)%2==0)
                || (input == "light" && (i+j)%2!=0){
                    println!("{}{}",char::from_u32(i+97).unwrap(),char::from_u32(j+49).unwrap());
            }
        }
    }
}

1
入力をハードコーディングするのではなく、端末またはコマンドラインから、または関数パラメーターとして入力を読み取ることはできませんか?
ニール


2

CJam、29

qci3%:X;8Ym*{~+2%X-},"a1 "f.+

ただ迅速で汚い解決策:p
オンラインで試す

説明:

q           read the input
ci          convert to (first) character then to integer
3%          modulo 3; results for d(ark), l(ight) and b(oth) are 1, 0, 2
:X;         store in X and pop
8Ym*        generate all pairs (Y=2) of numbers from 0 to 7
{…},        filter using the condition block
  ~         dump the current pair on the stack
  +2%       calculate the sum modulo 2
  X-        subtract X; if the result is not 0, the pair is kept
"a1 "f.+    vectorized-add "a1 " to each remaining pair
             this means the character 'a' is added to the first number,
             the character '1' is added to the second number,
             and then the space character is appended
            the contents of the stack are automatically printed at the end

2

ハスケル、133の 116 105 100 98 91バイト

f r=[["abcdefgh"!!x,"12345678"!!y]|x<-l,y<-l,odd(x+y)||r<"l",even(x+y)||r!!0/='d']
l=[0..7]

これがHaskellでのゴルフの最初の試みです。

マイケルクラインの助けを借りて、なんとか100文字未満に抑えることができました!


1
どの程度c>0のためにc==1c<1のためにc==0?2バイト節約します。
マイケルクライン

素晴らしい、私たちは100未満になりました!マイケルありがとう。
-joeytwiddle

1
どういたしまして。Iビットが中に吸い込まれ、ビットをリファクタリングすることにより、86バイトに、それを降りてしまった:f r=[[[a,b]|a<-['a'..'h'],b<-['1'..'8']]!!i|i<-[0..63],even i||r<"l",odd i||r!!0/='d']
マイケル・クライン

1
それは非常に素晴らしい、再考されたアプローチです。奇数と偶数iが斜めのストライプを与えないことを言って申し訳ありませんが。これをi+i`div`8(などx+y)で解決する人もいます。他のものはで開始['1'..'9']し、[0..71]そしてその後にのみ保持i`mod`9<896バイトのために、後の結果を。ただし、2つのアプローチのこのハイブリッドは、91バイトでうまく機能しますl=[0..7];f r=[["abcdefgh"!!x,"12345678"!!y]|x<-l,y<-l,odd(x+y)||r<"l",even(x+y)||r!!0/='d']
。– joeytwiddle

ああ、まあまあまあまあまあです
マイケルクライン

1

Mathematica 133バイト

方法1:108バイト。これにより、各セルにラベルが付いたテーブルとしてボードが構築され、必要に応じて明るいまたは暗い対角線またはバンドが返されます。

Table[Table[{i,j},{i,{h,g,f,e,d,c,b,a}},{j,Range@8}]~Diagonal~k,{k,If[#=="light",-6,-7],7,If[#=="both",1,2]}]&

%["light"]   (*where % repeats the preceding line *)

{{{b、1}、{a、2}}、{{d、1}、{c、2}、{b、3}、{a、4}}、{{f、1}、{e 、2}、{d、3}、{c、4}、{b、5}、{a、6}}、{{h、1}、{g、2}、{f、3}、{e 、4}、{d、5}、{c、6}、{b、7}、{a、8}}、{{h、3}、{g、4}、{f、5}、{e 、6}、{d、7}、{c、8}}、{{h、5}、{g、6}、{f、7}、{e、8}}、{{h、7}、 {g、8}}}


方法2:133バイト。配列を作成し、各セルの行番号+列番号の合計の偶奇性に従って選択します。

Position[Array[Boole@OddQ[#+#2] &,{8,8}],Switch[#,"dark",0,"light",1,"both",0|1]]/.
{j_,k_}:>{j/.Thread[Range@8->{a,b,c,d,e,f,g,h}],k}&


1

JS、197バイト

b=[];d=[];l=[];for(i=1;i<9;i++){for(j=1;j<9;j++){a=String.fromCharCode(96+i*1)+j;b.push(a);if((i+j)%2<1){d.push(a)}else{l.push(a)}}}m=[0,"both",b,"dark",d,"light",l];alert(m[m.indexOf(prompt())+1])

1

パイソン(3.5)、106の 100 96 92バイト

MegaTomのトリックを使用して(i+j)%26バイトを獲得する

f=lambda s:[chr(97+i//8)+str(1+i%8)for i in range(64)if s[0]=='b'or(i//8+i)%2==(s[0]=='l')]

repl.itで試してください

結果

>>> f('light')
['a2', 'a4', 'a6', 'a8', 'b1', 'b3', 'b5', 'b7', 'c2', 'c4', 'c6', 'c8', 'd1', 'd3', 'd5', 'd7', 'e2', 'e4', 'e6', 'e8', 'f1', 'f3', 'f5', 'f7', 'g2', 'g4', 'g6', 'g8', 'h1', 'h3', 'h5', 'h7']
>>> f('dark')
['a1', 'a3', 'a5', 'a7', 'b2', 'b4', 'b6', 'b8', 'c1', 'c3', 'c5', 'c7', 'd2', 'd4', 'd6', 'd8', 'e1', 'e3', 'e5', 'e7', 'f2', 'f4', 'f6', 'f8', 'g1', 'g3', 'g5', 'g7', 'h2', 'h4', 'h6', 'h8']
>>> f('both')
['a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'g1', 'g2', 'g3', 'g4', 'g5', 'g6', 'g7', 'g8', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'h7', 'h8']

前のバージョン

f=lambda s:[i for i in[i+j for i in'abcdefgh'for j in'123456780'][s[0]=='l'::2-(s[0]=='b')]if'0'not in i]

1

C ++、119バイト

MegaTomのトリックに基づいています。

#include <stdio.h>
int main(int n,char**v){for(n=0;n<64;++n){if((n+n/8)%2-**(v+1)%3){printf("%c%c ",n/8+97,n%8+49);}}}

0

C(gcc)、112バイト

f(char*s){for(int m=*s^'d'?*s^'l'?3:2:1,l=64,x;l--;m&1&!x|(m&2&&x)&&printf("%c%d ",l%8+97,l/8+1))x=l%8%2^l/8%2;}

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

a == 1の場合、行と列の「奇数」が同じ、つまり両方が奇数または両方が偶数の場合、正方形は常に黒になります。行と列が常に奇数で異なる白い正方形では、反対のことが当てはまります。

その後は、行と列のループを結合するだけでなく、十分なレベルの理解不能になるまで演算子の優先順位の表を調べるだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.