建立一个棋盘


20

对于此挑战,您将在棋盘游戏开始时打印每块的坐标和颜色。

在棋盘上为每个正方形(索引为0-7)输入x和y(用逗号分隔),然后在板的顶部(靠近y = 0)输入“ r”或“ b”(红色或黑色) )为红色,底部为黑色。件之间需要换行符,并且不需要空格。

这是因此答案以字节计分,而字节越少越好。

尾随换行符是允许的,但不是必须的,并且顺序必须与下面的顺序完全相同。

所需的输出:

0,0r
0,2r
0,4r
0,6r
1,1r
1,3r
1,5r
1,7r
2,0r
2,2r
2,4r
2,6r
5,1b
5,3b
5,5b
5,7b
6,0b
6,2b
6,4b
6,6b
7,1b
7,3b
7,5b
7,7b

3
是否有你跳过一个特别的原因x=3x=4
HyperNeutrino

1
@HyperNeutrino,因为棋盘仅填充了顶部和底部的3行(在游戏开始时)
贾斯汀

3
所以这基本上是Checkers 的起点,也就是English Draughts。那是对的吗?
Arnauld

2
欢迎来到PPCG.SE!我们中的某些人喜欢使用的此站点的功能是沙箱。你不具备使用它,但它是通过它来获得有关你有什么新的挑战想法的反馈,而不必通过整个downvote / closevote苦难一个有用的渠道。
Digital Trauma's

1
可以用换行符以外的定界符来分隔坐标吗?即0,0r;0,2r;0,4r;0,6r;1,1r;1,3r;1,5r;1,7r;2,0r;2,2r;2,4r;2,6r;5,1b;5,3b;5,5b;5,7b;6,0b;6,2b;6,4b;6,6b;7,1b;7,3b;7,5b;7,7b
凯文·克鲁伊森

Answers:


8

05AB1E,26个字节

2ÝD5+«v4Fy',N·yÉ+„bry3‹èJ,

在线尝试!

说明

2Ý                           # push [0,1,2]
  D5+                        # duplicate and add 5: [5,6,7]
     «                       # concatenate
      v                      # for each y in [0,1,2,5,6,7] do:
       4F                    # for each N in [0 ... 3] do:
         y                   # push y
          ',                 # push ","
            N·yÉ+            # push N*2+isOdd(y)
                 „br         # push "br"
                    y3‹è     # index into the string with y<3
                        J,   # join everything to a string and print

我觉得[0,1,2,5,6,7]可以减少字节数...但是我能想到的只是,7Ý34SK所以我想不是。
魔术章鱼缸

7

JavaScript(ES6),66个字节

包括结尾的换行符。

f=(n=24)=>n--?f(n)+[2*(x=n>11)+(y=n>>2),n%4*2+y%2+'rb'[+x]]+`
`:''

演示版



7

C(gcc)83 81 79 78字节

  • 多亏了Tahg,节省了两个字节;打高尔夫球x/4+2*(x/12)x/4+x/12*2
  • 由于凯文克鲁伊森节省了两个字节; 打高尔夫球x%8*2%8x*2%8
  • 多亏了ceilingcat,节省了一个字节。
x;main(){for(;x<24;)printf("%d,%d%c\n",x/4+x++/12*2,x*2%8+x/4%2,114-x/12*16);}

在线尝试!


2
您可以执行x / 4 + x / 12 * 2并摆脱()
Tahg

x%8*2%8可能是x*2%8
Kevin Cruijssen

@ceilingcat谢谢。
乔纳森·弗雷希


4

Java 8,102 96 95 93 91字节

v->{for(int i=0;i<24;System.out.printf("%d,%d%c%n",i/4+i/12*2,i*2%8+i/4%2,i++<12?114:98));}

来自@JonathanFrech的C答案的端口,之后我自己打了5个字节。

在这里尝试。

说明:

v->{                    // Method without empty unused parameter and no return-type
  for(int i=0;i<24;     //  Loop from 0 to 24 (exclusive)
    System.out.printf("%d,%d%c%n",
                        //   Print with format:
                        //   (%d=digit; %c=character; %n=new-line)
      i/4+i/12*2,       //    Print first coordinate
      i*2%8+i/4%2,      //    Print second coordinate
      i++<12?114:98)    //    Print either 'r' or 'b'
  );                    //  End of loop
}                       // End of method



3

果冻,35个字节

8Ḷḟ3ḟ4µḂr7m2ṭ€µ€Ẏµḣ1<3Ḣị⁾rbṭj”,$µ€Y

在线尝试!

完整程序,不带参数

说明

