Schachbrettmuster

18

Eingabe: eine positive Zahl, kleiner als 80, von stdin oder als Befehlszeilenargument.

Ausgabe: Ein quadratisches Schachbrettmuster, die Größe der eingegebenen Zahl. Die dunklen Felder werden durch den Buchstaben 'X' dargestellt, die weißen Felder durch ein Leerzeichen. Das Feld oben links sollte "X" sein.

Ein vollständiges Programm ist erforderlich.


Beispiele:

Eingabe : 1

Ausgabe :

X

Eingabe : 8

Ausgabe :

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
quelle
1
Ich war auf der Suche nach einem Tag wie "Lightweight".
Steenslag
1
Ganzes und vollständiges Programm, nehme ich an?
JB
@JB: Ja. Wie formuliere ich das? 'To stdout' zur gewünschten Ausgabe hinzufügen?
Steenslag
1
Sagen Sie einfach, Sie möchten ein vollständiges Programm. Möglicherweise möchten Sie auch Befehlszeilenargumente angeben , um Verwechslungen mit Funktionsargumenten zu vermeiden.
JB
Wenn Sie oben rechts sagen, meinen Sie damit oben links? Wenn nicht, korrigieren Sie bitte die Beispielausgabe für Eingabe 8.
Peter Taylor

Antworten:

5

Pyth, 13 Zeichen

Hinweis: Pyth ist viel zu neu, um gewinnen zu können. Es war jedoch ein Spaßgolf und ich dachte, ich würde es teilen.

VQ<*QX*d2N\XQ

Probieren Sie es hier aus.

Wie es funktioniert:

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

Grundsätzlich wird dies verwendet X, um zu generieren "X "oder " X"abwechselnd, dann wiederholt diese Zeichenfolge QZeiten und nimmt die ersten QZeichen. Dies wird mehrfach wiederholt Q.

Wie funktioniert die Funktion X(zuweisen bei)? " "In diesem Fall wird die ursprüngliche Zeichenfolge verwendet, in diesem Fall ein Zuweisungsort und Nin diesem Fall ein Ersetzungszeichen "X". Da Pyths Zuweisungen modular sind, ersetzt dies das Leerzeichen an der Position N%2durch ein Xund gibt die resultierende Zeichenfolge zurück, die sich daher "X "in der ersten, dritten usw. Zeile und " X"in den anderen Zeilen befindet .

isaacg
quelle
... aber APL nicht. Danke fürs Anstoßen.
Adám
"Pyth ist viel zu neu, um für einen Sieg in Frage zu kommen" Ich verstehe das nicht und akzeptiere dieses.
Steenslag
1
@steenslag Um dies zu erklären, gibt es eine Standardlücke, in der Sprachen, die neuer sind als die Frage, nicht berücksichtigt werden können. Dies soll verhindern, dass Sprachen, die speziell für eine bestimmte Herausforderung entwickelt wurden, gut abschneiden. Natürlich können Sie mit Ihrer Herausforderung tun, was Sie wollen.
Isaacg
11

Golfscript - 17 Zeichen

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

Analyse

~Konvertieren Sie die Eingabe in einen int-
:NSpeicher in der Variablen N
,{...}für jeden Wert von [0 ... N-1].
"X "N*Wiederholen Sie "X", um eine Zeichenfolge mit N * 2 Zeichen zu erhalten.
>Nehmen Sie die Teilzeichenfolge ab dem Schleifenindex ...
N<... Ende N Zeichen
nsetzen später eine neue Zeile am Ende jeder Zeichenfolge

Knabberzeug
quelle
5

Perl, 41 40

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

Perl 5.10 oder höher, ausgeführt mit perl -nE 'code'( nin Codegröße gezählt)

Beispielausgabe:

$ 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
quelle
Was macht das 'x' in 'x 40'?
Steenslag
2
@steenslag: xist der Operator für die Zeichenfolgenwiederholung. 'a' x 3Ausbeuten 'aaa'.
JB
4

Python, 48 Zeichen

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

Python, 76 Zeichen

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

Scala - 141 95 Zeichen

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

Verwendung: scala filename Nwobei n Ihre Eingabe für das Programm ist.

Gareth
quelle
3

APL (16)

Angenommen ⎕IO=0(dh, mit Nullindex versehene Arrays sind eine Einstellung)

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

