Costruisci una scacchiera


20

Per questa sfida stamperai le coordinate e il colore di ogni pezzo all'inizio di una partita a dama.

Immettere xey (virgola separata) per ogni quadrato (indicizzato 0-7) su una scacchiera, seguito da una "r" o "b" (per rosso o nero) in cui la parte superiore della scacchiera (più vicina a y = 0 ) è rosso e il fondo è nero. sono necessarie nuove linee tra i pezzi e non sono necessari spazi.

Si tratta di quindi le risposte sono classificate in byte con meno byte migliori.

Le nuove righe finali sono consentite ma non necessarie e l'ordine deve essere esattamente quello riportato di seguito.

Uscita desiderata:

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
C'è un motivo particolare che salti x=3e x=4?
HyperNeutrino,

1
@HyperNeutrino perché una scacchiera ha solo le 3 file superiori e inferiori riempite (all'inizio del gioco)
Giustino

3
Quindi questa è fondamentalmente la posizione di partenza di Dama, alias Draft inglese. È corretto?
Arnauld,

2
Benvenuto in PPCG.SE! Una caratteristica di questo sito che ad alcuni di noi piace usare è la sandbox . Non è necessario utilizzarlo, ma è un canale utile attraverso il quale ottenere feedback su eventuali nuove idee di sfida che hai, senza dover passare attraverso l'intera miseria di downvote / closevote.
Trauma digitale,

1
Le coordinate possono essere separate da un delimitatore diverso da una nuova riga? Ie 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,

Risposte:


8

05AB1E , 26 byte

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

Provalo online!

Spiegazione

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

Mi sento come se [0,1,2,5,6,7]potesse essere spinto in meno byte ... ma tutto ciò a cui riuscivo a pensare era 7Ý34SKquindi credo di no.
Magic Octopus Urn,

7

JavaScript (ES6), 66 byte

Include una nuova riga finale.

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

dimostrazione





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

Porto da @JonathanFrech risposta C di , dopo di che ho giocato 5 byte da solo.

Provalo qui.

Spiegazione:

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

Gelatina , 35 byte

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

Provalo online!

Programma completo senza argomenti

Spiegazione

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

3

JavaScript (ES6), 64 byte

Questo sembra sufficientemente diverso da @ Arnauld's per giustificare la pubblicazione:

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

Spiegazione:

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

Frammento:



3

APL (Dyalog) , 45 44 byte *

-1 grazie a ngn.

Funzione niladica che assume l'indicizzazione basata su 0 ( ⎕IO←0) che è predefinita su molti sistemi. Stampa su STDOUT.

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

Provalo online!

(... ),¨¨'rb' aggiungi "r" a ciascuno dei primi gruppi di elementi e "b" a ciascuno dei secondi:

⍳8 da zero a otto

2| resto della divisione quando dimezzato

∘.+⍨ più tavolo con se stesso su entrambi gli assi

 indici di valori reali

⍕¨ formatta ciascuno (converte in stringhe con il modello in d dcui ognuno dè una cifra)

 allegare (in modo che possiamo riutilizzarlo per ogni ...)

8 ¯8↑¨ prendi i primi nove e gli ultimi nove

ora abbiamo due elenchi di d dstringhe

,/ riduzione della catenazione (combina le due liste)

 divulgare (perché la riduzione ha ridotto il grado da 1 a 0)

' '⎕R',' PCRE R spazi EPosizionare con virgole

 mix (tutte le liste in un'unica matrice)


* In Dyalog Classic, contando come ⎕U2378.


~2|∘.+⍨⍳8potrebbe essere∘.=⍨2|⍳8
ngn il

non dovresti generare righe x = 3 e 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..

Provalo online!


Questo è il hexdump, giusto?
Stan Strum,

@StanStrum Sì, questo è il dump esadecimale della fonte effettiva. Usando il hexdump non si perde nessun non stampabile. La fonte reale non aggiunge nulla alla risposta IMO.
Ovs,

Ok, mi stavo solo chiedendo. Grazie
Stan Strum

2

Pyth , 37 36 35 byte

isaacg non sarebbe orgoglioso

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

Spiegazione:

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"

Questo utilizza un modello semplice che ho ridotto un po '. Come segue:

Se la X coord è pari, usa i numeri pari 0, 2, 4, 6. Altrimenti, 1, 3, 5, 7per Y.

Se la X coord è inferiore a 5, il colore ( ro b) è r. Altrimenti lo èb .

Provalo online!

modifica : durante la notte ha ottenuto +40 ripetizioni su 3 risposte diverse w00t



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

Leggibile:

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

Provalo online!


4
Si prega di notare che è sconsigliato rispondere alla propria sfida subito dopo averla pubblicata.
Arnauld,

Ok. Devo smontarlo e possibilmente postare più tardi?
Giustino,

Ok andrà bene. Grazie per il testa a testa
Giustino,

Potrebbe sembrare stupido, ma come posso eliminare un post sul cellulare?
Giustino,

@Justin Non puoi eliminare post sul cellulare. È un fastidio per molti.
Wheat Wizard

1

Jelly , 27 byte

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

Un programma completo che stampa l'output richiesto.

Provalo online!

Come

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

Rubino , 63 60 byte

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

La magia della maschera di bit salva il byte.

Provalo online!


1

PowerShell , 63 byte

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

Provalo online!

Passa 0,1,2,5,6,7e ogni iterazione si imposta $isul numero corrente. Quindi si avvolge 0,2,4,6. Ogni ciclo interno, costruiamo una stringa che inizia con $i,poi concatenata con il numero corrente del nostro ciclo interno più se $isia pari o dispari (che ci fa 0,2,4,6una volta e 1,3,5,7l'altra volta), quindi concatenati con red o in bbase al fatto che $isia più -greater o -oppure- equal a 5. Queste stringhe sono tutte lasciate in cantiere e l'implicito Write-Outputal completamento del programma ci dà nuove linee gratis.


1

J , 48 44 40 37 31 byte

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

Provalo online!

Come funziona

           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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.