Satranç tahtası desen


18

Girdi: stdin'den veya komut satırı bağımsız değişkeni olarak 80'den küçük, pozitif bir sayı.

Çıktı: Kare bir satranç tahtası deseni, giriş numarasının boyutu. Koyu alanlar 'X' harfiyle, beyaz alanlar boşlukla gösterilir. Sol üst alan 'X' olmalıdır.

Tam bir program gereklidir.


Örnekler:

Giriş : 1

Çıktı :

X

Giriş : 8

Çıktı :

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

1
Bunun için 'hafif' gibi bir etiket arıyordum.
steenslag

1
Sanırım bütün ve eksiksiz bir program?
JB

@JB: Evet. Bunu nasıl formüle edebilirim? Gerekli çıktıya 'stdout'a eklensin mi?
steenslag

1
Sadece tam bir program istediğinizi söyleyin. Ayrıca işlev bağımsız değişkenleriyle karışıklığı önlemek için komut satırı bağımsız değişkenleri belirtmek isteyebilirsiniz .
JB

Sağ üst dediğin zaman, sol üst mü demek istiyorsun? Değilse, lütfen giriş 8 için örnek çıktıyı düzeltin.
Peter Taylor

Yanıtlar:


5

Pyth, 13 karakter

Not: Pyth kazanamayacak kadar yenidir. Ancak, eğlenceli bir golf oldu ve ben bunu paylaşmak düşündüm.

VQ<*QX*d2N\XQ

Burada deneyin.

Nasıl çalışır:

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

Temel olarak, bu, Xüretmek "X "veya " X"dönüşümlü olarak kullanır , daha sonra bu dize Qzamanlarını tekrarlar ve ilk Qkarakterlerini alır . Bu tekrarlanır Q.

Nasıl yok Xfonksiyon çalışmaları (en atamak)? " "Bu durumda orijinal dizeyi, bu durumda bir atama konumunu Nve bir yedek karakteri alır "X". Pyth en atamaları modüler olduğu için, bu konumda yer değiştirir N%2bir ile Xnedenle, ve döner Elde edilen dizi, "X "birinci, üçüncü, vb hatları üzerinde bulunmaktadır ve " X"diğerleri.


... ama APL değil. Çarptığın için teşekkürler. OP'nin yeniden kabul
edip

"Pyth kazanamayacak kadar yeni" Bunu anlamıyorum ve buna tepki vermiyorum.
steenslag

1
@steenslag Açıklamak için, sorudan daha yeni dillerin uygun olmadığı standart bir boşluk vardır. Bunun amacı, belirli bir zorlukta başarılı olmak için özel olarak tasarlanmış dilleri önlemektir. Elbette, meydan okuma ile istediğinizi yapmakta özgürsünüz.
isaacg

11

Golfscript - 17 karakter

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

analiz

~[0 ... N-1] 'in her değeri için girişi
:NN değişkeninde bir int deposuna dönüştürmek N * 2 karakter dizesinin döngü dizesinden başlayarak alt dizeyi almasını sağlamak için "X" i tekrarlayın ... N karakteri bitirdikten sonra her dizenin sonuna bir yeni satır ekleyin
,{...}
"X "N*
>
N<
n


5

Perl, 41 40

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

Perl 5.10 veya üzeri, şununla çalıştır perl -nE 'code'( nkod boyutunda sayılır)

Örnek çıktı:

$ 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

'X 40' içindeki 'x' ne yapar?
steenslag

2
@steenslag: xdize yineleme operatörüdür. 'a' x 3verim 'aaa'.
JB


3

Python, 76 karakter

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

3

Scala - 141 95 karakter

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

Kullanım: scala filename Nburada n, programa girişinizdir.


3

APL (16)

Varsayım ⎕IO=0(sıfır indeksli diziler bir ayardır)

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

