Wzór szachownicy

18

Dane wejściowe: liczba dodatnia, mniejsza niż 80, od stdin lub jako argument wiersza poleceń.

Wyjście: kwadratowy wzór szachownicy, wielkość liczby wejściowej. Ciemne pola są reprezentowane przez literę „X”, a białe pola przez spację. Lewe górne pole powinno być „X”.

Wymagany jest kompletny program.


Przykłady:

Wejście : 1

Wyjście :

X

Wejście : 8

Wyjście :

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
źródło
1
Szukałem do tego tagu typu „lekki”.
steenslag
1
Chyba cały i kompletny program?
JB
@JB: Tak. Jak mam to sformułować? Dodać „do standardowego” do wymaganego wyjścia?
steenslag
1
Powiedz tylko, że chcesz mieć pełny program. Możesz także podać argumenty wiersza poleceń , aby uniknąć pomyłek z argumentami funkcji.
JB
Kiedy mówisz w prawym górnym rogu, masz na myśli lewy górny róg? Jeśli nie, proszę poprawić przykładowe dane wyjściowe dla danych wejściowych 8.
Peter Taylor

Odpowiedzi:

5

Pyth, 13 znaków

Uwaga: Pyth jest o wiele za nowy, aby wygrać. To był jednak fajny golf i pomyślałem, że się nim podzielę.

VQ<*QX*d2N\XQ

Wypróbuj tutaj.

Jak to działa:

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

Zasadniczo używa tego Xdo generowania "X "lub " X"naprzemiennie, a następnie powtarza ten ciąg znaków Qi pobiera pierwsze Qznaki. To się powtarzaQ .

Jak działa funkcja X(przypisuj do)? Pobiera oryginalny ciąg, " "w tym przypadku, lokalizację przypisania, Nw tym przypadku, i znak zastępczy, "X"w tym przypadku. Ponieważ przypisania Pytha są modułowe, to zastępuje miejsce w miejscu N%2przez Xi zwraca wynikowy ciąg znaków, który znajduje się zatem "X "w pierwszym, trzecim itd. Wierszu, a także " X"w pozostałych.

isaacg
źródło
... ale APL nie jest. Dzięki za wpadanie. Zastanawiam się, czy OP ponownie zaakceptuje ...
Adám
„Pyth jest zbyt nowy, aby wygrać”. Nie rozumiem tego i ponownie go akceptuję.
steenslag
1
@steenslag Aby wyjaśnić, istnieje standardowa luka, że ​​języki nowsze niż pytanie są niekwalifikowalne. Ma to na celu niedopuszczenie do tego, by języki specjalnie zaprojektowane radziły sobie dobrze w określonym wyzwaniu. Oczywiście możesz swobodnie robić to, co chcesz.
isaacg
11

Golfscript - 17 znaków

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

Analiza

~konwertuj dane wejściowe do
:Nmagazynu int w zmiennej N
,{...}dla każdej wartości [0 ... N-1]
"X "N*powtórz „X”, aby dać ciąg znaków N * 2
>weź podłańcuch zaczynając od indeksu pętli ...
N<... kończące N znaki później
numieszczają nowy wiersz na końcu każdego łańcucha

gnibbler
źródło
5

Perl, 41 40

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

Perl 5.10 lub nowszy, uruchom z perl -nE 'code'(n liczony jako rozmiar kodu)

Przykładowe dane wyjściowe:

$ 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
źródło
Co robi „x” w „x 40”?
steenslag
2
@steenslag: xjest operatorem powtarzania łańcucha. 'a' x 3daje 'aaa'.
JB,
4

Python, 48 znaków

x,i=input(),0
exec'print(x*"X ")[i:i+x];i^=1;'*x
Nolen Royalty
źródło
3

Python, 76 znaków

n=input()
p='X '*n
print n/2*(p[:n]+'\n'+p[1:n+1]+'\n'),
if n&1:print p[:n]
Keith Randall
źródło
3

Scala - 141 95 znaków

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

Zastosowanie: scala filename Ngdzie n jest Twoim wkładem do programu.

Gareth
źródło
3

APL (16)

Zakładając ⎕IO=0(tj. Tablice o indeksie zero, jest to ustawienie)

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

