Gambar garis miring X

21

Dengan bilangan bulat non-negatif, cetaklah Xyang sebesar itu. Xadalah output untuk input 0, dan Anda akan menambahkan garis miring sama dengan input di setiap arah untuk memperpanjang Xinput yang lebih besar.

Uji Kasus

0

X

1

\ /
 X
/ \

2

\   /
 \ /
  X
 / \
/   \

...

10

\                   /
 \                 /
  \               /
   \             /
    \           /
     \         /
      \       /
       \     /
        \   /
         \ /
          X
         / \
        /   \
       /     \
      /       \
     /         \
    /           \
   /             \
  /               \
 /                 \
/                   \

Aturan

Anda dapat mencetak output, atau mengembalikan string atau daftar string dari suatu fungsi. Newline tambahan, serta spasi putih interior tambahan yang tidak memengaruhi tampilan, diizinkan.

Ini , jadi jawaban tersingkat dalam byte menang!

Stephen
sumber
Kotak pasir ; terkait
Stephen
6
... Saya hanya akan menunggu solusi 1-byte arang.
Leaky Nun
@ LeakyNun Saya akan terkejut jika Charcoal dapat dengan mudah berurusan dengan Xdi tengah (bagian dari mengapa saya menambahkannya) tetapi siapa yang tahu: D
Stephen
Juga terkait
Nilai Tinta
Terkait , terkait
xnor

Jawaban:

6

Kanvas , 3 byte

╵\┼

Coba di sini!

setengah dari ukuran jawaban Arang: D