Açıklama:

  • ⍳2⍴⎕: N sayısını okuyun ve (0,0) ila (N-1, N-1) içeren bir N × N matrisi oluşturun.
  • 2⊤¨: matristeki her sayının en küçük anlamlı bitini elde edin. (Yani şimdi (0,0), (0,1), (0,0) ... (1,0), (1,1), (1,0) ...) var
  • =/¨: her bir çift için iki sayının eşit olup olmadığına bakın. (Şimdi 1 0 1 0 1 0 var ...)
  • ' X'[... ]: her 0 için bir boşluk ve her 1 için bir X koyun.

3

Yakut 45 42

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

Demo: http://ideone.com/Mw25e


(x=gets.to_i).timesüç karakter kaydeder. Neden bu ihtiyaca olan ani ilgi arttı?
steenslag

@steenslag Teşekkürler! Bahşişini uyguladım. Bu soruyu listenin en başında gördüm ve Ruby becerilerimi kaldırmak için bir cevap göndereceğimi düşündüm. Görünüşe göre onları yeterince temizlemedim. :)
Cristian Lupascu

2

piton

48 Karakter

EDIT: Biraz Yanlış ... Sonunda fazladan bir alan var ... ama bu görünmüyor. Alanı "O" (veya herhangi bir boşluk olmayan karakter) olarak değiştirirseniz [i%2:n], olarak değiştirin [i%2:n+i%2]. doğru sürüm için.

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

2

C ++ - 253 gizlenmiş karakter

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

1
Tüm sihirli sayıları seviyorum.
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));

Bunun +'1'yerine sayıya dönüştürebileceğinize eminim parseInt('1'). Sana bir tamsayı vermeyeceğim, ama burada bir tamsayıya sahip olmanın önemli olduğunu düşünmüyorum, değil mi?
Bazı Guy

2

k (26 karakter)

26 Çıplak fonksiyon için:

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

Veya stdin'den girdi almak için 7 tane daha

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

2

Bash: 60 karakter

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

Tablo boyutu, örneğin komut satırı parametresi olarak geçirilir bash chesstable.sh 8.


2

Java 10, lambda işlevi, 92 87 84 bayt

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

Burada çevrimiçi deneyin .

4 bayt golf için ceilingcat ve Kevin Cruijssen'e teşekkürler 3 golf daha için .

Ungolfed sürümü:

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, tam program, 155139 bayt

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

Burada çevrimiçi deneyin .

Ungolfed sürümü:

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

@ ceilingcat Teşekkürler! Bir bayt daha tıraş etmeyi başardım ve yaklaşımınızı tüm programıma da uyguladım. 16 bayt kaydedildi.
OOBalance

İki yapmak s+=bu parantezlerden 2 bayt daha kısadır: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

Ya da (parantez tekrar xD) doğrudan baskı 1 daha bayt kapalı (toplam 84) n->{for(int i=0;i<n*n;)System.out.print(((i%n+i/n)%2<1?"X":" ")+(++i%n<1?"\n":""));}. Çevrimiçi deneyin.
Kevin Cruijssen

Öner "X ".charAt(i%n+i/n&1)yerine((i%n+i/n)%2<1?"X":" ")
ceilingcat


2

APL (Dyalog Genişletilmiş) , 12 bayt SBCS

Anonim zımni önek fonksiyonu. Gerektirir ⎕IO←0(sıfır tabanlı indeksleme).

'X '⊇⍨2|⍳+⍀⍳

Çevrimiçi deneyin!

bulgular 0… n – 1

+⍀ artı yatay ve dikey masa:

bulgular 0… n – 1

2| ikiye bölündüğünde kalan bölüm

'X '⊇⍨ dizeye dizine eklemek için bu matrisi kullanın


2

Scala, 68 bayt

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

veya

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

Çevrimiçi deneyin!


2

Brainfuck, 140 bayt

-[+[+<]>>+]>++++[<++++++++>-]<<<<<<,[->+>+>+<<<]>>[->[->.<[->>.>]<<<]<[<<<]>>>>>[-<+>]>[-<+>]<<[->>+<<]<<[-<+>]<[->+>>+<<<]++++++++++.[-]>>]

