Buat kotak-kotak

20

Untuk tantangan ini, Anda akan mencetak koordinat dan warna masing-masing bagian di awal permainan catur.

Masukkan x dan y (dipisahkan koma) untuk setiap kotak (diindeks 0-7) pada kotak-kotak, diikuti oleh "r" atau "b" (untuk merah atau hitam) di mana bagian atas papan (lebih dekat ke y = 0 ) merah dan dasarnya hitam. baris baru antara potongan diperlukan dan tidak ada ruang yang diperlukan.

Ini adalah sehingga jawaban diberi skor dalam byte dengan lebih sedikit byte lebih baik.

Mengejar baris baru diperbolehkan tetapi tidak perlu dan urutannya harus persis seperti di bawah ini.

Output yang diinginkan:

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
Justin
sumber
3
Apakah ada alasan tertentu Anda melewatkan x=3dan x=4?
HyperNeutrino
1
@HyperNeutrino karena kotak-kotak hanya berisi 3 baris atas dan bawah (di awal permainan)
Justin
3
Jadi itu pada dasarnya posisi awal Checker, alias Konsep Bahasa Inggris. Apakah itu benar?
Arnauld
2
Selamat datang di PPCG.SE! Fitur situs ini yang sebagian dari kita suka gunakan adalah kotak pasir . Anda tidak harus menggunakannya, tetapi ini adalah saluran yang berguna untuk mendapatkan umpan balik tentang ide-ide tantangan baru yang Anda miliki, tanpa harus melalui seluruh kesengsaraan downvote / closevote.
Digital Trauma
1
Bisakah koordinat dipisahkan oleh pembatas selain baris baru? Yaitu 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?
Kevin Cruijssen

Jawaban:

8

05AB1E , 26 byte

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

Cobalah online!

Penjelasan

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
Emigna
sumber
Saya merasa seperti [0,1,2,5,6,7]bisa didorong dalam byte lebih sedikit ... tapi yang bisa saya pikirkan adalah 7Ý34SKsaya kira tidak.
Magic Gurita Guci
7

JavaScript (ES6), 66 byte

Termasuk baris baru yang tertinggal.

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

Demo

Arnauld
sumber
7

C (gcc) , 83 81 79 78 byte

  • Disimpan dua byte berkat Tahg ; bermain golf x/4+2*(x/12)untuk x/4+x/12*2.
  • Disimpan dua byte berkat Kevin Cruijssen ; bermain golf x%8*2%8untuk x*2%8.
  • Disimpan satu byte berkat 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);}

Cobalah online!

Jonathan Frech
sumber
2
Anda dapat melakukan x / 4 + x / 12 * 2 dan menyingkirkan ()
Tahg
x%8*2%8dapatx*2%8
Kevin Cruijssen
@ceilingcat Terima kasih.
Jonathan Frech
6

Python 2 , 74 73 67 byte

for i in 0,1,2,5,6,7:j=i%2;exec"print`i`+','+`j`+'rb'[i>4];j+=2;"*4

Cobalah online!

TFeld
sumber
in(...):-> in ...:.
Jonathan Frech
4

Java 8, 102 96 95 93 91 byte

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

Port dari @JonathanFrech jawaban C , setelah itu saya bermain golf 5 byte sendiri.

Coba di sini.

Penjelasan:

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
Kevin Cruijssen
sumber
4

Pesta , 59 byte

Bukan yang terpendek, tapi yang menyenangkan:

printf %s\\n {{0,2,6}\,{0,2,4,6}r,{1,5,7}\,{1,3,5,7}b}|sort

Cobalah online!

ბიმო
sumber
3

Jelly , 35 byte

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

Cobalah online!

Program penuh tanpa argumen

Penjelasan

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
HyperNeutrino
sumber
3

Java 8, 97 byte

o->{int i=0,g;for(;i<8;i+=i==2?3:1)for(g=i%2;g<8;g+=2)System.out.println(i+","+g+(i<5?"r":"b"));}
Roberto Graham
sumber
3

JavaScript (ES6), 64 byte

Ini tampaknya cukup berbeda dari @ Arnauld untuk menjamin posting:

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

Penjelasan:

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

Potongan:

Rick Hitchcock
sumber
3

Python 2 , 63 byte

x=0;exec"print`x/8+x/24*2`+','+`x%8+x/8%2`+'rb'[x/24];x+=2;"*24

Cobalah online!

Lynn
sumber
3

APL (Dyalog) , 45 44 byte *

-1 terima kasih kepada ngn.

Fungsi Niladic yang mengasumsikan pengindeksan berbasis 0 ( ⎕IO←0) yang merupakan default pada banyak sistem. Mencetak ke STDOUT.

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

Cobalah online!

