Modèle d'échiquier

18

Entrée: un nombre positif, inférieur à 80, à partir de stdin ou comme argument de ligne de commande.

Sortie: Un motif d'échiquier carré, la taille du numéro d'entrée. Les champs sombres sont représentés par la lettre «X», les champs blancs par un espace. Le champ en haut à gauche doit être «X».

Un programme complet est requis.


Exemples:

Entrée : 1

Sortie :

X

Entrée : 8

Sortie :

X X X X 
 X X X X
X X X X 
 X X X X
X X X X 
 X X X X
X X X X 
 X X X X
steenslag
la source
1
Je cherchais un tag comme «léger» pour cela.
steenslag
1
Programme complet et complet, je suppose?
JB
@JB: Oui. Comment puis-je formuler cela? Ajouter 'à stdout' à la sortie requise?
steenslag
1
Dites simplement que vous voulez un programme complet. Vous pouvez également vouloir spécifier des arguments de ligne de commande, pour éviter toute confusion avec les arguments de fonction.
JB
Quand vous dites en haut à droite, voulez-vous dire en haut à gauche? Sinon, veuillez corriger l'exemple de sortie pour l'entrée 8.
Peter Taylor

Réponses:

5

Pyth, 13 caractères

Remarque: Pyth est beaucoup trop nouveau pour être admissible à gagner. Cependant, c'était un golf amusant et j'ai pensé le partager.

VQ<*QX*d2N\XQ

Essayez-le ici.

Comment ça fonctionne:

                       Q = eval(input())
VQ                     for N in range(Q):
  <         Q                                                        [:Q]
   *Q                                    (Q*                        )
     X*d2N\X                                assign_at(" "*2, N, "X")

Fondamentalement, cela utilise Xpour générer "X "ou " X"alternativement, puis répète cette chaîne Qfois et prend ses premiers Qcaractères. C'est répété plusieurs Qfois.

Comment fonctionne la fonction X(assign at)? Il prend la chaîne d'origine, " "dans ce cas, un emplacement d'affectation, Ndans ce cas, et un caractère de remplacement, "X"dans ce cas. Étant donné que les affectations de Pyth sont modulaires, cela remplace l'espace à l'emplacement N%2par un X, et renvoie la chaîne résultante, qui se trouve donc "X "sur les première, troisième, etc. lignes, et " X"sur les autres.

isaacg
la source
... mais APL ne l'est pas. Merci d'avoir heurté.
Je me
"Pyth est beaucoup trop nouveau pour être admissible à gagner" Je ne comprends pas cela et je l'accepte de nouveau.
steenslag
1
@steenslag Pour expliquer, il existe une faille standard selon laquelle les langues plus récentes que la question ne sont pas éligibles. Il s'agit d'empêcher les langues spécifiquement conçues pour réussir à un défi spécifique. Vous êtes libre de faire ce que vous voulez avec votre défi, bien sûr.
isaacg
11

Golfscript - 17 caractères

~:N,{"X "N*>N<n}%

Une analyse

~convertir l'entrée en un
:Nmagasin int dans la variable N
,{...}pour chaque valeur de [0 ... N-1]
"X "N*répéter "X" pour donner une chaîne de N * 2 caractères
>prendre la sous-chaîne à partir de l'index de boucle ...
N<... mettre fin à N caractères plus tard
nmettre une nouvelle ligne à la fin de chaque chaîne

grignoteur
la source
5

Perl, 41 40

for$i(1..$_){say substr" X"x$_,$i%2,$_}

Perl 5.10 ou version ultérieure, exécuté avec perl -nE 'code'( ncompté dans la taille du code)

Exemple de sortie:

$ perl -nE'for$i(1..$_){say substr" X"x 40,$i%2,$_}' <<<5
X X X
 X X
X X X
 X X
X X X
$ perl -nE'for$i(1..$_){say substr" X"x 40,$i%2,$_}' <<<8
X X X X
 X X X X
X X X X
 X X X X
X X X X
 X X X X
X X X X
 X X X X
JB
la source
Que fait le «x» dans «x 40»?
steenslag
2
@steenslag: xest l'opérateur de répétition de chaînes. 'a' x 3rendements 'aaa'.
JB
4

Python, 48 caractères

x,i=input(),0
exec'print(x*"X ")[i:i+x];i^=1;'*x
Nolen Royalty
la source
3

Python, 76 caractères

n=input()
p='X '*n
print n/2*(p[:n]+'\n'+p[1:n+1]+'\n'),
if n&1:print p[:n]
Keith Randall
la source
3