2

Javascript, 67 bayt

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

Çevrimiçi deneyin

C, 83 bayt

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

Çevrimiçi deneyin

Temel C64, 89 bayt

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

resim açıklamasını buraya girin


on...go toKomutu ON-(I+JAND1)GOTO3:?"X";:, sıfır olduğu gibi koşullu olarak kullanabilirsiniz, bu durumda aşağıdaki ifadeye düşecektir, bu durumda, (I + J AND 1) === 0X'i yazdırır. Bu, satır başına daha fazla ifade toplamanıza ve bayt kaydetmenize olanak tanır.
Shaun Bebbers


2

Scala, 40 ve 54

Karakter sayısı bir işlev için 40, tam bir program için 54'tür.

Sadece bir işlev gövdesi veren çözüm:

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

Çevrimiçi deneyin

 

Tam bir program veren çözüm:

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

Aşağıdaki komut satırını kullanarak çalıştırabilirsiniz.

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

burada 8 giriştir.


1
PP&CG ve hoş bir ilk cevap hoş geldiniz. Kolay bayt sayıları almanıza ve paylaşımları paylaşmanıza olanak tanıyan Try It Online adlı güzel bir site var . Bunun bir örneğini görmek için diğer Scala cevabını kontrol edin . Zihin gerekli değil, sadece sahip olmak güzel.
Veskah

Öneri için @Veskah teşekkürler.
jseteny

Güzel bir çözüm bunu bir fonksiyona değiştirerek ve haritayı kullanarak 34 Karakter alırsınız:("X "*n)sliding n take n map println
pme

@pme Öneri için teşekkürler, ancak foreach'u harita ile değiştirirsem çıktı yok. Ancak bunu önerdiğiniz gibi bir işleve değiştiriyorum.
jseteny

haklısın - üzgünüm harita tembel görünüyor; (.
pme

1

Python - 127 karakter

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


1

Q, 33

{$[1=x mod 2;x;x-1]cut(x*x)#"X "}

{(x;x-1-x mod 2)#"X "}22 ... ah hayır, seninle aynı hataya sahip
streetster

1

Yakut 58

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

1

PHP - 136 karakter (boşluk olmadan)

X ve y işlev girişine izin verir.

Şimdi tek girişleri de destekliyor.

Çıkışı 0.65 em satır yüksekliğine sahip olacak şekilde şekillendirir ve bunu ▒█ ve █░ □ ■ ve ■ □ olarak değiştirirseniz, gerçek (kare) bir satranç tahtası gibi görünür.

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

Çıktı:

░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█
█░█░█░█░█░█░█░
░█░█░█░█░█░█░█

Her kenarda tek sayıda kare olan tahtalar için çalışır mı?
Gareth

@Gareth Şimdi öyle
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';}

1

CJam, 18 bayt

Muhtemelen GolfScript yanıtını taşıyabilirdim, ama burada farklı bir yaklaşım var. (Ve CJam yine de kazanmaya uygun değil.)

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

Burada test edin.

Fikri kullanılarak, yığında x ve y endeksleri 2D ızgara yineleme için trickf{f{...}} . X ve y verildiğinde, sadece siyah ve beyazı belirleyebilir (x+y)%2ve bunu karakter Xve boşluk içeren bir dize arasında seçim yapmak için kullanabiliriz .


1

J, 21 karakter

J de eksikti.

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

Önceki, 22 karakter:

row #+ Mod2 modelinden karakter kodları column #:

   ([:u:88-56*2&|@+/~@i.) 5

-2 Bayt:([:{&' X'=/~@$&1 0)
Bolce Bussiere

16 bytes $"1[:|.&'X '"+i. Çevrimiçi deneyin!
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

1

PHP, 75 bayt

for(;@$i++<$k=$argv[1];){for($j=0;$j++<$k;)echo($i+$j)%2?' ':'X';echo"\n";}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.