Baue ein Schachbrett


20

Für diese Herausforderung drucken Sie zu Beginn eines Dame-Spiels die Koordinaten und die Farbe der einzelnen Teile.

Geben Sie x und y (durch Kommas getrennt) für jedes Quadrat (mit einem Index von 0 bis 7) auf einem Schachbrett ein, gefolgt von einem "r" oder "b" (für Rot oder Schwarz), wobei der obere Rand des Bretts (näher an y = 0) liegt ) ist rot und der Boden ist schwarz. Zeilenumbrüche zwischen den Teilen sind erforderlich und es sind keine Leerzeichen erforderlich.

Dies ist daher werden Antworten in Bytes bewertet, wobei weniger Bytes besser sind.

Nachgestellte Zeilenumbrüche sind zulässig, aber nicht erforderlich, und die Reihenfolge muss genau der unten angegebenen entsprechen.

Gewünschte Ausgabe:

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
Gibt es einen bestimmten Grund, warum Sie überspringen x=3und x=4?
HyperNeutrino

1
@HyperNeutrino, weil ein Schachbrett hat nur die oberen und unteren 3 Zeilen gefüllt (zu Beginn des Spiels)
Justin

3
Das ist also im Grunde die Startposition von Checkers, auch bekannt als English Drafts. Ist das korrekt?
Arnauld

2
Willkommen bei PPCG.SE! Ein Feature dieser Site, das einige von uns gerne benutzen, ist die Sandbox . Sie müssen nicht haben , um es zu verwenden, aber es ist ein nützlicher Kanal , durch das Feedback über neue Herausforderung Ideen , die Sie erhalten haben, ohne das ganze downvote / closevote Elend zu gehen.
Digital Trauma

1
Können die Koordinaten durch ein anderes Trennzeichen als eine neue Zeile getrennt werden? Also 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

Antworten:


8

05AB1E , 26 Bytes

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

Probieren Sie es online!

Erläuterung

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

Ich fühle mich wie [0,1,2,5,6,7]könnte in weniger Bytes geschoben werden ... aber alles, was ich denken konnte, war, 7Ý34SKalso denke ich nicht.
Magic Octopus Urn

7

JavaScript (ES6), 66 Byte

Beinhaltet einen nachgestellten Zeilenumbruch.

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

Demo





4

Java 8, 102 96 95 93 91 Bytes

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 von @JonathanFrech 's C - Antwort , nach der ich selbst 5 Bytes golfen habe.

Probieren Sie es hier aus.

Erläuterung:

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

Gelee , 35 Bytes

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

Probieren Sie es online!

Volles Programm ohne Argumente

Erläuterung

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 Bytes

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 Byte

Dies scheint sich ausreichend von @ Arnauld zu unterscheiden, um die Veröffentlichung zu rechtfertigen:

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

Erläuterung:

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

Snippet:



3

APL (Dyalog) , 45 44 Bytes *

-1 danke an ngn.

Niladic-Funktion, die 0-basierte Indizierung ( ⎕IO←0) voraussetzt, die auf vielen Systemen standardmäßig verwendet wird. Druckt nach STDOUT.

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

Probieren Sie es online!

(... ),¨¨'rb' füge "r" an jede der ersten Gruppe von Elementen und "b" an jede der zweiten an:

⍳8 null bis acht

2| Teilungsrest, wenn halbiert

∘.+⍨ plus tisch mit sich auf beiden achsen

 Indizes der wahren Werte

⍕¨ Jedes Format (konvertiert in Zeichenfolgen mit dem Muster, d dbei dem jedes deine Ziffer ist)

 beifügen (damit wir es für jeden wiederverwenden können ...)

8 ¯8↑¨ nimm die ersten neun und die letzten neun

Jetzt haben wir zwei Listen von d dZeichenfolgen

,/ Verkettungsreduzierung (kombinieren Sie die beiden Listen)

 enthüllen (weil die Reduktion den Rang von 1 auf 0 reduziert hat)

' '⎕R',' PCRE R eplace Räume mit Komma

 mischen (die alle Listen in einer einzigen Matrix)


* In Dyalog Classic gilt als ⎕U2378.


~2|∘.+⍨⍳8sein könnte∘.=⍨2|⍳8
ngn

Sie sollten die Zeilen x = 3 und x = 4 nicht ausgeben
ngn

@ngn2⍴⊂'Thanks'
Adám

2

Bubblegum , 59 Bytes

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

Probieren Sie es online!


Das ist der Hexdump, oder?
Stan Strum

@StanStrum Ja, dies ist der Hexdump der eigentlichen Quelle. Durch die Verwendung des Hexdumps gehen keine Unprintables verloren. Die eigentliche Quelle fügt der Antwort IMO nichts hinzu.
OVS

Okay, ich habe mich nur gefragt. Vielen Dank
Stan Strum

2

Pyth , 37 36 35 Bytes

isaacg wäre nicht stolz

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

Erläuterung:

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"

Dabei wird ein einfaches Muster verwendet, das ich ein wenig reduziert habe. Wie folgt:

Wenn die XKoordinate gerade ist, verwenden Sie die geraden Zahlen 0, 2, 4, 6. Sonst 1, 3, 5, 7z Y.

Wenn die XKoordinate kleiner als 5 ist, ist die Farbe ( roder b) r. Sonst ist es b.

Probieren Sie es online!

edit : habe über nacht +40 rep auf 3 verschiedene antworten w00t



1

Javascript (89 Bytes):

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

Lesbar:

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

Probieren Sie es online!


4
Bitte beachten Sie, dass es nicht empfehlenswert ist, Ihre eigene Herausforderung direkt nach dem Posten zu beantworten.
Arnauld

Okay. Soll ich es ablegen und möglicherweise später posten?
Justin

OK mach ich. Vielen Dank für die Heads-up
Justin

Das hört sich vielleicht blöd an, aber wie lösche ich einen Beitrag auf dem Handy?
Justin

@Justin Du kannst keine Beiträge auf dem Handy löschen. Es ist ein Ärger für viele.
Weizen-Assistent

1

Gelee , 27 Bytes

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

Ein vollständiges Programm, das die gewünschte Ausgabe druckt.

Probieren Sie es online!

Wie

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 Byte

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

Probieren Sie es online!

Durchläuft eine Schleife 0,1,2,5,6,7und jede Iteration wird $iauf die aktuelle Nummer gesetzt. Dann geht es vorbei 0,2,4,6. Für jede innere Schleife erstellen wir eine Zeichenfolge, die mit $i,der aktuellen Nummer der inneren Schleife beginnt und mit der Angabe, ob sie $igerade oder ungerade ist (was uns 0,2,4,6ein und 1,3,5,7das andere Mal ergibt ), und mit der Angabe, ob sie größer roder kleiner ist, verknüpft wird -oder- zu qualifizieren . Diese Zeichenfolgen verbleiben alle in der Pipeline, und der implizite Zeitpunkt der Programmbeendigung gibt uns kostenlose Zeilenumbrüche.b$i-ge5Write-Output


1

J , 48 44 40 37 31 Bytes

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

Probieren Sie es online!

Wie es funktioniert

           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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.