Cetak berlian ini


76

Pertanyaan ini telah menyebar seperti virus di kantor saya. Ada beberapa pendekatan:

Cetak yang berikut ini:

        1
       121
      12321
     1234321
    123454321
   12345654321
  1234567654321
 123456787654321
12345678987654321
 123456787654321
  1234567654321
   12345654321
    123454321
     1234321
      12321
       121
        1

Jawaban dinilai dalam karakter dengan lebih sedikit karakter yang lebih baik.


4
Apa kriteria kemenangan? Dan apakah ini tantangan atau golf?
— Paul R

21
Saya membaca "kolmogorov-kompleksitas" sebagai "kode-golf".
— DavidC

1
@DavidCarraher "kolmogorov-kompleksitas" diedit setelah pertanyaan diajukan. Penanya asli belum menentukan kriteria yang menang.
— Gareth

@ Gareth Komentar saya dibuat setelah tag "kompleksitas kolmogorov" ditambahkan tetapi sebelum tag "kode-golf" ditambahkan. Pada saat itu orang masih bertanya apakah itu pertanyaan kode-golf.
— DavidC

3
perlmonks.com/?node_id=891559 memiliki solusi perl.
— b_jonas

Jawaban:


24

J, 29 26 24 23 22 21 karakter

,.(0&<#":)"+9-+/~|i:8

Terima kasih kepada FUZxxl untuk "+triknya (saya rasa saya belum pernah menggunakannya u"vsebelumnya, heh).

Penjelasan

                  i:8  "steps" vector: _8 _7 _6 ... _1 0 1 ... 7 8
                 |     magnitude
              +/~      outer product using +
            9-         inverts the diamond so that 9 is in the center
  (      )"+           for each digit:
      #                  copy
   0&<                   if positive then 1 else 0
       ":                copies of the string representation of the digit
                         (in other words: filter out the strictly positive
                          digits, implicitly padding with spaces)
,.                     ravel each item of the result of the above
                       (necessary because the result after `#` turns each
                        scalar digit into a vector string)

Alih-alih "0], tulis "+.
— FUZxxl

Untuk satu karakter yang kurang, tulis,.0(<#":)"+9-+/~|i:8
— FUZxxl

1
Ini solusi Anda yang diterjemahkan ke 25 karakter APL:⍪↑{(0<⍵)/⍕⍵}¨9-∘.+⍨|9-⍳17
— FUZxxl

25

APL ( 33 31)

A⍪1↓⊖A←A,0 1↓⌽A←⌽↑⌽¨⍴∘(1↓⎕D)¨⍳9

Jika spasi yang memisahkan angka diperbolehkan (seperti pada entri Mathematica), itu bisa disingkat menjadi 28 26:

A⍪1↓⊖A←A,0 1↓⌽A←⌽↑⌽∘⍕∘⍳¨⍳9

Penjelasan:

  • (Program panjang :)
  • ⍳9: daftar angka 1 hingga 9
  • 1↓⎕D: ⎕Dadalah string '0123456789', 1↓menghapus elemen pertama
  • ⍴∘(1↓⎕D)¨⍳9: untuk setiap elemen N ⍳9, ambil elemen N pertama dari 1↓⎕D. Ini memberikan daftar: ["1", "12", "123", ... "123456789"] sebagai string
  • ⌽¨: membalikkan setiap elemen dari daftar ini. ["1", "21", "321" ...]

  • (Program singkat :)

  • ⍳¨⍳9: daftar 1 ke N, untuk N [1..9]. Ini memberikan daftar [[1], [1,2], [1,2,3] ... [1,2,3,4,5,6,7,8,9]] sebagai angka.
  • ⌽∘⍕∘: kebalikan dari representasi string dari masing-masing daftar ini. ["1", "2 1" ...]
  • (Sama mulai sekarang :)
  • A←⌽↑: membuat matriks dari daftar daftar, melapisi di sebelah kanan dengan spasi, dan lalu membalikkannya. Ini memberikan kuadran atas berlian. Itu disimpan dalam A.
  • A←A,0 1↑⌽A: A, dengan kebalikan dari A minus kolom pertama terpasang di sebelah kanan. Ini memberikan bagian atas dari persegi panjang. Ini kemudian disimpan dalam A lagi.
  • A⍪1↓⊖A: ⊖Aadalah A dicerminkan secara vertikal (memberikan bagian bawah), 1↓menghilangkan baris atas bagian bawah dan A⍪merupakan bagian atas di bagian atas 1↓⊖A.

5
+1 Luar Biasa. Bisakah Anda menerjemahkannya untuk kami APL yang buta huruf?
— DavidC

3
Tidakkah kode non-ascii dihitung dalam UTF-8 dan bukan kode-poin? Ini akan mendorong APL lebih dekat dengan kerabat duniawinya.
— John Dvorak

5
@ JanDvorak Tidak, karena ada halaman kode APL , yang cocok dengan seluruh karakter yang diatur ke dalam satu byte. Tapi saya pikir Anda mungkin sudah mengetahui hal ini sejak 2013.;)
— Martin Ender