Wyjaśnienie:

  • ⍳2⍴⎕: odczytaj liczbę N i utwórz macierz N × N zawierającą (0,0) do (N-1, N-1).
  • 2⊤¨: pobierz najmniej znaczący bit każdej liczby w macierzy. (Więc teraz mamy (0,0), (0,1), (0,0) ... (1,0), (1,1), (1,0) ...)
  • =/¨: dla każdej pary sprawdź, czy dwie liczby są równe. (Teraz mamy 1 0 1 0 1 0 ...)
  • ' X'[... ]: wstaw spację dla każdego 0 i X dla każdego 1.
marinus
źródło
3

Rubinowy 45 42

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

Demo: http://ideone.com/Mw25e

Cristian Lupascu
źródło
(x=gets.to_i).timesoszczędza trzy znaki. Skąd tak nagłe zainteresowanie tym staruszkiem?
steenslag,
@steenslag Thanks! Zastosowałem twoją wskazówkę. Właśnie zobaczyłem to pytanie na początku listy i pomyślałem, że opublikuję odpowiedź, aby odkurzyć moje umiejętności Ruby. Najwyraźniej nie odkurzyłem ich wystarczająco. :)
Cristian Lupascu,
2

Pyton

48 znaków

EDYCJA: Trochę źle ... Na końcu jest dodatkowe miejsce ... ale to nie jest widoczne. Jeśli zmienisz spację na „O” (lub dowolny inny spacji), zmień [i%2:n]na [i%2:n+i%2]. dla poprawnej wersji.

n=input()
i=0;
while i<n:print('X '*n)[i%2:n];i+=1
st0le
źródło
2

C ++ - 253 zaciemnionych znaków

#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
źródło
1
Uwielbiam wszystkie magiczne liczby.
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
źródło
Jestem prawie pewien, że możesz przekonwertować na liczbę taką jak +'1'zamiast parseInt('1'). Nie podam ci liczby całkowitej, ale nie sądzę, że ważna jest tutaj liczba całkowita, prawda?
Some Guy
2

k (26 znaków)

26 W przypadku funkcji gołej:

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

Lub kolejne 7, aby pobrać dane wejściowe ze standardowego wejścia