8Ḷḟ3ḟ4µḂr7m2ṭ€µ€Ẏµḣ1<3Ḣị⁾rbṭj”,$µ€Y  Main link; no arguments
8                                    8
 Ḷ                                   Push 0 .. 8 - 1
  ḟ                                  Remove all instances of
   3                                 3
    ḟ                                Remove all instances of
     4                               4
                €                    For each in [0, 1, 2, 5, 6, 7]
       µḂr7m2ṭ€µ                     Generate all of the piece coordinates across that row
        Ḃ                            row number % 2
         r                           inclusive range up to
          7                          7
           m                         modular; take every   elements
            2                                            2
              €                      For each column coordinate
             ṭ                       Tack the row coordinate (reverse append)
                 Ẏ                   Tighten; flatten once
                                 €   For each piece coordinate (in the right order now)
                 µḣ1<3Ḣị⁾rbṭj”,$µ    Convert to its final output
                  ḣ                  Head; take the first   element(s)
                   1                                      1
                    <                Less Than; compare each element to
                     3               3
                      Ḣ              Head; take the comparison out of the list
                       ị             Index (1-indexed) into
                        ⁾rb          "rb"
                           ṭ         Tack the color character behind
                            j”,$     The coordinates joined by a comma
                            j        Join with separator
                             ”,      ","
                                  Y  Separate by newlines


3

JavaScript(ES6),64字节

这似乎与@Arnauld的要发布的内容完全不同:

f=(n=0,y=n>>3,c=y>2)=>y<6?[y+c*2,n%8+y%2+'rb'[+c]]+`
`+f(n+2):''

说明:

f=(n = 0,            //the numbered square on checkerboard
   y = n >> 3,       //current row (n / 8 rounded)
   c = y > 2         //false if red pieces, true if black
  ) => 
  y < 6 ?            //if y less than 6 
    [                //  using an array automatically adds the comma
     y + c * 2,      //  0 - 2 if red pieces, 5 - 7 if black
     n%8 + y%2 +     //  n%8 returns 0, 2, 4, or 6.
                     //  y%2 returns 0 or 1.
                     //  added, they return the appropriate position (0 - 7)
     'rb'[+c]        //  'r' if red, 'b' if black.  Plus sign coerces boolean to number.
    ]+`              //  new line
    `+
    f(n+2) :         //  recurse on n+2
    ''               //else return an empty string

片段:



3

APL(Dyalog)45 44字节*

-1感谢ngn。

Niladic函数假定基于0的索引(⎕IO←0)在许多系统上都是默认的。打印到STDOUT。

' 'R','⊃,/(8 ¯8↑¨⊂⍕¨⍸∘.=⍨2|⍳8),¨¨'rb'

在线尝试!

(),¨¨'rb' 在第一个项目组的每个后面附加“ r”,在第二个项目组的每个后面附加“ b”:

⍳8 零到八

2| 减半时的除法余数

∘.+⍨ 加表,其自身在两个轴上

 真实价值指标

⍕¨ 格式化每个(转换为具有d d每个d数字的模式的字符串)

 封闭(以便我们可以将其重复用于每个…)

8 ¯8↑¨ 拿前九和后九

现在我们有两个d d字符串列表

,/ 减少分类(将两个列表合并)

 披露(因为减少的排名从1降低到0)

' '⎕R',' PCRE [R E放置空间用逗号

 混合(将所有列表合并到一个矩阵中)


*在Dyalog Classic中,计⎕U2378


~2|∘.+⍨⍳8可能是∘.=⍨2|⍳8
ngn

不应该输出x = 3和x = 4的行
ngn

@ngn2⍴⊂'Thanks'
亚当

2

泡泡糖,59个字节

00000000: 15ca b101 0030 0400 c1de 2c0a 2462 1f23  .....0....,.$b.#
00000010: d8bf 886f ae3a 531b 310d b8f0 465c 1d0e  ...o.:S.1...F\..
00000020: 24d4 48ec 5b02 2eec 4bf5 5e0e 2454 cb53  $.H.[...K.^.$T.S
00000030: 8380 0baf a5d4 e140 42f5 07              .......@B..

在线尝试!


这是十六进制转储,对吧?
斯坦·斯特鲁姆

@StanStrum是的,这是实际来源的十六进制转储。通过使用hexdump,不会丢失所有无法打印的内容。实际来源并没有为IMO添加任何内容。
ovs

好吧,我只是想知道。谢谢
Stan Strum

2

Pyth37 36 35字节

isaacg不会感到骄傲

V+U3}5 7FG4p++N\,+yG?!%N2Z1?<N5\r\b

说明:

V+U3}5 7            For in the array [0, 1, 2, 5, 6, 7] as N
 FG4                 For in the array [0, 1, 2, 3] as G
  p                   Print without newline:
   ++N\,+yG?!%N2Z1     N, (2 * G) + 1 if N is even, else 0
  ?<N5\r\b            Output with newline "r" if N < 5 else "b"

