Dama Tahtası Oluşturun


20

Bu meydan okuma için bir dama oyununun başlangıcında her parçanın koordinatlarını ve rengini yazdıracaksınız.

Dama tahtasındaki her kare için (0-7 ile endekslenmiş) x ve y (virgülle ayrılmış) ve ardından tahtanın üst kısmının (y = 0'a yakın) bir "r" veya "b" (kırmızı veya siyah için) girin ) kırmızı ve alt kısmı siyah. parçalar arasında yeni satırlar ve boşluk gerekmez.

Bu yani cevaplar daha az bayt daha iyi ile bayt olarak puanlanır.

Sondaki satırsonlarına izin verilir, ancak gerekli değildir ve sipariş tam olarak aşağıda belirtilenlere uygun olmalıdır.

Istenilen çıktı:

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
Eğer atlamak belirli bir nedeni var mı x=3ve x=4?
HyperNeutrino

1
@HyperNeutrino çünkü bir dama sadece üst ve alt 3 satırları dolu (oyunun başında)
Justin

3
Yani bu , Checkers'ın (yani İngilizce Taslaklar) başlangıç ​​pozisyonudur . Bu doğru mu?
Arnauld

2
PPCG.SE'ye hoş geldiniz! Bu sitenin bazılarımızın kullanmayı sevdiği bir özellik sanal alan . Sen yok olması kullanmak için, ama bu bütün downvote / closevote sefalet içinden gitmek zorunda kalmadan, sahip herhangi bir yeni meydan fikirler hakkında geri bildirim almak için kullanışlı bir araç kanalıdır.
Dijital Travma

1
Koordinatlar, yeni satır dışındaki bir sınırlayıcıyla ayrılabilir mi? Yani 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

Yanıtlar:


8

05AB1E , 26 bayt

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

Çevrimiçi deneyin!

açıklama

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

Daha [0,1,2,5,6,7]az bayt içinde itilebilir gibi hissediyorum ... ama aklıma gelen tek şey sanmıyorum 7Ý34SK.
Sihirli Ahtapot Urn

7

JavaScript (ES6), 66 bayt

Sondaki satırsonu içerir.

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

gösteri





4

Java 8, 102 96 95 93 91 bayt

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 @JonathanFrech'in C cevabından , sonra 5 bayt kendim golf.

Burada deneyin.

Açıklama:

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

Jöle , 35 bayt

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

Çevrimiçi deneyin!

Tartışma almayan tam program

açıklama

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

Java 8, 97 bayt

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

3

JavaScript (ES6), 64 bayt

Bu, @ Arnauld'un gönderilmesini gerektirecek kadar farklı görünüyor:

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

Açıklama:

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

Pasaj:



3

APL (Dyalog) , 45 44 bayt *

-1 sayesinde ngn.

Birçok sistemde varsayılan 0 tabanlı indeksleme ( ⎕IO←0) alan niladik işlev . STDOUT'a yazdırır.

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

Çevrimiçi deneyin!

(),¨¨'rb' İlk öğe grubunun her birine "r" ve ikincisinin her birine "b" ekleyin:

⍳8 sıfırdan sekize

2| yarıya bölündükten sonra kalan bölüm

∘.+⍨ artı her iki eksen boyunca üzerinde bulunan tablo

 gerçek değer endeksleri

⍕¨ her birini biçimlendir ( d dher birinin drakam olduğu desenle dizelere dönüştürür )

 içine alın (böylece her biri için tekrar kullanabiliriz…)

8 ¯8↑¨ ilk dokuzu ve son dokuzu al

şimdi iki listemiz var d d dize listemiz var

,/ katenasyon azaltma (iki listeyi birleştirin)

 ifşa et (çünkü azalma rütbeyi 1'den 0'a düşürdüğü için)

' '⎕R',' PCRE R boşlukları virgülle değiştirir

 mix (tüm listeler tek bir matriste)


* Olarak Dyalog Klasik, sayım olarak ⎕U2378.


~2|∘.+⍨⍳8olabilir∘.=⍨2|⍳8
ngn

Eğer olmamalı çıkış satır x = 3 ve x = 4
ngn

@ngn2⍴⊂'Thanks'
Adám

2

Sakız , 59 bayt

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

Çevrimiçi deneyin!


Bu onaltılık, değil mi?
Stan Strum

@StanStrum Evet, bu gerçek kaynağın onaltılık dökümüdür. Hexdump kullanarak yazdırılamaz hiçbir kayıp olmaz. Gerçek kaynak, yanıt IMO'suna hiçbir şey eklemez.
Ovs

Tamam, sadece merak ediyordum. Teşekkürler
Stan Strum

2

Pyth , 37 36 35 bayt

isaacg gurur duymaz

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

Açıklama:

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"

Biraz kestiğim basit bir desen kullanıyor. Aşağıdaki gibi:

Eğer Xcoord bile, hatta numaralarını kullanabilirsiniz 0, 2, 4, 6. Başka, 1, 3, 5, 7için Y.

Eğer Xcoord 5'in altındaki olup, renk ( rveya b) 'dir r. Başka, öyle b.

Çevrimiçi deneyin!

Düzenle : gecede 3 farklı cevaplar w00t +40 temsilcisi var



1

Javascript (89 bayt):

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

Okunabilir:

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

Çevrimiçi deneyin!


4
Lütfen, gönderdikten hemen sonra kendi sorununuzu yanıtlamanın cesaretini kırdığını unutmayın.
Arnauld

Tamam. Onu indirip muhtemelen daha sonra yayınlamalıyım?
Justin

Tamam yapacak. Head up up için teşekkürler
Justin

Bu aptalca gelebilir, ancak mobil cihazdaki bir yayını nasıl silebilirim?
Justin

@Justin Mobil cihazdaki yayınları silemezsiniz. Birçok insan için bir sıkıntıdır.
Buğday Büyücüsü

1

Jöle , 27 bayt

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

Gerekli çıktıyı basan tam bir program.

Çevrimiçi deneyin!

Nasıl

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 bayt

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

Çevrimiçi deneyin!

Döngüler 0,1,2,5,6,7ve her yineleme $igeçerli sayıya ayarlanır . Sonra dönüyor 0,2,4,6. Her bir iç döngü biz ile başlayan bir dizi oluşturmak $i,ardından artı olup içsel döngüsünün geçerli numarası ile birleştirilmiş $itek ya da çift (bize alır hangi 0,2,4,6bir zaman ve 1,3,5,7başka bir zaman), daha sonra her iki ile birleştirilmiş red veya bolmadığına göre yoksundur $iolan -greater-daha -veya- enitelikli 5. Bu dizelerin tamamı boru hattında bırakılır ve Write-Outputprogram tamamlandığında örtük olarak bize ücretsiz yeni satırlar verilir.


1

J , 48 44 40 37 31 bayt

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

Çevrimiçi deneyin!

Nasıl çalışır

           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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.