{-1',/x#',x#'("X ";" X");}"I"$0:0
skeevey
źródło
2

Bash: 60 znaków

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

Rozmiar tabeli jest przekazywany na przykład jako parametr wiersza polecenia bash chesstable.sh 8.

człowiek w pracy
źródło
2

Java 10, funkcja lambda, 92 87 84 bajtów

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

Wypróbuj online tutaj .

Dzięki pułapowi do gry w golfa 4 bajty i Kevina Cruijssena na w golfa jeszcze 3.

Wersja bez golfa:

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, pełny program, 155 139 bajtów

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

Wypróbuj online tutaj .

Wersja bez golfa:

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
źródło
@ceilingcat Thanks! Udało mi się zgolić jeszcze jeden bajt i zastosowałem twoje podejście do mojego pełnego programu. Zapisano 16 bajtów.
OOBalance,
Wykonanie dwóch s+=jest o 2 bajty krótsze niż w nawiasie: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
Lub 1 bajt bardziej off (84 w sumie), drukując bezpośrednio (z nawiasu ponownie xD) n->{for(int i=0;i<n*n;)System.out.print(((i%n+i/n)%2<1?"X":" ")+(++i%n<1?"\n":""));}. Wypróbuj online.
Kevin Cruijssen
Zaproponuj "X ".charAt(i%n+i/n&1)zamiast((i%n+i/n)%2<1?"X":" ")
ceilingcat 12.04.19
2

APL (Dyalog Extended) , 12 bajtów SBCS

Anonimowa ukryta funkcja prefiksu. Wymaga ⎕IO←0(indeksowanie od zera).

'X '⊇⍨2|⍳+⍀⍳

Wypróbuj online!

d ndices 0… n – 1

+⍀ plus stół z tym poziomo i pionowo:

d ndices 0… n – 1

2| pozostała część podziału po podzieleniu przez dwa

'X '⊇⍨ użyj tej macierzy, aby zindeksować ciąg

Adám
źródło
2

Scala, 68 bajtów

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

lub

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

Wypróbuj online!

Dr Y Wit
źródło
2

Brainfuck, 140 bajtów

-[+[+<]>>+]>++++[<++++++++>-]<<<<<<,[->+>+>+<<<]>>[->[->.<[->>.>]<<<]<[<<<]>>>>>[-<+>]>[-<+>]<<[->>+<<]<<[-<+>]<[->+>>+<<<]++++++++++.[-]>>]
Oyarsa
źródło
2

JavaScript, 67 bajtów

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

Wypróbuj online

C, 83 bajty

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

Wypróbuj online

Podstawowy C64, 89 bajtów

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

enter image description here

Johan du Toit
źródło
Możesz użyć on...go topolecenia warunkowo, tak jak ON-(I+JAND1)GOTO3:?"X";:tam, gdzie wynosi zero, przejdzie ono do następującej instrukcji, w tym przypadku, jeśli (I + J AND 1) === 0następnie wydrukuje X. Pozwala to na spakowanie większej liczby instrukcji w wierszu i oszczędzanie bajtów.
Shaun Bebbers
1
C 81 bajtów
ceilingcat
2

Scala, 40 i 54

Liczba znaków wynosi 40 dla funkcji, 54 dla kompletnego programu.

Rozwiązaniem dającym tylko ciało funkcyjne jest:

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

Wypróbuj online

 

Rozwiązaniem zapewniającym pełny program jest:

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

Możesz uruchomić go za pomocą następującego wiersza poleceń.

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

gdzie 8 jest wejściem.

jseteny
źródło
1
Witamy w PP&CG i miła pierwsza odpowiedź. Jest fajna strona o nazwie Try It Online, która pozwala na łatwe liczenie bajtów i udostępnianie przebiegów. Sprawdź drugą odpowiedź Scali, aby zobaczyć jej przykład . To nie jest konieczne, po prostu miło mieć.
Veskah
Dzięki @Weskah za sugestię.
jseteny
Ładne rozwiązanie, zmieniając to na funkcję i używając mapy otrzymujesz 34 znaki:("X "*n)sliding n take n map println
pme
@pme Dzięki za sugestię, ale nie zastąpię foreach mapą. Jednak zmieniam go na funkcję zgodnie z sugestią.
jseteny
masz rację - przepraszam wydaje się, że mapa jest leniwa; (.
pme
1

Python - 127 znaków

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

źródło
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
źródło
83 bajtów
Johan du Toit
1

P, 33

{$[1=x mod 2;x;x-1]cut(x*x)#"X "}
tartin
źródło
{(x;x-1-x mod 2)#"X "}przez 22 ... ach nie, ma ten sam błąd co twój - nie ma 4 X w nieparzystych wierszach dla wejścia 8.
streetster
1

Ruby 58

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

PHP - 136 znaków (bez białych znaków)

Umożliwia wprowadzanie funkcji xiy.

Obsługuje teraz również nieparzyste dane wejściowe.

Jeśli stylizujesz wyjście tak, aby miało wysokość linii 0,65 em i zmieniłeś to ▒█ i █░ na □ ■ i ■ □, to wygląda jak prawdziwa (kwadratowa) szachownica.

Kod:

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

Wynik:

░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
Horyzont zdarzeń
źródło
Czy to działa na planszach z nieparzystą liczbą kwadratów na stronę?
Gareth,
@Gareth Teraz to robi
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
źródło
1

CJam, 18 bajtów

Prawdopodobnie mogłem właśnie przenieść odpowiedź GolfScript, ale tutaj jest inne podejście. (A CJam i tak nie kwalifikuje się do wygrania.)

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

Sprawdź to tutaj.

Pomysł jest iteracyjne nad siatkę 2D z X i Y indeksów na stosie, stosując ten f{f{...}}trik . Biorąc pod uwagę xiy, możemy po prostu określić czarno-biały jako (x+y)%2i użyć go do wybrania między znakiem Xa ciągiem zawierającym spację.

Martin Ender
źródło
1

J, 21 znaków

J też zaginął.

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

Poprzednie, 22 znaki:

Kody znaków ze wzoru mod2 row #+ column #:

   ([:u:88-56*2&|@+/~@i.) 5
randomra
źródło
-2 bajty:([:{&' X'=/~@$&1 0)
Bolce Bussiere
16 bajtów $"1[:|.&'X '"+i. Wypróbuj online!
Jonasz
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
źródło
1

PHP, 75 bajtów

for(;@$i++<$k=$argv[1];){for($j=0;$j++<$k;)echo($i+$j)%2?' ':'X';echo"\n";}
Boian Iwanow
źródło