╵    increment the input
 \   create a diagonal that long
  ┼  and quad-palindromize, mirroring what's required, with 1 overlap;
     This overlaps the `/` and `\`, resulting in `X`
dzaima
sumber
Dang itu pendek.
dylnan
: ||||||| +1 untuk golfiness
ASCII
juga saya bertanya-tanya apakah bahasa berbasis stack pada dasarnya selalu mengungguli bahasa lain?
ASCII
@ ASCII-only jelly
Okx
@Okx * stack-based / tacit
ASCII-only
22

Arang , 6 byte

PX⁺¹NX

Omong kosong Anda tidak menghentikan saya;)

Cobalah online!

Okx
sumber
2
TIO terlihat ... menarik ketika Anda memasukkan angka yang sangat besar
Stephen
@StephenS Hanya karena pembungkus.
Okx
Saya tahu, itu hanya intuitif bahwa semua yang dibungkus dibiarkan lurus (karena ruang tidak terbungkus)
Stephen
5 karakter (tantangan tanggal kiriman) hanya untuk mendapatkan yang sedikit lebih dekat ke Canvas
ASCII-only
16

JavaScript (ES6), 79 byte

Menggunakan fungsi rekursif g yang berjalan melalui kisi-kisi dan membangun karakter keluaran dengan karakter.

n=>(g=x=>`/\\ X
`[~x?x-y?x+y-w&&2:x-n?1:3:4]+(~y?g(~x--?x:y--&&w):''))(y=w=n*2)

Bagaimana?

Kedua variabel x dan y iterate dari 2n ke -1 , di mana n adalah input.

Untuk setiap posisi (x, y) di kisi, kami memilih salah satu karakter ini:

  • 0: /
  • 1: \
  • 2: ruang
  • 3: X
  • 4: baris baru

menggunakan tes berikut:

  • ~x: Falsy if x == -1 : kami telah mencapai akhir baris.
  • x-y: Falsy if x == y : kami berada di anti-diagonal.
  • x+y-w: Falsy if x + y == w : kami berada di diagonal.
  • x-n: Falsy if x == n : karena tes ini hanya dilakukan ketika x == y , ini berarti bahwa kami berada di tengah-tengah grid.

dan pohon keputusan berikut:

pohon keputusan

Demo

Arnauld
sumber
4
Ini ... JavaScript? Apa yang terjadi padamu, teman lama.
roberrrt-s
13

MATL , 16 byte

'\/X 'iEQXytEP+)

Cobalah online!

Pertimbangkan input 2sebagai contoh. Tumpukan ditampilkan di sini terbalik, yaitu elemen yang lebih rendah adalah yang paling baru didorong.

'\/X '  % Push this string
        %   STACK: '\/X '
iEQ     % Input a number, n. Multiply by 2, add 1: gives 2*n+1
        %   STACK: '\/X '
                   5
Xy      % Identity matrix of that size
        %   STACK: '\/X '
                   [1 0 0 0 0;
                    0 1 0 0 0;
                    0 0 1 0 0;
                    0 0 0 1 0;
                    0 0 0 0 1]
tEP     % Duplicate, multiply each entry by 2, flip vertically
        %   STACK: '\/X '
                   [1 0 0 0 0;
                    0 1 0 0 0;
                    0 0 1 0 0;
                    0 0 0 1 0;
                    0 0 0 0 1]
                   [0 0 0 0 2;
                    0 0 0 2 0;
                    0 0 2 0 0;
                    0 2 0 0 0;
                    2 0 0 0 0]
+       % Add the two matrices
        %   STACK: '\/X '
                   [1 0 0 0 2;
                    0 1 0 2 0;
                    0 0 3 0 0;
                    0 2 0 1 0;
                    2 0 0 0 1]
)       % Index into the string. Indexing is 1-based and modular, so 1 picks
        % the first character ('\'), ..., 0 picks the last (space)
        %   STACK: ['\   /';
                    ' \ / ';
                    '  X  ';
                    ' / \ ';
                    '/   \']
        % Implicit display
Luis Mendo
sumber
Saya ingin melakukan sesuatu yang serupa dalam Oktaf, tetapi Anda mengalahkan saya untuk itu dan dalam MATL bahkan lebih pendek dari Oktaf, pekerjaan yang hebat!
Michthan
@Michthan Terima kasih! Versi Oktaf pasti akan layak diposkan juga. Atempt saya adalah 38 byte, apa milikmu?
Luis Mendo
Saya telah memikirkan hal itu sepanjang akhir pekan dan tidak dapat menemukan cara yang lebih efisien daripada yang Anda gunakan di sini .. Jadi semua kredit harus diberikan kepada Anda untuk versi oktaf.
Michthan
6

C, 108 106 byte

a;g(n){for(int b=2*n,i=1,c=47;a+=i;b?puts(""):(i=-i,c=92),b-=2*i)printf("%*c%*c",a,b?c+45*i:88,b,b?c:10);}

Cobalah online!

(−2 bermain golf berkat MD XF)

Ini mencetak dua karakter (pada awalnya,, c = 47yang merupakan garis miring, dan c + 45, yang merupakan garis miring terbalik; kemudian mereka bertukar) dengan lebar bidang dinamis.

Lebar bidang dimulai pada 1dan 2n, dan pada setiap iterasi, lebar pertama bertambah 1, dan yang kedua dikurangi 2.

Ketika lebar bidang kedua menjadi 0, itu menghasilkan 'X'dan baris baru, bukan karakter biasa, dan membalikkan arah kenaikan ( i). Baris baru dicetak untuk semua jalur lain secara terpisah ( puts("")).

anatolyg
sumber
106 byte: a,b,i=1,c;g(n){for(b=2*n,c=47;a+=i;b?puts(""):(i=-i,c=92),b-=2*i)printf("%*c%*c",a,b?c+45*i:88,b,b?c:10);} Cobalah secara online!
MD XF
Terima kasih atas idenya! Saya hanya menggunakan sebagian saja untuk memastikan kode dapat dipanggil dua kali.
anatolyg
5

shortC , 111 byte

s(x){Wx--)R" ")}j;f(x){O;j<x;j++)s(j),P92),s((x-j)*2-1),R"/\n");s(x);R"X\n");Wj--)s(j),P47),s((x-j)*2-1),R"\\\n

Berdasarkan jawaban C saya . Konversi:

  • R -> printf(
  • P -> putchar(
  • W -> while(
  • O -> for(
  • Penutupan yang dimasukkan secara otomatis ");}

Ini juga menggunakan kode ASCII untuk \dan /.

Cobalah online!

MD XF
sumber
5

C, 168 155 150 byte

-5 Terima kasih kepada Computronium

#define p printf(
s(x){while(x--)p" ");}j;f(x){for(;j<x;j++)s(j),p"\\"),s((x-j)*2-1),p"/\n");s(x);p"X\n");while(j--)s(j),p"/"),s((x-j)*2-1),p"\\\n");}

Bisa dipastikan golf; Saya melakukannya. Cobalah online!

Tidak Disatukan:

int space(int x)
{
    while (x--)
        putchar(' ');
}

int f(int x)
{
    for (int j = 0; j < x; j++) {
        space(j);
        printf("\\");
        space((x-j)*2-1);
        printf("/\n");
    }

    space(x);
    puts("X");

    while (j--) {
        space(j);
        putchar('/');
        space((x-j)*2-1);
        printf("\\\n");
    }
}
MD XF
sumber
2
Anda dapat kehilangan 5 karakter dengan mendefinisikan p sebagai "printf (" bukannya "printf".
Computronium
3

V , 21 byte

éXÀñ>HÄÒ r\Á/YGpr/$r\

Cobalah online!

Hexdump:

00000000: e958 c0f1 3e48 c4d2 2072 5cc1 2f59 4770  .X..>H.. r\./YGp
00000010: 722f 2472 5c                             r/$r\

Penjelasan:

éX                      " Insert an 'X'
  Àñ                    " Arg1 times:
    >H                  "   Add a space to every line.
                        "   Conveniently, this also puts us on the first line
      Ä                 "   Duplicate this line
       Ò                "   And replace the whole line with spaces
         r\             "   Replace the first char with '\'
           Á/           "   Append a '/' char
             Y          "   Yank this line
              G         "   Move to the last line
               p        "   And paste the line we yanked
                r/      "   Replace the first character with a '/'
                  $     "   Move to the end of the line
                   r\   "   And replace the last character with a '\'

Intinya, kita memiliki Sisipkan X, n kali perpanjang garis miring .

Tapi itu tidak sesederhana itu karena kita juga harus menambahkan garis miring pertama kali. Jika garis miring sudah ada, kita bisa menulis garis miring sebagai:

>HÄX2pGÙX2p

Yang akan menyelamatkan kita 6 byte.

DJMcMayhem
sumber
3

C #, 157 122 120 byte

_=d=>"".PadLeft(d)
a=>{var s=_(a)+"X\n";for(int i=0;++i<=a;)s=$@"{_(a-i)}\{_(i*2-1)}/
{s+_(a-i)}/{_(i*2-1)}\
";return s;}

Versi tidak disatukan:

 Func<int, string> _ = (d) =>"".PadLeft(d);
        Func<int, string> func = a => {

            var s = _(a) + "X\n";

            for (int i = 0; ++i <= a;) {

                s = $@"{_(a - i)}\{_(i * 2 - 1)}/
{s + _(a - i)}/{_(i * 2 - 1)}\
";

            }
            return s;
        };
LiefdeWen
sumber
1
Anda dapat memindahkan fungsi anonim lainnya dari yang pertama dan kemudian memasukkannya sebagai _=d=>new string(' ',d);(perhatikan tidak perlu untuk kawat gigi di sekitar d). Anda dapat menghapus kurung kurawal di sekitar for loop. Manfaatkan string kata demi kata sehingga Anda tidak perlu melarikan diri dari semua garis miring terbalik. Jika Anda mengatur i=0maka Anda dapat melakukan ++i<a+1dan menghapus i++.
TheLethalCoder
Juga dengan string kata demi kata Anda tidak perlu menyertakan \numpan baris yang sebenarnya akan berfungsi, meskipun saya tidak yakin apakah Anda kemudian dapat menghapus kawat gigi di sekitar for loop, Anda harus mencoba.
TheLethalCoder
1
Setelah menerapkan saran pertama oleh TheLethalCoder , Anda juga dapat mengganti ++i<a+1untuk ++i<=a EDIT. Anda juga dapat menyimpan 4 byte lagi dengan mengubah Funcdari new string(' ',d)ke"".PadLeft(d)
auhmaan
Terima kasih atas sarannya, @TheLethalCoder apakah saya boleh mendeklarasikan 2 fungsi seperti itu, bukankah itu akan membuat banyak C # golf lebih pendek jika kita bisa melakukan itu?
LiefdeWen
1
@StefanDelport Ada diskusi meta tentang hal itu di suatu tempat, tetapi ketika berdiri saya percaya Anda bisa selama Anda menunjukkan nama fungsi. Dalam hal ini _.
TheLethalCoder
3

Mathematica, 71 byte

(Sebagian terinspirasi oleh solusi 104-byte Jenny_mathy)

""<>#&/@(#"\\"+Reverse@#"/"&@IdentityMatrix[2#+1]/.{0->" ",a_+_->"X"})&

Mengembalikan daftar string.

Penjelasan: IdentityMatrix[2#+1]membuat matriks dengan ukuran yang tepat dengan 1s sepanjang diagonal dan 0s di tempat lain. Selanjutnya, kita kalikan dengan "\\"(backslash kabur), yang membuatnya menjadi matriks dengan backslash sepanjang diagonal dan 0s di tempat lain, karena tentu saja 1 kali backslash adalah backslash dan 0 kali backslash adalah 0. Kami menambahkan ini ke "/"kali, kebalikannya untuk membuat bentuk X. Kita hampir selesai, kecuali masih ada 0s di mana-mana, dan tengahnya "\\" + "/". Kami memperbaiki dua hal ini dengan menggantikan " "untuk 0dan "X"untuk a_+_, yang cocok dengan jumlah dari dua hal (seperti _+_seharusnya, kecuali Mathematica terlalu pintar untuk kebaikan sendiri dan menafsirkan bahwa sebagai 2 kali _). Akhirnya, ""<>#&/@ubah ini menjadi daftar string.

Bukan pohon
sumber
3

Java (OpenJDK 8) , 135 byte

i->{int k=0,j,l=2*i+1;String[]s=new String[l];for(;k<l;k++)for(s[k]="",j=0;j<l;j++)s[k]+=j==k?j==i?"X":"\\":j==l-1-k?"/":" ";return s;}

Ekspresi Lambda yang mengambil dan menyatukan dan mengembalikan array String

Cobalah online!

Tidak Disatukan:

i->{
    int k=0,j,l=2*i+1;                // Some variables to be used
    String[]s=new String[l];            // Return array (size 2*i+1)
    for(;k<l;k++)                       // For each array entry
        for(s[k]="",j=0;j<l;j++)        // Set each character to 
            s[k]+=j==k?j==i?"X":"\\"    // \ or X if it's the jth character of the jth row
                 :j==l-1-k?"/"          // / if it's the opposite char
                 :" ";                  // else blank
    return s;
}
PunPun1000
sumber
3

T-SQL, 201 byte

DECLARE @ INT SELECT @=a FROM t DECLARE @i INT=@
WHILE @>0BEGIN PRINT SPACE(@i-@)+'\'+SPACE(2*@-1)+'/'SET @-=1 END
PRINT SPACE(@i)+'X'WHILE @<@i BEGIN SET @+=1 PRINT SPACE(@i-@)+'/'+SPACE(2*@-1)+'\'END

Diformat:

DECLARE @ INT 
SELECT @=a FROM t 
DECLARE @i INT=@
WHILE @>0
    BEGIN
        PRINT SPACE(@i-@)+'\'+SPACE(2*@-1)+'/'
        SET @-=1 
    END
PRINT SPACE(@i)+'X'
WHILE @<@i 
    BEGIN 
        SET @+=1 
        PRINT SPACE(@i-@)+'/'+SPACE(2*@-1)+'\'
    END

Input melalui kolom a dalam tabel bernama t , sesuai pedoman kami .

BradC
sumber
3

Rubi , 66 byte

Fungsi rekursif.

f=->x{?X[x]||"\\#{s=' '*(2*x-1)}/
#{f[x-1].gsub /^/,' '}
/#{s}\\"}

Cobalah online!

Penjelasan

f=->x{                  # Start of recursive function named `f`
      ?X[x]||           # Return 'X' if x==0, otherwise the following:
"\\#{s=' '*(2x-1)}/     #  Top edge of the cross. Save no. of spaces needed
#{f[x-1]                #  Get result of f[x-1]
        .gsub /^/,' '}  #  Regex sub to left-pad every line w/ a space
/#{s}\\"                #  Bottom edge of cross (insert saved no. of spaces)
Nilai Tinta
sumber
3

Jelly , 24 17 byte

Ḥ‘=þ`µḤ+Uị“/\x ”Y