Erläuterung:

  • ⍳2⍴⎕: Lies eine Zahl N und erstelle eine N × N-Matrix mit (0,0) bis (N-1, N-1).
  • 2⊤¨: Ermittelt das niedrigstwertige Bit jeder Zahl in der Matrix. (Nun haben wir also (0,0), (0,1), (0,0) ... (1,0), (1,1), (1,0) ...)
  • =/¨: Prüfen Sie für jedes Paar, ob die beiden Zahlen gleich sind. (Jetzt haben wir 1 0 1 0 1 0 ...)
  • ' X'[... ]: Setzen Sie für jede 0 ein Leerzeichen und für jede 1 ein X.
Marinus
quelle
3

Ruby 45 42

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

Demo: http://ideone.com/Mw25e

Cristian Lupascu
quelle
(x=gets.to_i).timesSpart drei Zeichen. Warum das plötzliche erneute Interesse an diesem Oldie?
Steenslag
@steenslag Danke! Ich habe Ihren Tipp angewendet. Ich habe diese Frage ganz oben auf der Liste gesehen und dachte, ich schreibe eine Antwort, um meine Ruby-Fähigkeiten zu entstauben. Anscheinend habe ich sie nicht genug abgewischt. :)
Cristian Lupascu
2

Python

48 Zeichen

EDIT: Irgendwie falsch ... Es gibt ein zusätzliches Leerzeichen am Ende ... aber das ist nicht sichtbar. Wenn Sie das Leerzeichen in "O" (oder ein anderes Zeichen als Leerzeichen) ändern [i%2:n], ändern Sie es in [i%2:n+i%2]. für die richtige Version.

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

C ++ - 253 verschleierte Zeichen

#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
quelle
1
Ich liebe alle magischen Zahlen.
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
quelle
Ich bin mir ziemlich sicher , dass Sie Zahl wie umwandeln können +'1'statt parseInt('1'). Ich gebe Ihnen keine ganze Zahl, aber ich denke nicht, dass es hier wichtig ist, eine ganze Zahl zu haben, oder?
Ein
2

k (26 Zeichen)

26 Für nackte Funktion:

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

Oder weitere 7, um die Eingabe von stdin zu übernehmen

{-1',/x#',x#'("X ";" X");}"I"$0:0
Skeevey
quelle
2

Bash: 60 Zeichen

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

Die Tabellengröße wird beispielsweise als Befehlszeilenparameter übergeben bash chesstable.sh 8.

Mann bei der Arbeit
quelle
2

Java 10, Lambda-Funktion, 92 87 84 Bytes

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

Probieren Sie es hier online aus .

Dank an ceilingcat für das Golfen von 4 Bytes und an Kevin Cruijssen für das Golfen von 3 weiteren Bytes .

Ungolfed-Version:

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, volles Programm, 155 139 Bytes

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

Probieren Sie es hier online aus .

Ungolfed-Version:

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
quelle
@ceilingcat Danke! Ich habe es geschafft, ein weiteres Byte zu entfernen und Ihren Ansatz auch auf mein gesamtes Programm anzuwenden. 16 Bytes dort gespeichert.
OOBalance
Zwei zu machen s+=ist 2 Bytes kürzer als diese Klammern: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
1 oder mehr Byte - off (84 insgesamt) , durch direktes Drucken (mit der Klammer wieder xD): n->{for(int i=0;i<n*n;)System.out.print(((i%n+i/n)%2<1?"X":" ")+(++i%n<1?"\n":""));}. Probieren Sie es online aus.
Kevin Cruijssen
Schlagen Sie "X ".charAt(i%n+i/n&1)stattdessen vor((i%n+i/n)%2<1?"X":" ")
ceilingcat
2

APL (Dyalog Extended) , 12 Byte SBCS

Anonyme implizite Präfixfunktion. Benötigt ⎕IO←0( nullbasierte Indizierung).

'X '⊇⍨2|⍳+⍀⍳

Probieren Sie es online!

ɩndices 0… n – 1

+⍀ Plus-Tabelle mit dem horizontal und vertikal:

ɩndices 0… n – 1

2| Division Rest, wenn durch zwei geteilt

'X '⊇⍨ Verwenden Sie diese Matrix, um den String zu indizieren

Adam
quelle
2

Scala, 68 Bytes

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

oder

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

Probieren Sie es online!

Trockener Humor
quelle
2

Brainfuck, 140 Bytes

-[+[+<]>>+]>++++[<++++++++>-]<<<<<<,[->+>+>+<<<]>>[->[->.<[->>.>]<<<]<[<<<]>>>>>[-<+>]>[-<+>]<<[->>+<<]<<[-<+>]<[->+>>+<<<]++++++++++.[-]>>]
Oyarsa
quelle
2

Javascript, 67 Bytes

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

Probieren Sie es online aus

C 83 Bytes

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

Probieren Sie es online aus

Basic C64, 89 Bytes

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

Bildbeschreibung hier eingeben

Johan du Toit
quelle
Sie können den on...go toBefehl unter bestimmten Bedingungen verwenden, z. B. ON-(I+JAND1)GOTO3:?"X";:wenn er Null ist, wird die folgende Anweisung verwendet. In diesem Fall (I + J AND 1) === 0wird das X gedruckt. Auf diese Weise können Sie mehr Anweisungen pro Zeile packen und Bytes speichern.
Shaun Bebbers
1
C 81 Bytes
Ceilingcat
2

Scala, 40 und 54

Die Anzahl der Zeichen beträgt 40 für eine Funktion, 54 für ein vollständiges Programm.

Die Lösung, die nur einen Funktionskörper ergibt, lautet:

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

Probieren Sie es online aus

 

Die Lösung für ein vollständiges Programm lautet:

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

Sie können es über die folgende Befehlszeile ausführen.

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

Wobei 8 die Eingabe ist.

Sicherheit
quelle
1
Willkommen bei PP & CG und schöne erste Antwort. Es gibt eine nette Seite namens Try It Online , mit der Sie einfache Byte-Zählungen erhalten und Läufe teilen können. Überprüfen Sie die andere Antwort von Scala, um ein Beispiel dafür zu sehen . Es ist wohlgemerkt nicht erforderlich, nur schön zu haben.
Veskah,
Danke @Veskah für den Vorschlag.
Jseteny
Schöne Lösung, wenn Sie dies in eine Funktion ("X "*n)sliding n take n map println
umwandeln
@pme Danke für den Vorschlag, aber es gibt keine Ausgabe, wenn ich foreach durch map ersetze. Ich ändere es jedoch in eine Funktion, wie Sie vorgeschlagen haben.
Jseteny
du hast recht - sorry scheint map ist faul; (.
pme
1

Python - 127 Zeichen

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)]