(... ),¨¨'rb' tambahkan "r" ke masing-masing kelompok item pertama dan "b" untuk masing-masing item:

⍳8 nol hingga delapan

2| divisi tersisa ketika dibelah dua

∘.+⍨ ditambah meja dengan sendirinya di sepanjang kedua sumbu

 indeks nilai sebenarnya

⍕¨ format masing-masing (dikonversi ke string dengan pola di d dmana masing d- masing digit)

 melampirkan (sehingga kami dapat menggunakannya kembali untuk masing-masing ...)

8 ¯8↑¨ ambil sembilan pertama dan sembilan terakhir

sekarang kami memiliki dua daftar d dstring

,/ pengurangan catenation (menggabungkan dua daftar)

 mengungkapkan (karena pengurangan mengurangi peringkat dari 1 menjadi 0)

' '⎕R',' PCRE R eplace spasi dengan koma

 campur (semua daftar menjadi satu matriks)


* Dalam Dyalog Classic, hitung sebagai ⎕U2378.

Adm
sumber
~2|∘.+⍨⍳8bisa∘.=⍨2|⍳8
ngn
Anda seharusnya tidak menghasilkan baris x = 3 dan x = 4
ngn
@ngn2⍴⊂'Thanks'
Adám
2

Bubblegum , 59 byte

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

Cobalah online!

ovs
sumber
Ini hexdump, kan?
Stan Strum
@StanStrum Ya ini adalah hexdump dari sumber yang sebenarnya. Dengan menggunakan hexdump, tidak ada masalah yang hilang. Sumber aktual tidak menambahkan apa pun ke jawaban IMO.
Ovs
Oke, saya hanya ingin tahu. Terima kasih
Stan Strum
2

Pyth , 37 36 35 byte

isaacg tidak akan bangga

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

Penjelasan:

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"

Ini menggunakan pola sederhana yang saya kurangi sedikit. Sebagai berikut:

Jika Xkoordinatnya genap, gunakan angka genap 0, 2, 4, 6. Lain, 1, 3, 5, 7untuk Y.

Jika Xkoordinat kurang dari 5, warna ( ratau b) adalah r. Lain lagi b.

Cobalah online!

sunting : semalam mendapat +40 rep pada 3 jawaban berbeda w00t

Stan Strum
sumber
1

Javascript (89 byte):

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"}}

Dapat dibaca:

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

Cobalah online!

Justin
sumber
4
Harap dicatat bahwa tidak disarankan untuk menjawab tantangan Anda sendiri hanya setelah mempostingnya.
Arnauld
Baik. Haruskah saya mencatatnya dan mungkin mengirimnya nanti?
Justin
OK akan ku lakukan. Terima kasih atas perhatiannya
Justin
Ini mungkin terdengar bodoh, tetapi bagaimana cara saya menghapus posting di ponsel?
Justin
@Justin Anda tidak dapat menghapus posting di ponsel. Ini menjengkelkan bagi banyak orang.
Wheat Wizard
1

Jelly , 27 byte

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

Program lengkap yang mencetak output yang diperlukan.

Cobalah online!

Bagaimana

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)
Jonathan Allan
sumber
1

Ruby , 63 60 byte

[*0..11,*20..31].map{|x|puts [x/4,2*x%8+x[2]]*?,+"rb"[x[4]]}

Bitmask magic menyimpan byte.

Cobalah online!

GB
sumber
1

PowerShell , 63 byte

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

Cobalah online!

Loop berulang 0,1,2,5,6,7dan setiap iterasi ditetapkan $ike nomor saat ini. Kemudian lewati 0,2,4,6. Setiap loop dalam, kita membangun string dimulai dengan $i,kemudian digabungkan dengan jumlah saat loop batin kita ditambah apakah $ibahkan atau ganjil (yang membuat kita 0,2,4,6satu waktu dan 1,3,5,7waktu lainnya), kemudian disambung dengan baik red atau bkurangnya berdasarkan pada apakah $iadalah -greater-dari -atau- equal untuk 5. Semua string itu ada di dalam pipa dan yang tersirat Write-Outputpada penyelesaian program memberi kita baris baru secara gratis.

AdmBorkBork
sumber
1

J , 48 44 40 37 31 byte

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

Cobalah online!

Bagaimana itu bekerja

           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
FrownyFrog
sumber
1

C # (.NET Core) , 96 byte

()=>{for(int i=0;i<24;)System.Console.Write($"{i/4+i/12*2},{i*2%8+i/4%2}{(i++>11?"b":"r")}\n");}

Cobalah online!

Intinya hanya port ke C # dari jawaban @ JonathanFrech . Saya tidak bisa menemukan cara yang lebih baik dalam melakukan matematika.

Ayb4btu
sumber