23

Clojure, 191 179 byte

#(loop[[r & s](range 18)h 1](print(apply str(repeat(if(< r 8)(- 8 r)(- r 8))\ )))(doseq[m(concat(range 1 h)(range h 0 -1))](print m))(println)(if s(recur s((if(< r 8)inc dec)h))))

-12 byte dengan mengubah bagian luar doseqmenjadi loop, yang memungkinkan saya untuk menyingkirkan atom(yay).

Dobel "untuk-loop". Loop luar ( loop) melewati setiap baris, sedangkan loop dalam ( doseq) melewati setiap angka di baris, yang berada dalam rentang (concat (range 1 n) (range n 0 -1)), di mana nadalah angka tertinggi di baris.

(defn diamond []
  (let [spaces #(apply str (repeat % " "))] ; Shortcut function that produces % many spaces
    (loop [[row-n & r-rows] (range 18) ; Deconstruct the row number from the range
           high-n 1] ; Keep track of the highest number that should appear in the row
      (let [top? (< row-n 8) ; Are we on the top of the diamond?
            f (if top? inc dec) ; Decided if we should increment or decrement
            n-spaces (if top? (- 8 row-n) (- row-n 8))] ; Calculate how many prefix-spaces to print
        (print (spaces n-spaces)) ; Print prefix-spaces
        (doseq [m (concat (range 1 high-n) (range high-n 0 -1))] ; Loop over the row of numbers
          (print m)) ; Print the number
        (println)

        (if r-rows
          (recur r-rows (f high-n)))))))

Karena bug dalam logika dalam upaya pertama saya (tidak sengaja memasukkan spasi-awalan antara masing-masing nomor sebagai gantinya), saya berhasil mendapatkan ini:

1
1       2       1
1      2      3      2      1
1     2     3     4     3     2     1
1    2    3    4    5    4    3    2    1
1   2   3   4   5   6   5   4   3   2   1
1  2  3  4  5  6  7  6  5  4  3  2  1
1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
12345678987654321
1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1
1  2  3  4  5  6  7  8  9  8  7  6  5  4  3  2  1
1   2   3   4   5   6   7   8   7   6   5   4   3   2   1
1    2    3    4    5    6    7    6    5    4    3    2    1
1     2     3     4     5     6     5     4     3     2     1
1      2      3      4      5      4      3      2      1
1       2       3       4       3       2       1
1        2        3        2        1
1         2         1

Bahkan tidak benar mengabaikan bug yang jelas, tetapi itu terlihat keren.


20

Mathematica 83 49 43 54 51

Print@@#&/@(Sum[k~DiamondMatrix~17,{k,0,8}]/.0->" ")

pemformatan ditingkatkan


Dengan 3 byte disimpan berkat Kelly Lowder.

Analisis

Bagian utama dari kode Sum[DiamondMatrix[k, 17], {k, 0, 8}],, dapat diperiksa di WolframAlpha .

Berikut ini menunjukkan logika pendekatan yang mendasari, pada skala yang lebih kecil.

a = 0~DiamondMatrix~5;
b = 1~DiamondMatrix~5;
c = 2~DiamondMatrix~5;
d = a + b + c;
e = d /. 0 -> "";
Grid /@ {a, b, c, d, e}

kisi-kisi


1
David, kau mengalahkanku kali ini! :-)
— Mr.Wizard