quelle
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
quelle
83 Bytes
Johan du Toit
1

Q, 33

{$[1=x mod 2;x;x-1]cut(x*x)#"X "}
tmartin
quelle
{(x;x-1-x mod 2)#"X "}für 22 ... ah nein, hat den gleichen Fehler wie Sie - hat nicht 4 X in den ungeraden Zeilen für die Eingabe 8.
Streetster
1

Rubin 58

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

PHP - 136 Zeichen (ohne Leerzeichen)

Ermöglicht die Eingabe von x- und y-Funktionen.

Unterstützt jetzt auch ungerade Eingänge.

Wenn Sie die Ausgabe so formatieren, dass sie eine Zeilenhöhe von 0,65 em hat, und diese ▒█ und █ ° in □ ■ und ■ □ ändern, sieht sie wie ein echtes (quadratisches) Schachbrett aus.

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

Ausgabe:

░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
Ereignishorizont
quelle
Funktioniert es für Bretter mit einer ungeraden Anzahl von Quadraten pro Seite?
Gareth
@ Gareth Jetzt tut es
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
quelle
1

CJam, 18 Bytes

Ich hätte wahrscheinlich nur die GolfScript-Antwort portieren können, aber hier ist ein anderer Ansatz. (Und CJam ist sowieso nicht gewinnberechtigt.)

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

Teste es hier.

Die Idee ist, mit dem f{f{...}}Trick über das 2D-Gitter mit den x- und y-Indizes auf dem Stapel zu iterieren . Mit x und y können wir einfach Schwarz und Weiß bestimmen und damit (x+y)%2zwischen dem Zeichen Xund einer Zeichenfolge mit einem Leerzeichen auswählen .

Martin Ender
quelle
1

J, 21 Zeichen

J fehlte auch.

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

Bisher 22 Zeichen:

Zeichencodes aus dem Muster mod2 von row #+ column #:

   ([:u:88-56*2&|@+/~@i.) 5
randomra
quelle
-2 Bytes:([:{&' X'=/~@$&1 0)
Bolce Bussiere
16 bytes $"1[:|.&'X '"+i. Probieren Sie es online!
Jona,
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
quelle
1

PHP, 75 Bytes

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