Cobalah online!

Bagaimana itu bekerja

Ḥ‘=þ`µḤ+Uị“/\x ”Y   main link, input a
Ḥ‘                  input doubled and incremented
   þ                Make a table: Apply  
  =                 "equals"/ to      
    `               each element in range(2a+1) cartesian multiplied with itself.
                      eg. For input 1: [1=1,1=2,1=3],[2=1,2=2,2=3],[3=1,3=2,3=3]      
     µ              on this array:
       +            add: 
      Ḥ             double of it to
        U           its reverse (changes south-east to north-west)
         ị“/\x ”    index into the string "/\x " to get the right characters
                Y   join by newlines for the final output.

-6 byte berkat @LeakyNun dan -1 byte dengan peningkatan tambahan

fireflame241
sumber
18 byte
Leaky Nun
2

Batch, 201 byte

@echo off
set s= /
for /l %%i in (2,1,%1)do call set s=  %%s%%
set s=\%s%
for /l %%i in (-%1,1,%1)do call:c
exit/b
:c
echo %s%
set s=%s:\ = \%
set s=%s:X =/\%
set s=%s:\/=X %
set s=%s: /=/ %

Mulai dengan membangun garis paling atas, lalu setelah mencetak setiap baris, gerakkan \satu spasi ke kanan dan ke /kiri satu kali, pastikan mereka membuat huruf a Xdi tengah.