这使用了我减少了一点的简单模式。如下:

如果X坐标是偶数,则使用偶数0, 2, 4, 6。其他,1, 3, 5, 7用于Y

如果X坐标小于5,则颜色(rb)为r。否则,它是b

在线尝试!

编辑:隔夜在3个不同答案上获得+40代表w00t



1

Javascript(89位元组):

for(x=y=0,r="r";x<7|y<8;console.log(x+","+y+r),y+=2){if(y>7)y=++x%2;if(x==3){x+=2;r="b"}}

可读性:

for(var x = y = 0, red = true; x < 7 || y < 8; y += 2) {
    if(y > 7) { //new row
        x++;
        y = x % 2;
    }
    if(x == 3) { //new color
        x += 2;
        red = false;
    }
    console.log(x + "," + y + (red ? "r" : "b") );
}

在线尝试!


4
请注意,不建议在发布挑战后立即回答您自己的挑战。
Arnauld

好。我应该将其取下并在以后发布吗?
贾斯汀

好的。感谢您的单挑
贾斯汀

这听起来可能很愚蠢,但如何删除移动设备上的信息?
贾斯汀

@Justin您无法在移动设备上删除帖子。这使许多人感到烦恼。
小麦巫师

1

果冻,27 个字节

8Ḷµḟ3,4pµSḂ$Ðḟj€”,ż⁾rbx12¤Y

完整的程序,可打印所需的输出。

在线尝试!

怎么样

8Ḷµḟ3,4p⁸SḂ$Ðḟj€”,ż⁾rbx12¤Y - Link: no arguments
8                           - literal eight
 Ḷ                          - lowered range = [0,1,2,3,4,5,6,7]
  µ                         - new monadic chain
    3,4                     - literal list = [3,4]
   ḟ                        - filter discard = [0,1,2,5,6,7]
        ⁸                   - chain's left argument = [0,1,2,3,4,5,6,7]
       p                    - Cartesian product = [[0,0],[0,1],...,[2,7],[5,0],...,[7,6],[7,7]]
            Ðḟ              - filter discard if:
           $                -   last two links as a monad:
         S                  -     sum
          Ḃ                 -     modulo by 2
                ”,          - literal comma character
              j€            - join €ach pair with a comma = [0,',',0],[0,',',2],...,[2,',',6],[5,',',1],...,[7,',',5],[7,',',7]]
                         ¤  - nilad followed by links as a nilad:
                   ⁾rb      - literal list = ['r','b']
                       12   - literal twelve
                      x     - repeat = ['r','r','r','r','r','r','r','r','r','r','r','r','b','b','b','b','b','b','b','b','b','b','b','b']
                  ż         - zip together = [[[0,',',0],'r'],[[0,',',2],'r'],...,[[2,',',6],'r'],[[5,',',1],'b'],...,[[7,',',5],'b'],[[7,',',7],'b']]
                          Y - join with newlines = [[0,',',0],'r','\n',[0,',',2],'r','\n',...,'\n',[2,',',6],'r','\n',[5,',',1],'b','\n',...,'\n',[7,',',5],'b','\n',[7,',',7],'b']
                            - implicit print (smashes the list of lists and characters
                            -                 together and prints the digits)


1

PowerShell,63字节

0..2+5..7|%{$i=$_;0,2,4,6|%{"$i,$($_+$i%2)"+('r','b')[$i-ge5]}}

在线尝试!

循环遍历0,1,2,5,6,7,每次迭代设置$i为当前数字。然后循环0,2,4,6。每个内环,我们构建了一个字符串开始$i,,然后与我们的内部循环的当前号码加是否串联$i为偶数或奇数(这会让我们0,2,4,6一次,1,3,5,7其他时间),然后,用级联rED或b缺乏基于是否$i-greater超-或- e等于5。这些字符串都留在管道上Write-Output,程序完成时隐式提供了免费的换行符。


1

J48 44 40 37 31字节

(}:"1":$.|:8$#:162 69),.12#'rb'

在线尝试!

怎么运行的

           8$#:162 69    first 2 columns in binary, take 8 of them
         |:              transpose
       $.                format as a sparse array, kind of looks like the goal
     ":                 "to text"
 }:"1                    delete the last column
       ,.12#'rb'         append 12 rs followed by 12 bs as the last column

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.