Construire un damier


20

Pour ce défi, vous imprimerez les coordonnées et la couleur de chaque pièce au début d'une partie de dames.

Entrez les x et y (virgule séparée) pour chaque carré (indexé 0-7) sur un damier, suivi d'un "r" ou "b" (pour le rouge ou le noir) où le haut du tableau (plus proche de y = 0 ) est rouge et le fond est noir. des retours à la ligne entre les pièces sont nécessaires et aucun espace n'est nécessaire.

Il s'agit de donc les réponses sont notées en octets avec moins d'octets mieux.

Les retours à la ligne sont autorisés mais pas nécessaires et la commande doit être exactement celle ci-dessous.

Sortie désirée:

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
Y a-t-il une raison particulière pour laquelle vous sautez x=3et x=4?
HyperNeutrino

1
@HyperNeutrino car un damier n'a que les 3 rangées du haut et du bas remplies (au début du jeu)
Justin

3
C'est donc fondamentalement la position de départ de Checkers, alias English Drafts. Est-ce exact?
Arnauld

2
Bienvenue sur PPCG.SE! Une caractéristique de ce site que certains d'entre nous aiment utiliser est le bac à sable . Vous n'êtes pas obligé de l'utiliser, mais c'est un canal utile pour obtenir des commentaires sur toutes les nouvelles idées de défis que vous avez, sans avoir à passer par toute la misère downvote / closevote.
Digital Trauma

1
Les coordonnées peuvent-elles être séparées par un délimiteur autre qu'une nouvelle ligne? C'est à dire 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

Réponses:


8

05AB1E , 26 octets

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

Essayez-le en ligne!

Explication

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

J'ai l'impression qu'on [0,1,2,5,6,7]pourrait pousser en moins d'octets ... mais tout ce à quoi je pouvais penser était 7Ý34SKdonc je suppose que non.
Magic Octopus Urn

7

JavaScript (ES6), 66 octets

Comprend une nouvelle ligne de fin.

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

Démo



7

C (gcc) , 83 81 79 78 octets

  • Enregistré deux octets grâce à Tahg ; jouer au golfx/4+2*(x/12) aux/4+x/12*2 .
  • Enregistré deux octets grâce à Kevin Cruijssen ; jouer au golfx%8*2%8 aux*2%8 .
  • Enregistré un octet grâce au plafond .
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);}

Essayez-le en ligne!


2
Vous pouvez faire x / 4 + x / 12 * 2 et vous débarrasser du ()
Tahg

x%8*2%8peut êtrex*2%8
Kevin Cruijssen

@ceilingcat Merci.
Jonathan Frech


4

Java 8, 102 96 95 93 91 octets

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 de la réponse C de @JonathanFrech , après quoi j'ai joué 5 octets moi-même.

Essayez-le ici.

Explication:

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

Gelée , 35 octets

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

Essayez-le en ligne!

Programme complet sans argument

Explication

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 octets

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 octets

Cela semble suffisamment différent de celui de @ Arnauld pour justifier la publication:

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

Explication:

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

Fragment:



3

APL (Dyalog) , 45 44 octets *

-1 grâce à ngn.

Fonction niladique qui suppose une indexation basée sur 0 ( ⎕IO←0) qui est par défaut sur de nombreux systèmes. Imprime vers STDOUT.

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

Essayez-le en ligne!

(),¨¨'rb' Ajoutez "r" à chacun des premiers éléments et "b" à chacun des seconds:

⍳8 de zéro à huit

2| reste de division en deux

∘.+⍨ plus une table avec elle-même sur les deux axes

 indices de valeurs vraies

⍕¨ formater chacun (convertit en chaînes avec le motif d doù chacun dest un chiffre)

 joindre (afin que nous puissions le réutiliser pour chacun…)

8 ¯8↑¨ prendre les neuf premiers et les neuf derniers

nous avons maintenant deux listes de d dchaînes

,/ réduction de caténation (combiner les deux listes)

 divulguer (car la réduction a réduit le rang de 1 à 0)

' '⎕R',' PCRE R eplace des espaces avec des virgules

 mélanger (toutes les listes dans une seule matrice)


* Dans Dyalog Classic, compter comme ⎕U2378.


~2|∘.+⍨⍳8pourrait être∘.=⍨2|⍳8
ngn

vous ne devriez pas sortir les lignes x = 3 et x = 4
ngn

@ngn2⍴⊂'Thanks'
Adám

2

Bubblegum , 59 octets

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

Essayez-le en ligne!


Ceci est le hexdump, non?
Stan Strum

@StanStrum Oui, c'est le vidage hexadécimal de la source réelle. En utilisant l'hexdump, aucun imprimable ne se perd. La source réelle n'ajoute rien à la réponse OMI.
ovs

D'accord, je me demandais juste. Merci
Stan Strum

2

Pyth , 37 36 35 octets

isaacg ne serait pas fier

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

Explication:

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"

Cela utilise un modèle simple que j'ai coupé un peu. Comme suit:

Si la Xcoordonnée est paire, utilisez les nombres pairs 0, 2, 4, 6. Sinon, 1, 3, 5, 7pour Y.

Si la Xcoordonnée est inférieure à 5, la couleur ( rou b) l'est r. Sinon, ça l'est b.

Essayez-le en ligne!

edit : du jour au lendemain a obtenu +40 rep sur 3 réponses différentes w00t



1

Javascript (89 octets):

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

Lisible:

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

Essayez-le en ligne!


4
Veuillez noter qu'il est déconseillé de répondre à votre propre défi juste après l'avoir publié.
Arnauld

D'accord. Dois-je le retirer et éventuellement poster plus tard?
Justin

OK je le ferai. Merci pour l'avertissement
Justin

Cela peut sembler stupide, mais comment supprimer un message sur mobile?
Justin

@Justin Vous ne pouvez pas supprimer de messages sur mobile. C'est une gêne pour beaucoup.
Wheat Wizard

1

Gelée , 27 octets

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

Un programme complet qui imprime la sortie requise.

Essayez-le en ligne!

Comment

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 octets

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

Essayez-le en ligne!

Boucles 0,1,2,5,6,7et chaque itération définit $ile nombre actuel. Boucle ensuite 0,2,4,6. Chaque boucle interne, nous construisons une chaîne commençant par $i,puis concaténée avec le numéro actuel de notre boucle interne plus si$i est paire ou impaire (ce qui nous obtient 0,2,4,6une fois et 1,3,5,7l'autre), puis concaténée avec soit red soit bmanque selon qu'elle $iest -greater-than -ou- equal 5. Ces chaînes sont toutes laissées sur le pipeline et l'implicite Write-Outputà la fin du programme nous donne gratuitement de nouvelles lignes.


1

J , 48 44 40 37 31 octets

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

Essayez-le en ligne!

Comment ça fonctionne

           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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.