Neil
sumber
2

PHP , 115 byte

for(;$i<$c=1+2*$argn;$b?:$t[$i-1]="\\".!$t[$c-$i]="/",$o.="$t\n")$t=str_pad(" X"[$b=$argn==+$i++],$c," ",2);echo$o;

Cobalah online!

Jörg Hülsermann
sumber
2

Retina , 74 byte

.+
$* X
+`^ ( *).( *)
$1\  $2/¶$&
+`¶ ( *).( *).?$
$&¶$1/  $2\
m` (\W)$
$1

Cobalah online! Penjelasan:

.+
$* X

Tempatkan X.

+`^ ( *).( *)
$1\  $2/¶$&

Mulai dari X, bekerja ke atas, tempatkan secara \diagonal ke kiri setiap kali. Juga tempatkan /dua ruang lagi setelah /dari yang terakhir kali.

+`¶ ( *).( *).?$
$&¶$1/  $2\

Mulai dari X, bekerja ke bawah, tempatkan secara /diagonal ke kiri setiap kali. Juga tempatkan \dua ruang lagi setelah /dari yang terakhir kali.

m` (\W)$
$1

Jumlah spasi di antara kedua diagonal harus ganjil, sehingga ruang terakhir pada setiap baris (kecuali Xgaris asli ) dihapus.