Scala - 141 95 caractères

var a=args(0).toInt
for(y<-1 to a;x<-1 to a)print((if((x+y)%2<1)"X"else" ")+("\n"*(x/a)take 1))

Utilisation: scala filename Noù n est votre entrée dans le programme.

Gareth
la source
3

APL (16)

En supposant ⎕IO=0(c'est-à-dire des tableaux indexés zéro, c'est un paramètre)

' X'[=/¨2⊤¨⍳2⍴⎕]

Explication:

  • ⍳2⍴⎕: lire un nombre N, et créer une matrice N × N contenant (0,0) à (N-1, N-1).
  • 2⊤¨: obtenir le bit le moins significatif de chaque nombre dans la matrice. (Nous avons donc maintenant (0,0), (0,1), (0,0) ... (1,0), (1,1), (1,0) ...)
  • =/¨: pour chaque paire, voyez si les deux nombres sont égaux. (Maintenant, nous avons 1 0 1 0 1 0 ...)
  • ' X'[... ]: mettez un espace pour chaque 0 et un X pour chaque 1.
marinus
la source
3

Rubis 45 42

(x=gets.to_i).times{|i|puts ("X "*x)[i,x]}

Démo: http://ideone.com/Mw25e

Cristian Lupascu
la source
(x=gets.to_i).timesenregistre trois caractères. Pourquoi le soudain regain d'intérêt pour cet ancien?
steenslag
@steenslag Merci! J'ai appliqué votre astuce. Je viens de voir cette question en haut de la liste et j'ai pensé publier une réponse pour épousseter mes compétences Ruby. Apparemment, je ne les ai pas assez dépoussiérés. :)
Cristian Lupascu
2

Python

48 caractères

EDIT: Un peu mal ... Il y a un espace supplémentaire à la fin ... mais ce n'est pas visible. Si vous changez l'espace en «O» (ou tout caractère non blanc), modifiez-le [i%2:n]en [i%2:n+i%2]. pour la version correcte.

n=input()
i=0;
while i<n:print('X '*n)[i%2:n];i+=1
st0le
la source
2

C ++ - 253 caractères obscurcis

#include <iostream.h>
int main(int i,char*c[]=0)
{
  char a=i,b=i>>8;i&32512?((i>>16&255)<a)?(cout<<b)?main((i^30720)+65536):0:(cout<<endl)?(((b=(i>>24)+1)<a)?main((i&2130706559)+((b&1)?16785408:16799744)):0):0:main((i>=2?atoi(1[c]):8)|22528);
}
Skizz
la source
1
J'adore tous les nombres magiques.
Joey Adams
2

JavaScript, 169

function b(w){var i=w,j=w,r='';while(i--){while(j--){if((i+j)%2)r+=' ';else r+='X'}j=w;r+="\n"}return r}do{n=parseInt(prompt('Number'))}while(isNaN(n)||n<1);alert(b(n));
zzzzBov
la source
Je suis sûr que vous pouvez convertir en nombre comme +'1'au lieu de parseInt('1'). Ne vous donnera pas un entier, mais je ne pense pas que ce soit un entier est important ici, n'est-ce pas?
Some Guy
2

k (26 caractères)

26 Pour la fonction nue:

