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.

Eric Wilson
sumber
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)
FireFly
sumber
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.
marinus
sumber
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.

Carcigenicate
sumber
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

DavidC
sumber
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:]
Steven Rumbalski
sumber
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);}
bayi-kelinci
sumber
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.

nneonneo
sumber
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}%
Howard
sumber
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

chyanog
sumber
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 :)

tommeding
sumber
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++);
Gareth
sumber
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
DLosc
sumber
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

Strigoides
sumber
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
salinan
sumber
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

Iszi
sumber
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

Kritixi Lithos
sumber
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↓)

ngn
sumber
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="")
Paolo
sumber
+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
64 bytes
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;

skeevey
sumber
(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*.

Martin Ender
sumber
3

GolfScript, 36 karakter

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

9,.);\-1%+:a{a{1$+7-.0>\" "if}%\;n}%
Ilmari Karonen
sumber
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. :)

Mark Reed
sumber
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

Leo
sumber
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>");
Cr4xy
sumber
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
ardnew
sumber
2

Perl, 43 +1

menambahkan +1 -Eyang diperlukan untuksay

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

sunting: sedikit dipersingkat

perl Cina goth
sumber
2

Python, 65

for i in map(int,str(int('1'*9)**2)):print' '*(9-i),int('1'*i)**2
kotak kardus
sumber
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""}
Marco Martinelli
sumber
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}
Rex Kerr
sumber
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)
Nippey
sumber