Neil
sumber
2

Mathematica, 131 byte

(F[x_,y_]:=Table[x<>StringJoin@Table[" ",i]<>y,{i,1,#*2,2}];Column[Join[Reverse@F["\\","/"],{"X"},F["/","\\"]],Alignment->Center])&


Mathematica, 104 byte

di sini adalah pendekatan lain menggunakan Grid

(S=DiagonalMatrix[Table["\\",r=2#+1]];Table[S[[r+1-i,0+i]]="/",{i,r}];S[[#+1,#+1]]="X";Grid@S/. 0->" ")&
J42161217
sumber
2

APL (Dyalog) , 25 byte

Membutuhkan ⎕IO←0yang default pada banyak sistem.

' \/X'[(⊢+2×⌽)∘.=⍨⍳1+2×⎕]

Cobalah online!

' \/'[... ] mengindeks string dengan

 dapatkan input

 kalikan dengan dua

1+ tambahkan satu

 daripada banyak bilangan bulat

∘.=⍨ tabel kesetaraan (yaitu matriks identitas; NW-SE diagonal)

(... ) terapkan fungsi tersembunyi berikut ini

   argumen

  + plus

   dua kali

   argumen cermin horizontal (yaitu NE-SW diagonal)

Adm
sumber
2

Bash , 138 byte

for i in `seq $1;seq $[$1-1] -1 1`
{ $[a++]
printf "%*c%*s\n" `echo ' '$i $[a>$1?1:2] $[($1-i)*2]' '$[a<$1?1:2]`
}|sed 's/22/X/'|tr 12 /\\

Cobalah online!

Sangat panjang, bash heates '\ and /'

Kurang golf

 for i in {1..10} {9..1};{
   $[a++];                      #argument as padding, prints 1 for \ and 2 for /
   printf "%*c%*s\n" `echo ' '$i $[a>$1?1:2] $[($1-i)*2]' '$[a<$1?1:2]`;
  }|sed 's/22/X/g' | tr 12 /\\
marcosm
sumber
2

Python 2 , 95 84 byte

-10 byte berkat @FelipeNardiBatista

f=lambda s,i='\n':i+(s and'\\'+'  '*~-s+' /'+f(s-1,i+' ')+i+'/'+'  '*~-s+' \\'or'X')

Cobalah online!

ovs
sumber
1
85 byte: TIO
Felipe Nardi Batista
@FelipeNardiBatista terima kasih banyak
Ov
1

Perl 5, 110 + 1 = 111 byte

Menggunakan -nbendera

$x=$_;$,="\n";push@x,$"x($x-$_)."\\".$"x(2*--$_+1)."/"while$_>0;say@x,$"x$x."x";for(reverse@x){y!\\/!/\\!;say}
Chris
sumber
1

QBIC , 90 byte

~b=0|?@X`\[0,:-1|X=space$(a)┘Z=Z+X+@\`+space$((b-a)*2-1)+@/`+X+@┘`]Z=Z+space$(b)+A+_fZ

Bagaimana monstrositas ini bekerja, dibiarkan sebagai latihan untuk pembaca ...

Output sampel:

Command line: 3
\     /
 \   / 
  \ /  
   X
  / \  
 /   \ 
/     \
steenbergh
sumber
1

Visual Basic.Net , 454 450 Bytes

Option Strict Off
module m
sub main(a As String())
dim v=Convert.toInt32(a(0))
for i as Integer=v to 1 step -1
for j as Object=1 to v-i
w(" ")
next
w("\")
for j as Object=1 to i*2-1
w(" ")
next
console.writeline("/")
next
console.writeline(new String(" ",v)&"X")
for i as Object=1 to v
for j as Object=1 to v-i
w(" ")
next
w("/")
for j as Object=1 to i*2-1
w(" ")
next
console.writeline("\")
next
end sub
sub w(s)
console.write(s)
end Sub
end module

tidak yakin apakah membuat func untuk writelineakan menghemat beberapa byte terima kasih kepada Stephen S untuk menunjuk as ...penghapusan juga diubah integermenjadi object edit terakhir mengubah yang pertama kembali

polyglotrealIknow
sumber
Anda seorang pemberani :) Saya yakin Anda dapat menghapus semua itu as Types, karena jika sudah Option Strict Off, VB.NET bertindak seperti bahasa yang diketik secara longgar.
Stephen
Saat ini di Linux mono sedang anoying
polyglotrealIknow
mono tidak peduli tentang Opsi Ketat, atau setidaknya itulah yang saya pikirkan
polyglotrealIknow
Oh, sepertinya functions ! = for loops Terima kasih untuk golf
polyglotrealIknow
Tidak Option Strictmati secara default? Setidaknya ada di Visual Studio
Stephen
1

05AB1E , 22 byte

F'\IN-úR.∞})Âí'Xs)˜.c»

Cobalah online!

Penjelasan

F                        # for N in [0...input-1] do
 '\                      # push a backslash
   IN-ú                  # prepend input-N spaces
       R                 # reverse
        .∞               # mirror
          }              # end loop
           )             # wrap stack in a list
            Â            # bifurcate
             í           # reverse each item
              'Xs        # push an "X" between the 2 lists on the stack
                 )˜      # wrap in flattened list
                   .c    # pad lines to equal length
                     »   # join on newlines

Alternatif solusi 22 byte

F'\N·>ú'/ì})Âí'X¸«ì.c»
Emigna
sumber
1

Pyke, 14 byte

\XQV.X \   /\/

Coba di sini!

\X             - "X"
  QV           - repeat input times:
    .X \   /\/ -  surround(^, all=" ", 
                              tl="\", 
                              left=" ",  
                              right=" ",  
                              lower=" ",  
                              tr="/",  
                              br="\",  
                              bl="/")
Biru
sumber
1

tcl, 134

proc P {x s b} {time {puts [format %[incr ::i $x]s%[expr ($::n-$::i)*2+2]s $s $b]} $::n}
P 1 \\ /
puts [format %[incr i]s X]
P -1 / \\

demo

Set n di baris pertama.

Mungkin saya bisa bermain golf lebih menggunakan pendekatan rekursif

sergiol
sumber
1

R , 75 72 byte

y=diag(b<-2*scan()+1);write(c(" ",'\\','/','X')[y+2*y[,b:1]+1],'',b,,'')

Terinspirasi oleh jawaban ini , menghasilkan matriks implisit dan menulisnya ke stdout; membaca ukuran dari stdin. Itu harus membangun matriks karakter ruang dan menggunakan sep=''b / c kalau tidak memiliki masalah spasi.

diag(b)                     # generates a main diagonal of 1, rest 0
2*diag(b)[,b:1]             # the other diagonal is 2
                            # [,b:1] reverses columns
                            # [b:1,] reverses the rows; they're equivalent
diag(b)+2*diag(b)[,b:1]     # sums, so we get 1 for main diagonal
                            # 2 for other diagonal, 3 for center
diag(b)+2*diag(b)[,b:1]+1   # add 1 since R is 1-indexed
                            # the result is indices for the vector
c(' ','\\','/','X')

Cobalah online!

Giuseppe
sumber