1
Percobaan lain (55 karakter):f = Table[# - Abs@k, {k, -8, 8}] &; f[f[9]] /. n_ /; n < 1 -> "" // Grid
— DavidC

Masih ada lagi (71 karakter):Table[9 - ManhattanDistance[{9, 10}, {j, k}], {j, 18}, {k, 18}] /. n_ /; n < 1 -> "" // Grid
— DavidC

2
Grid@#@#@9&[Table[#-Abs@k,{k,-8,8}]&]/.n_/;n<1->""50 karakter.
— chyanog

Tampilan visual dari kode:ArrayPlot[Sum[k~DiamondMatrix~17, {k, 0, 8}], AspectRatio -> 2]
— DavidC

15

Python 2, 72 69 67 61

Tidak pandai:

s=str(111111111**2)
for i in map(int,s):print'%8s'%s[:i-1]+s[-i:]

1
tidak bekerja di Python 3+, yang membutuhkan parens di sekitar argumen untuk mencetak :(
— Griffin

7
@ Griffin: Dalam golf kode saya memilih Python 2 atau Python 3 tergantung pada apakah saya perlu mencetak menjadi fungsi.
— Steven Rumbalski

3
s=`0x2bdc546291f4b1`
— gnibbler

1
@gnibbler. Saran yang sangat pintar. Sayangnya, repr dari heksadesimal itu termasuk trailing 'L'.
— Steven Rumbalski

1
@gnibbler: Ini berfungsi di Python berjalan pada platform 64-bit, tetapi tidak pada platform 32-bit.
— Konrad Borowski

14

C, 79 karakter

v;main(i){for(;i<307;putchar(i++%18?v>8?32:57-v:10))v=abs(i%18-9)+abs(i/18-8);}

4
Penjelasannya tolong?
— Lucas Henrique

1
@LucasHenrique total 307 karakter. i% 18-9 adalah nilai x pada bidang kartesius yang mencerminkan dirinya sendiri pada sumbu y. i / 18-8 adalah nilai y pada bidang kartesius yang mencerminkan dirinya sendiri pada sumbu x. Jumlahkan mereka bersama untuk mendapatkan 1: 1 diagonal (yang menyebabkan pergeseran numerik terbentuk pada berlian 1: 1. (32:57) -v adalah nilai numerik unichar untuk ASCII 0-9. 10 baris baru.
— Albert Renshaw

14

Python 2, 60 59

for n in`111111111**2`:print`int('1'*int(n))**2`.center(17)

Menyalahgunakan backticks dan repunits.


Ruang setelah inkata kunci dapat dihapus, seperti yang Anda lakukan dengan printkeyboard.
— Konrad Borowski

@GlitchMr: Terima kasih! Diperbarui.
— nneonneo

Saya mendapatkan tambahan Ldi tengah tujuh garis output.
— Steven Rumbalski

Anda seharusnya tidak ... versi Python apa yang Anda gunakan?
— nneonneo

12

GolfScript, 33 31 30 karakter

Solusi GolfScript lainnya

17,{8-abs." "*10@-,1>.-1%1>n}%

Terima kasih kepada @PeterTaylor untuk char lainnya.

Versi previos:

17,{8-abs" "*9,{)+}/9<.-1%1>+}%n*

( jalankan online )

17,{8-abs" "*9,{)+}/9<.-1%1>n}%

1
Anda tidak memerlukan spasi tambahan (teks dalam pertanyaan tidak memilikinya), jadi Anda dapat melewatkan menambahkan angka ke spasi dan menyimpan satu char sebagai17,{8-abs." "*10@-,1>.-1%1>n}%
— Peter Taylor

12

Mathematica 55 50 45 41 38

(10^{9-Abs@Range[-8,8]}-1)^2/81//Grid

Grid[(10^Array[{9}-Abs[#-9]&,17]-1)^2/81]

Grafik Mathematica


1
Kerja yang sangat bagus.
— DavidC

@DavidCarraher Terima kasih: D
— chyanog

Saya menggemakan ucapan David. Bagaimana Anda membuat ini?
— Mr.Wizard

Bolehkah saya memperbarui jawaban Anda dengan modifikasi pendek yang saya tulis?
— Mr.Wizard

@ Mr.Wizard Tentu saja.
— chyanog

10

Javascript, 114

Entri pertama saya di Codegolf!

for(l=n=1;l<18;n-=2*(++l>9)-1,console.log(s+z)){for(x=n,s="";x<9;x++)z=s+=" ";for(x=v=1;x<2*n;v-=2*(++x>n)-1)s+=v}

Jika ini dapat dipersingkat lebih jauh, silakan komentar :)


sial!! Saya merindukan ruang dan membuat setengah berlian. Saya harus tidur sekarang
— Joomler

9

PHP, 92 90 karakter

<?for($a=-8;$a<9;$a++){for($b=-8;$b<9;){$c=abs($a)+abs($b++);echo$c>8?" ":9-$c;}echo"\n";}

Menghitung dan mencetak jarak posisi Manhattan dari pusat. Mencetak spasi jika kurang dari 1.

Pengguna anonim menyarankan peningkatan berikut (84 karakter):

<?for($a=-8;$a<9;$a++,print~õ)for($b=-8;$b<9;print$c>8?~ß:9-$c)$c=abs($a)+abs($b++);

2 tidak bekerja.
— Christian

Saya tahu ini sudah sangat terlambat, tetapi saya selalu ingin bermain golf ketika melihat skrip PHP. 83 byte dengan <?dilewati per meta . Juga, Anda tampaknya memiliki beberapa masalah penyandian dalam kode kedua.
— RedClover

@ Soaku Yang kedua bukan milikku. Disarankan sebagai edit untuk jawaban saya oleh pengguna anonim. Saya baru saja menambahkannya tanpa memeriksa - tidak terlalu yakin mengapa pengguna tidak mempostingnya sebagai upaya mereka sendiri. Pertanyaan meta setelah tanggal jawaban ini hampir 3 tahun.
— Gareth

Maksud saya, bahwa saya tidak termasuk <?dalam bytecount. Saya telah membuat beberapa perbaikan lainnya juga.
— RedClover

8

Arang (tidak bersaing), 13 byte

Tidak bersaing karena bahasanya jauh lebih baru dari pertanyaan.

F⁹«GX⁻⁹ιI⁺ι¹→

Cobalah online!

Bagaimana?

Menarik sembilan, berturut-turut lebih kecil, berlian nomor konsentris di atas satu sama lain:

F⁹«   Loop ι from 0 to 8:
GX     Draw a (filled) polygon with four equilateral diagonal sides
⁻⁹ι      of length 9-ι
I⁺ι¹    using str(ι+1) as the character
→       Move right one space before drawing the next one

4
Ini sekarang harus bersaing sesuai konsensus baru dalam meta.
— officialaimm

7

Gangguan Umum, 113 karakter

(defun x(n)(if(= n 0)1(+(expt 10 n)(x(1- n)))))(dotimes(n 17)(format t"~17:@<~d~>~%"(expt(x(- 8(abs(- n 8))))2)))

Pertama saya perhatikan bahwa elemen-elemen berlian dapat diekspresikan seperti:

  1   =   1 ^ 2
 121  =  11 ^ 2
12321 = 111 ^ 2

dll.

xsecara rekursif menghitung basis (1, 11, 111, dll), yang dikuadratkan, dan kemudian dicetak berpusat oleh format. Untuk membuat angka naik ke istilah tertinggi dan mundur lagi saya gunakan (- 8 (abs (- n 8)))untuk menghindari putaran kedua


7

JavaScript, 81

for(i=9;--i+9;console.log(s))for(j=9;j;s=j--^9?k>0?k+s+k:" "+s:k+"")k=i<0?j+i:j-i

6

PowerShell (2 opsi): 92 84 45 byte

1..8+9..1|%{' '*(9-$_)+[int64]($x='1'*$_)*$x}
1..9+8..1|%{' '*(9-$_)+[int64]($x='1'*$_)*$x}

Terima kasih kepada Strigoides atas petunjuk untuk menggunakan 1 ^ 2,11 ^ 2.111 ^ 2 ...


Dicukur beberapa karakter oleh:

  • Menghilangkan $w.
  • Bersarang definisi $xdi tempat penggunaan pertama.
  • Mengambil beberapa petunjuk dari solusi Rynant :
    • Menggabungkan bilangan bulat integer dengan +bukannya ,yang memungkinkan penghapusan tanda kurung di sekitar array dan lapisan bersarang di loop.
    • Digunakan 9-$_untuk menghitung panjang ruang yang dibutuhkan, alih-alih matematika dan metode objek yang lebih rumit. Ini juga menghilangkan kebutuhan $y.

Penjelasan:

1..8+9..1atau 1..9+8..1menghasilkan array bilangan bulat yang naik dari 1 hingga 9 kemudian turun kembali ke 1.

|%{... }mem-pipe array integer ke ForEach-Objectloop melalui alias bawaan %.

' '*(9-$_)+ kurangi integer saat ini dari 9, lalu buat string dari banyak ruang di awal output untuk baris ini.

[int64]($x='1'*$_)*$xmendefinisikan $xsebagai string 1s selama integer saat ini besar. Kemudian dikonversi ke int64 (diperlukan untuk output 111111111 2 dengan benar tanpa menggunakan notasi E) dan kuadrat.

masukkan deskripsi gambar di sini


1
Anda dapat menyimpan byte dengan casting untuk sebuah longbukannyaint64
— Veskah

Cara lain untuk menyimpan byte1..8+9..1|%{' '*(9-$_)+ +($x='1'*$_+'L')*$x}
— mazzy

5

Vim, 62 39 38 penekanan tombol

Terima kasih kepada @DJMcMayhem karena telah menghemat satu ton byte!

Jawaban Vim pertamaku, sangat mengasyikkan!

i12345678987654321<ESC>qqYP9|xxI <ESC>YGpHq7@q

Saya mencoba menulis angka-angka melalui rekaman, tetapi jauh lebih lama

Cobalah online!

Penjelasan:

i123 ... 321<ESC>                   Write this in insert mode and enter normal mode
qq                                  Start recording into register q
  YP                                Yank this entire line and Paste above
    9|                              Go to the 9th column
      xx                            Delete character under cursor twice
        I <ESC>                     Go to the beginning of the line and insert a space and enter normal mode
               Y                    Yank this entire line
                G                   Go to the last line
                 p                  Paste in the line below
                  H                 Go to the first line
                   q                End recording
                    7@q             Repeat this 7 times

SUNTING:

Saya menggunakan Hbukannya ggmenyimpan 1 byte


Anda dapat menghapus madan mengubah `ai<space>ke I<space>.
— DJMcMayhem

Selain itu, Anda mungkin dapat menghapus tahap 3 jika Anda mengubah tahap 1 menjadi menempel di atas dan di bawah.
— DJMcMayhem

@DJMcMayhem Terima kasih atas sarannya! Saya awalnya berpikir tentang memperkenalkan register baru untuk bit yang disalin, tetapi ini jauh lebih pendek!
— Kritixi Lithos

5

APL (Dyalog Classic) , 20 19 byte

(⍉⊢⍪1↓⊖)⍣2⌽↑,⍨\1↓⎕d

Cobalah online!

⎕d adalah digit '0123456789'

1↓drop the first ( '0')

,⍨\ swap catenate scan, yaitu awalan terbalik '1' '21' '321' ... '987654321'

↑ campur menjadi matriks yang diisi dengan spasi:

1
21
321
...
987654321

⌽ membalikkan matriks secara horizontal

(... )⍣2lakukan ini dua kali:

⍉⊢⍪1↓⊖transposisi ( ⍉) dari matriks itu sendiri ( ⊢) disatukan secara vertikal ( ⍪) dengan matriks terbalik secara vertikal ( ⊖) tanpa baris pertama ( 1↓)


4

R, 71 karakter

Sebagai catatan:

s=c(1:9,8:1);for(i in s)cat(rep(" ",9-i),s[0:i],s[(i-1):0],"\n",sep="")

+1 - dapat menyimpan beberapa denganmessage(rep(" ",9-i),s[c(1:i,i:1-1)])
— flodel

@flodel Anda harus mencatat bahwa itu mencetak ke stderr, dan Anda juga bisa melakukannya for(i in s<-c(1:9,8:1))...untuk menyimpan byte
— Giuseppe


4

k ( 64 50 karakter)

-1'(::;1_|:)@\:((|!9)#'" "),'$i*i:"J"$(1+!9)#'"1";

Metode lama:

-1',/(::;1_|:)@\:((|!9)#\:" "),',/'+(::;1_'|:')@\:i#\:,/$i:1+!9;


(1+!9)#'"1"is,\9#"1"
— ngn

4

CJam, 31 27 byte

CJam jauh lebih baru dari tantangan ini, jadi jawaban ini tidak memenuhi syarat untuk diterima. Namun, ini adalah tantangan kecil Sabtu malam yang rapi. ;)

8S*9,:)+9*9/2%{_W%1>+z}2*N*

Uji di sini.

Idenya adalah untuk membentuk kuadran kiri atas terlebih dahulu. Inilah cara kerjanya:

Pertama, bentuk string " 123456789", gunakan 8S*9,:)+. String ini panjangnya 17 karakter. Sekarang kita ulangi string 9 kali, dan kemudian membaginya menjadi substring dengan panjang 9 dengan 9/. Ketidakcocokan antara 9 dan 17 akan mengimbangi setiap baris satu karakter ke kiri. Mencetak setiap substring pada barisnya sendiri yang kita dapatkan:

        1
23456789 
       12
3456789  
      123
456789   
     1234
56789    
    12345
6789     
   123456
789      
  1234567
89       
 12345678
9        
123456789

Jadi jika kita hanya membuang setiap baris lain (yang dengan mudah bekerja dengan melakukan 2%), kita mendapatkan satu kuadran yang diinginkan:

        1
       12
      123
     1234
    12345
   123456
  1234567
 12345678
123456789

Akhirnya, kami merefleksikan ini dua kali, mentransposisi kisi-kisi di antaranya untuk memastikan bahwa dua operasi pemantulan berjalan dengan sumbu yang berbeda. Mirroring itu sendiri adil

_      "Duplicate all rows.";
 W%    "Reverse their order.";
   1>  "Discard the first row (the centre row).";
     + "Add the other rows.";

Terakhir, kami hanya bergabung dengan semua baris dengan baris baru, dengan N*.


3

GolfScript, 36 karakter

Dengan asumsi bahwa ini dimaksudkan sebagai tantangan , inilah solusi dasar GolfScript:

9,.);\-1%+:a{a{1$+7-.0>\" "if}%\;n}%

3

Ruby, 76 karakter

def f(a)a+a.reverse[1..-1]end;puts f [*1..9].map{|i|f([*1..i]*'').center 17}

Perbaikan disambut baik. :)


1
69 karakter:f=->x{[*1..x]+[*1...x].reverse};puts f[9].map{|i|(f[i]*'').center 17}
— Patrick Oscity

Komentar yang bagus, saya tidak tahu '...' dan tidak mengerti bagaimana ini bisa berhasil.
— GB

60 karakter:[*-8..8].map{|i|puts' '*i.abs+"#{eval [?1*(9-i.abs)]*2*?*}"}
— GB

3

Befunge-93 , 155 chars

9:v:<,+55<v5*88<v-\9:$_68v
> v>     ^>3p2vpv  -1<!  *
, 1^  2p45*3+9<4:    ,:  +
g -^_75g94+4pg7^!    +^ ,<
1 : ^ `0    :-1$_:68*^$
^1_$:55+\-0\>:#$1-#$:_^

Cobalah online!

Pasti bisa bermain golf lagi, tapi ini adalah program Funge pertamaku dan kepalaku sudah sakit. Meskipun begitu, banyak bersenang-senang


3

JavaScript, 170 byte

Golf kode pertama saya :)

Golf

a="";function b(c){a+=" ".repeat(10-c);for(i=1;i<c;i++)a+=i;for(i=2;i<c;i++)a+=c-i;a+="\n";}for(i=2;i<11;i++)b(i);for(i=9;i>1;i--)b(i);document.write("<pre>"+a+"</pre>");

Tidak disatukan

var str = "";
function row(line) {
    str += " ".repeat(10 - line);
    for (var i = 1; i < line; i++) {
        str += i;
    }
    for (var i = 2; i < line; i++) {
        str += line - i;
    }
    str += "\n";
}
for (var line = 2; line < 11; line++) {
    row(line);
}
for (var line = 9; line > 1; line--) {
    row(line);
}
document.write("<pre>" + str + "</pre>");

Selamat datang di PPCG!
— Евгений Новиков

2

Perl 56 54 karakter

Menambahkan 1 char untuk -pswitch.

Menggunakan kuadrat kuadrat untuk menghasilkan urutan.

s//12345678987654321/;s|(.)|$/.$"x(9-$1).(1x$1)**2|eg

2

Perl, 43 +1

menambahkan +1 -Eyang diperlukan untuksay

say$"x(9-$_).(1x$_)**2for 1..9,reverse 1..8

sunting: sedikit dipersingkat


2

Python, 65

for i in map(int,str(int('1'*9)**2)):print' '*(9-i),int('1'*i)**2

Coba tambahkan I=int;kode Anda dan gantikan semua contoh selanjutnya intdenganI
— Cyoce

@Cyoce saya sudah memikirkan itu. Ini akan menghemat 2 karakter setiap kali intdigunakan, dan itu digunakan 3 kali, sehingga menghemat 6 karakter dengan biaya 6 karakter.
— cardboard_box

2

Groovy 77 75

i=(-8..9);i.each{a->i.each{c=a.abs()+it.abs();print c>8?' ':9-c};println""}

versi lama:

(-8..9).each{a->(-8..9).each{c=a.abs()+it.abs();print c>8?' ':9-c};println""}

menambahkan solusi 57 char groovy. Anda dapat mengganti keduanya eachdengan anyuntuk menyimpan dua karakter.
— Matias Bjarland

2

Scala - 86 karakter

val a="543210/.-./012345";for(i<-a){for(j<-a;k=99-i-j)print(if(k<1)" "else k);println}

2

Javascript, 137

Dengan rekursi:

function p(l,n,s){for(i=l;i;s+=" ",i--);for(i=1;i<=n;s+=i++);for(i-=2;i>0;s+=i--);return(s+="\n")+(l?p(l-1,n+1,"")+s:"")}alert(p(8,1,""))

Pertama kali di CG :)

Atau 118

Jika saya dapat menemukan implementasi JS yang dijalankan 111111111**2dengan presisi yang lebih tinggi.
(Di sini: 12345678987654320).

a="1",o="\n";for(i=0;i<9;i++,o+="         ".substr(i)+a*a+"\n",a+="1");for(i=8;i;i--)o+=o.split("\n")[i]+"\n";alert(o)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.