{-1',/x#',x#'("X ";" X");}

Ou 7 autres pour prendre la contribution de stdin

{-1',/x#',x#'("X ";" X");}"I"$0:0
skeevey
la source
2

Bash: 60 caractères

yes X|fmt -w80|paste -d '' <(yes '
 ') -|head -$1|cut -c1-$1

Par exemple, la taille de la table est transmise en tant que paramètre de ligne de commande bash chesstable.sh 8.

homme au travail
la source
2

Java 10, fonction lambda, 92 87 84 octets

n->{for(int i=0;i<n*n;)System.out.print(((i%n+i/n)%2<1?"X":" ")+(++i%n<1?"\n":""));}

Essayez-le en ligne ici .

Merci à plafondcat pour avoir joué au golf 4 octets et à Kevin Cruijssen pour avoir joué au golf 3 autres.

Version non golfée:

n -> { // void lambda taking an int as argument
    for(int i = 0; i < n*n; ) // loop over the entire square
            System.out.print(((i%n + i/n) % 2 < 1 ? "X" : " ") // print an 'X' or a space depending on which line&column we're on
               + (++i % n < 1 ? "\n" : "")); // print a newline at the end of a line
}

Java 8, programme complet, 155 139 octets

interface M{static void main(String[]a){int i=0,n=new Byte(a[0]);for(;i<n*n;)System.out.print(((i%n+i/n)%2<1?"X":" ")+(++i%n<1?"\n":""));}}

Essayez-le en ligne ici .

Version non golfée:

interface M {
    static void main(String[] a) {
        int i = 0, // iterator variable for the loop
            n = new Byte(a[0]); // take the argument and convert it to an int
        for(; i < n*n; ) // loop over the entire square
            System.out.print( ((i%n + i/n) % 2 < 1 ? "X" : " ") // print an 'X' or a space depending on which line&column we're on
                             +(++i % n < 1 ? "\n" : "") ); // print a newline at the end of a line
        }
    }
}
OOBalance
la source
@ceilingcat Merci! J'ai réussi à raser un octet de plus et j'ai appliqué votre approche à mon programme complet également. 16 octets enregistrés là-bas.
OOBalance
Faire deux s+=est 2 octets plus court que ces parenthèses:n->{var s="";for(int i=0;i<n*n;s+=++i%n<1?"\n":"")s+=(i%n+i/n)%2<1?"X":" ";return s;}
Kevin Cruijssen
Ou une de plus d'octets (84 au total) en imprimant directement (avec la parenthèse à nouveau xD): n->{for(int i=0;i<n*n;)System.out.print(((i%n+i/n)%2<1?"X":" ")+(++i%n<1?"\n":""));}. Essayez-le en ligne.
Kevin Cruijssen
Suggérer à la "X ".charAt(i%n+i/n&1)place de((i%n+i/n)%2<1?"X":" ")
plafondcat
2

APL (Dyalog Extended) , 12 octets SBCS

Fonction de préfixe tacite anonyme. A besoin⎕IO←0 (indexation à base zéro).

'X '⊇⍨2|⍳+⍀⍳

Essayez-le en ligne!

ɩ ndices 0… n – 1

+⍀ plus un tableau avec cela horizontalement et verticalement:

ɩ ndices 0… n – 1

2| reste de division lorsqu'il est divisé par deux

'X '⊇⍨ utiliser cette matrice pour indexer dans la chaîne

Adam
la source
2

Scala, 68 octets

  def^(n:Int)=for(a<-1 to n)println(("x_"*n).substring(n%2+1,n+n%2+1))

ou

  def^(n:Int)=for(a<-1 to n)println(("x_"*n).substring(a%2+1).take(n))

Essayez-le en ligne!

Dr Y Wit
la source
2

Brainfuck, 140 octets

-[+[+<]>>+]>++++[<++++++++>-]<<<<<<,[->+>+>+<<<]>>[->[->.<[->>.>]<<<]<[<<<]>>>>>[-<+>]>[-<+>]<<[->>+<<]<<[-<+>]<[->+>>+<<<]++++++++++.[-]>>]
Oyarsa
la source
2

Javascript, 67 octets

for(j=n=readline()|0;j--;)console.log(' X'.repeat(n).substr(j%2,n))

Essayez-le en ligne

C, 83 octets

i,j;main(n){for(scanf("%d",&n);i++<n;puts(""))for(j=0;j<n;)putchar(i+j++&1?88:32);}

Essayez-le en ligne

C64 de base, 89 octets

1 INPUTN:FORI=1TON;FORJ=1TON:IFI+JAND1THENPRINT" ";:GOTO3
2 PRINT"X";
3 NEXT:PRINT"":NEXT

entrez la description de l'image ici

Johan du Toit
la source
Vous pouvez utiliser la on...go tocommande de manière conditionnelle, comme ON-(I+JAND1)GOTO3:?"X";:lorsqu'elle est nulle, elle passera à l'instruction suivante, dans ce cas, si (I + J AND 1) === 0elle imprime le X. Cela vous permet de regrouper plus d'instructions par ligne et d'économiser des octets.
Shaun Bebbers
1
C 81 octets
plafond du
2

Scala, 40 et 54

Le nombre de caractères est de 40 pour une fonction, 54 pour un programme complet.

La solution ne donnant qu'un corps de fonction est:

("X "*n)sliding n take n foreach println

Essayez-le en ligne

 

La solution donnant un programme complet est:

val n=readInt;("X "*n)sliding n take n foreach println

Vous pouvez l'exécuter à l'aide de la ligne de commande suivante.

scala -e 'val n=readInt;("X "*n)sliding n take n foreach println' <<< 8

où 8 est l'entrée.

jseteny
la source
1
Bienvenue à PP&CG et bonne première réponse. Il y a un joli site appelé Try It Online qui vous permet d'obtenir un nombre d'octets facile et de partager des exécutions. Vérifiez l'autre réponse de Scala pour en voir un exemple . Ce n'est pas obligatoire, juste agréable à avoir.
Veskah
Merci @Veskah pour la suggestion.
jseteny
Belle solution en changeant cela en fonction et en utilisant la carte, vous obtenez 34 caractères:("X "*n)sliding n take n map println
pme
@pme Merci pour la suggestion, mais il n'y a pas de sortie si je remplace foreach par map. Cependant, je le change en fonction comme vous l'avez suggéré.
jseteny
vous avez raison - désolé, la carte semble paresseuse; (.
pme
1

Python - 127 caractères

from sys import*
r=stdout.write
s=int(raw_input())
[[r((x+y+1)%2 and"x"or" ")for x in range(s)]and r("\n")for y in range(s)]

la source
1

C - 92 86

i,j;main(n){for(scanf("%d",&n);i<n;puts(""),i++)for(j=0;j<n;j++)putchar("X "[i+j&1]);}
Joey Adams
la source
83 octets
Johan du Toit
1

Q, 33

{$[1=x mod 2;x;x-1]cut(x*x)#"X "}
tmartin
la source
{(x;x-1-x mod 2)#"X "}pour 22 ... ah non, a le même bug que le vôtre - n'a pas 4 X sur les rangées impaires pour l'entrée 8.
streetster
1

Rubis 58

i=ARGV[0].to_i
1.upto(i*i){|n|print n%i==0?"\n":' x'[n%2]}
Phong Si
la source
1

PHP - 136 caractères (sans espace)

Permet l'entrée des fonctions x et y.

Prend également en charge les entrées impaires maintenant.

Si vous définissez la sortie pour qu'elle ait une hauteur de ligne de 0,65 em et que vous modifiez ▒█ et █ ° en □ ■ et ■ □, cela ressemble à un véritable échiquier (carré).

Code:

function gen_cb($x,$y)
{
$c=0;
$y*=2;
for($i=0;$i<$y;$i++){
for($j=0;$j<$x;$j++){
echo $c%2==0 ? "░█" : "█░";
}
echo "<br/>";
$c++;
}
}
gen_cb(7,7);

Production:

░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
Event_Horizon
la source
Cela fonctionne-t-il pour les planches avec un nombre impair de carrés par côté?
Gareth
@Gareth Maintenant c'est le cas
Event_Horizon
1

PHP, 87

for($x=0;$x<$m=$argv[1];$x++){echo"\n";for($y=0;$y<$m;$y++)echo($y^($x%2))%2?' ':'X';}
Dan Lugg
la source
1

CJam, 18 octets

J'aurais probablement pu porter la réponse GolfScript, mais voici une approche différente. (Et CJam n'est pas éligible pour gagner de toute façon.)

l~,_f{f{+2%S'X?}N}

Testez-le ici.

L'idée est d'itérer sur la grille 2D avec des indices x et y sur la pile, en utilisant l' f{f{...}}astuce . Étant donné x et y, nous pouvons simplement déterminer le noir et blanc as (x+y)%2et l'utiliser pour choisir entre le caractère Xet une chaîne contenant un espace.

Martin Ender
la source
1

J, 21 caractères

J manquait aussi.

   ([:u:32+56*=/~@$&1 0) 5
X X X
 X X 
X X X
 X X 
X X X

Précédent, 22 caractères:

Codes de caractères du modèle mod2 de row #+ column #:

   ([:u:88-56*2&|@+/~@i.) 5
randomra
la source
-2 octets:([:{&' X'=/~@$&1 0)
Bolce Bussiere
16 octets $"1[:|.&'X '"+i. Essayez-le en ligne!
Jonah
1

VB.net, 161

Module C
   Sub Main()
     Dim n As Integer
     If Integer.TryParse(Console.ReadLine,n) Then
     For x=1To n
        For y=1To n
          Console.Write("* "((x+y)Mod 2))
        Next
        Console.WriteLine()
      Next
     End If
    End Sub
End Module
Adam Speight
la source
1

PHP, 75 octets

for(;@$i++<$k=$argv[1];){for($j=0;$j++<$k;)echo($i+$j)%2?' ':'X';echo"\n";}
Boian Ivanov
la source