Bu elması yazdır


76

Bu soru ofisimdeki bir virüs gibi yayılıyor. Çok çeşitli yaklaşımlar var:

Aşağıdakileri yazdırın:

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

Cevaplar, karakter sayısı daha az olan karakterlerde daha iyi olur.


4
Kazanan kriter nedir? Ve bu bir meydan okuma mı yoksa bir golf mü?
Paul R,

21
"Kolmogorov karmaşıklığı" nı "kod golf" olarak okudum.
DavidC

1
@DavidCarraher "kolmogorov karmaşıklığı" sorusu sorulduktan sonra düzenlendi. Orijinal sorgulayıcı henüz kazanma kriterlerini belirtmedi.
Gareth

@Gareth Benim yorumum "kolmogorov-complexity" etiketi eklendikten sonra ancak "code-golf" etiketi eklenmeden önce yapıldı. O zamanlar insanlar hala bir kod golf sorusu olup olmadığını soruyorlardı.
DavidC

3
perlmonks.com/?node_id=891559 , perl çözümlerine sahiptir.
b_jonas

Yanıtlar:


24

J, 29 26 24 23 22 21 karakter

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

Numara için FUZxxl'e teşekkürler "+(daha önce hiç kullandığımı sanmıyorum u"v, heh).

açıklama

                  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)

Bunun yerine "0], yazın "+.
FUZxxl

Daha az karakter için, yazmak,.0(<#":)"+9-+/~|i:8
FUZxxl

1
İşte çözümünüz 25 karaktere ⍪↑{(0<⍵)/⍕⍵}¨9-∘.+⍨|9-⍳17
APL'ye

25

APL ( 33 31)

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

Rakamları ayıran boşluklara izin verilirse (Mathematica girişinde olduğu gibi), 28 26'ya kısaltılabilir :

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

Açıklama:

  • (Uzun program :)
  • ⍳9: 1'den 9'a kadar olan sayıların bir listesi
  • 1↓⎕D: ⎕D'0123456789' 1↓dizgisidir, ilk elemanı kaldırır
  • ⍴∘(1↓⎕D)¨⍳9: her N elemanı ⍳9için, ilk N elemanı al 1↓⎕D. Bu bir liste verir: ["1", "12", "123", ... "123456789"] karakter dizileri olarak
  • ⌽¨: bu listenin her bir elemanını ters çevirir. ["1", "21", "321" ...]

  • (Kısa program :)

  • ⍳¨⍳9: N [1..9] için 1 - N listesi. Bu, sayı olarak [[1], [1,2], [1,2,3] ... [1,2,3,4,5,6,7,8,9]] listesini verir.
  • ⌽∘⍕∘: Bu listelerin her birinin dize gösteriminin tersi. ["1", "2 1" ...]
  • (Bundan böyle aynı :)
  • A←⌽↑: listelerden bir matris yapar, sağda boşluklarla doldurur ve sonra bunu tersine çevirir. Bu, elmasın üst kadranını verir. A da saklanır.
  • A←A,0 1↑⌽A: A eksi A'nın tersi ile ilk sütun sağa takılı. Bu dikdörtgenin üst yarısını verir. Bu daha sonra tekrar A'da saklanır.
  • A⍪1↓⊖A: ⊖ADikey olarak yansıtılmış bir A (alt yarısı verir), alt yarının 1↓üst sırasını kaldırır A⍪ve üst yarısı üsttedir 1↓⊖A.

5
+1 Şaşırtıcı. APL okuma yazma bilmeyenler için tercüme edebilir misiniz?
DavidC

3
Ascii olmayan kod, kod noktaları yerine UTF-8'de sayılmamalıdır mı? Bu APL'yi dünyevi akrabalarına yaklaştıracaktı.
John Dvorak

5
@JanDvorak Hayır, çünkü karakterin tamamını tek bir bayta sığdıran bir APL kod sayfası var . Fakat bence 2013'ten beri bir noktada bunu çözdünüz.;)
Martin Ender

23

Clojure, 191 179 bayt

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

Dış değiştirerek -12 bayt doseqa loopbeni kurtulmak için izin, atom(yay).

Bir çift "for-loop". Dış döngü ( loopiç döngü (iken), her bir sıranın üzerinde gider doseq) aralığındadır aralıksız her numara üzerine çıkarsa (concat (range 1 n) (range n 0 -1)), nüst üste, en yüksek sayıdır.

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

İlk denememdeki mantıktaki bir hata nedeniyle (yanlışlıkla her sayı arasına önek boşlukları ekleyerek), şunu almayı başardım:

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

Belli bir hatayı görmezden gelmek bile doğru değil, ama havalı görünüyordu.


20

Mathematica 83 49 43 54 51

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

biçimlendirme geliştirilmiş


Kelly Lowder sayesinde 3 bayt kaydedildi.

analiz

Kodun ana kısmı Sum[DiamondMatrix[k, 17], {k, 0, 8}], WolframAlpha'da kontrol edilebilir .

Aşağıdaki yaklaşımın altında yatan mantığı daha küçük ölçekte göstermektedir.

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}

ızgaraları


1
David, bu sefer beni yendin! :-)
Mr.Wizard

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

Yine bir başka (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

Kodun görsel bir gösterimi:ArrayPlot[Sum[k~DiamondMatrix~17, {k, 0, 8}], AspectRatio -> 2]
DavidC

15

Python 2, 72 69 67 61

Zeki değil:

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

1
Python 3+'de çalışmaz, bu da argümanların etrafındakilerin basılmasını gerektirir :(
Griffin

7
@Griffin: Golf kodunda, işlev olarak yazdırmam gerekip gerekmediğine bağlı olarak Python 2 veya Python 3'ü seçiyorum.
Steven Rumbalski,

3
s=`0x2bdc546291f4b1`
gnibbler

1
@gnibbler. Çok akıllıca bir öneri. Ne yazık ki, bu onaltılık repr bir iz içerir 'L'.
Steven Rumbalski,

1
@gnibbler: Python'da 64 bit platformlarda çalışır, ancak 32 bit platformlarda çalışmaz.
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
Açıklama lütfen?
Lucas Henrique,

1
@LucasHenrique toplam 307 karakter. % 18-9, kendini y ekseninde yansıtan kartezyen düzlemde x değeridir. i / 18-8 kartezyen düzlemde y eksenidir ve kendini x ekseninde yansıtır. 1 oluşturmak için sayısal vardiya nedenleri (1 diyagonal: 1 almak için onları bir arada toplar... 1 elmas (32:57) ASCII 0-9 için unichar sayısal değerdir -v 10 yeni hattı
Albert Renshaw

14

Python 2, 60 59

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

Kötüye kullanım backticks ve tekrarlar.


inAnahtar kelimeden sonraki boşluk , tıpkı printklavye ile yaptığınız gibi kaldırılabilir .
Konrad Borowski

@GlitchMr: Teşekkürler! Güncellenmiş.
nneonneo

LOrtadaki yedi satırlık çıktıda bir ekstra alıyorum .
Steven Rumbalski

Yapmamalısın ... hangi Python sürümünü kullanıyorsun?
nneonneo

12

GolfScript, 33 31 30 karakter

Başka bir GolfScript çözümü

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

@PeterTaylor'a başka bir karakter için teşekkür ederiz .

Önceki sürümler:

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

( çevrimiçi çalıştır )

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

1
Sondaki boşluklara ihtiyacınız yoktur (söz konusu metinde bunlara sahip değildir), böylece sayıları sayılara ekleyerek atlayabilir ve bir karakter olarak kaydedebilirsiniz17,{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]

Mathematica grafikleri


1
Güzel iş.
DavidC

@DavidCarraher Teşekkürler: D
chyanog 23.03

David'in sözünü yankı ediyorum. Bununla nasıl başa çıktın?
Mr.Wizard

Cevabınızı yazdığım en kısa değişiklikle güncelleyebilir miyim?
Sihirbaz,

@ Bay Sihirbazı Kesinlikle.
Chyanog

10

Javascript, 114

Codegolf'a ilk girişim!

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}

Bu daha fazla kısaltılabilirse, lütfen yorum yapın :)


lanet olsun!! Alanı kaçırdım ve yarım elmas yaptım. Şimdi
uyumalıyım

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

Konumun Manhattan uzaklığını merkezden hesaplar ve yazdırır. 1'den küçükse boşluk yazdırır.

İsimsiz bir kullanıcı aşağıdaki iyileştirmeyi önerdi (84 karakter):

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

İkincisi çalışmıyor.
Hristiyan

Çok geç olduğunu biliyorum, ancak PHP komut dosyalarını gördüğümde her zaman golf oynamaya ihtiyacım var. 83 bayt ile <?başına atlanır meta . Ayrıca, ikinci kodda bazı kodlama sorunlarınız var.
RedClover

@Soaku İkincisi benim değil. Cevabımın isimsiz bir kullanıcı tarafından düzenlenmesi önerildi. Kontrol etmeden yeni ekledim - kullanıcının neden sadece kendi girişimi olarak yayınlamadığından emin değilim. Meta soru bu cevabı neredeyse 3 yıla atar.
Gareth

Demek istediğim, <?bayt sayımına dahil etmem. Ben de başka geliştirmeler yaptım.
RedClover

8

Ortak Lisp, 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)))

İlk önce, elmasın elementlerinin şöyle ifade edilebileceğini fark ettim:

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

vb.

xkare olan ve sonra ortalanarak basılan tabanı (1, 11, 111 vb.) özyinelemeli olarak hesaplar format. Sayıların en yüksek terime çıkmasını ve tekrar geri dönmesini (- 8 (abs (- n 8)))sağlamak için ikinci bir döngüden kaçınırdım


8

Kömür (rekabet etmeyen), 13 bayt

Rekabetçi değil, çünkü dil sorudan çok daha yeni.

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

Çevrimiçi deneyin!

Nasıl?

Üst üste dokuz, ardışık olarak küçük, eşmerkezli sayı elmaslarını çizer:

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
Bu şimdi metadaki yeni fikir birliğine göre rekabet ediyor olmalı .
officialaimm

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 seçenek): 92 84 45 bayt

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

1 ^ 2,11 ^ 2,111 ^ 2 kullanmak için ipucu için Strigoides sayesinde ...


Bazı karakterleri traşla:

  • Ortadan kaldırmak $w.
  • $xİlk kullanım yerine tanımını iç içe geçirin .
  • Rynant'ın çözümünden bazı ipuçları aldı :
    • Tamsayı dizileri ile bir araya getirilmiş, +bunun yerine dizilerin ,etrafındaki parantezin ortadan kaldırılmasına ve ilmeklerin içine yerleştirilmiş bir tabakaya yer verilmiştir.
    • Kullanılan 9-$_yerine daha karmaşık matematik ve nesne yöntemleri, gerekli alanların uzunluğunu hesaplamak için. Bu aynı zamanda ihtiyacı da ortadan kaldırdı $y.

Açıklama:

1..8+9..1veya 1..9+8..11'den 9'a kadar artan, 1'e inen bir tam sayı dizisi oluşturur.

|%{... }tamsayılı diziyi ForEach-Objectyerleşik takma ad aracılığıyla bir döngüye dönüştürür %.

' '*(9-$_)+ Geçerli tamsayıyı 9'dan çıkarır, daha sonra bu satır için çıktının başlangıcında bu kadar boşluktan oluşan bir dize oluşturur.

[int64]($x='1'*$_)*$xGeçerli tamsayı büyük olduğu sürece s $xdizesini tanımlar 1. Daha sonra int64'e dönüştürülür ( E gösterimini kullanmadan 111111111 2'yi düzgün şekilde üretmek için gereklidir ) ve kare.

görüntü tanımını buraya girin


1
Bir bayt'ı longyerine atama yaparak kaydedebilirsinizint64
Veskah

Bir byte kaydetmek için başka bir yol1..8+9..1|%{' '*(9-$_)+ +($x='1'*$_+'L')*$x}
şaşımış

5

Vim, 62 39 38 tuş vuruşlarını

Bir ton bayt tasarrufu için @DJMcMayhem'e teşekkürler!

İlk Vim cevabım, çok heyecan verici!

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

Numaraları bir kayıt yoluyla yazmaya çalıştım, ama çok daha uzun

Çevrimiçi deneyin!

Açıklama:

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

DÜZENLE:

Bunun Hyerine kullandım ggve 1 bayt kurtardım


Sen silebilir mave değiştirmek `ai<space>için I<space>.
DJMcMayhem

Ayrıca, Aşama 1'i yukarıda ve aşağı yapıştırmak için değiştirirseniz, Aşama 3'ü silebilirsiniz .
DJMcMayhem

@DJMcMayhem Öneriniz için teşekkür ederiz! Başlangıçta kopyalanan bitler için yeni bir kayıt tanıtmayı düşünüyordum, ama bu çok daha kısa!
Kritixi Lithos

5

APL (Dyalog Klasik) , 20 19 bayt

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

Çevrimiçi deneyin!

⎕d rakamlar '0123456789'

1↓ilkini bırak ( '0')

,⍨\ değiştirilmiş katener taraması, örneğin ters çevrilmiş önekler '1' '21' '321' ... '987654321'

boşluklarla doldurulmuş bir matrise karıştırın:

1
21
321
...
987654321

matrisi yatay olarak ters çevir

(... )⍣2bunu iki kez yapın:

⍉⊢⍪1↓⊖matrisin kendisinin ( ) transpozisyonu ( ) , dikey olarak ters çevrilmiş matrisle ( ) ilk satırı ( 1↓) olmadan dikey olarak birleştirilmiştir ( )


4

R, 71 karakter

Kayıtlar için:

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

+1 - ile biraz tasarruf edebilirsinizmessage(rep(" ",9-i),s[c(1:i,i:1-1)])
flodel

@ flodel, bunun stderr'e basıldığını ve for(i in s<-c(1:9,8:1))...bir baytı kurtarmak için de yapabileceğinizi not etmeniz gerekir
Giuseppe


4

k ( 64 50 karakter)

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

Eski yöntem:

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


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

4

CJam, 31 27 bayt

CJam bu mücadeleden çok daha yeni, bu nedenle bu cevap kabul edilmeye uygun değil. Bu olsa da, temiz küçük bir Cumartesi akşamı mücadelesiydi. ;)

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

Burada test et.

Fikir ilk önce sol üst kadranı oluşturmaktır. İşte bu nasıl çalışır:

İlk önce, dizgiyi " 123456789"kullanarak 8S*9,:)+. Bu dize 17 karakter uzunluğundadır. Şimdi dizgiyi 9 kez tekrarlıyoruz ve sonra uzunluğu 9 olan alt dizgilere bölüyoruz 9/. 9 ile 17 arasındaki uyumsuzluk diğer tüm satırları bir karakter sola kaydırır. Her alt diziyi kendi satırına basarız:

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

Bu nedenle, diğer bütün satırları (uygun şekilde çalıştıran 2%) düşürürsek , istediğiniz gibi bir kadran elde ederiz:

        1
       12
      123
     1234
    12345
   123456
  1234567
 12345678
123456789

Son olarak, iki yansıtma işleminin farklı eksenler boyunca ilerlemesini sağlamak için ızgarayı aralarında geçirerek bunu iki kez yansıtıyoruz. Yansıtma kendisi sadece

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

Son olarak, sadece yeni satırlarla tüm satırlara katılıyoruz N*.


3

GolfScript, 36 karakter

Bunun mücadelesi anlamına geldiğini varsayarsak , işte temel bir GolfScript çözümü:

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}

İyileştirmeler hoş geldiniz. :)


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

Harika yorum, '...' bilmiyordum ve bunun nasıl çalışabileceğini anlamadım.
GB

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

3

Befunge-93 , 155 karakter

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-#$:_^

Çevrimiçi deneyin!

Kesinlikle daha çok golf oynayabilirdi, ama bu benim ilk Funge programım ve kafam çoktan ağrıyor. Yine de çok eğlendim


3

JavaScript, 170 bayt

İlk golf kodum :)

golfed

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

Ungolfed

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

PPCG'ye Hoşgeldiniz!
Евгений Новиков

2

Perl 56 54 karakter

-pGeçiş için 1 karakter eklendi .

Diziyi oluşturmak için kare birimleri kullanır.

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

2

Perl, 43 + 1

için +1 ilave -Eiçin gereklidirsay

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

düzenleme: biraz kısaltılmış


2

Python, 65

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

I=int;Kodunuzu hazırlamayı ve sonraki tüm örnekleriniintI
Cyoce

@Cyoce Bunu düşündüm. Her seferinde 2 karakter intkazandırır ve 3 defa kullanılır, bu yüzden 6 karaktere 6 karakter kazandırır.
cardboard_box

2

Harika 77 75

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

eski versiyon:

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

57 char groovy çözeltisi eklendi. Sen yerini alabilir hem eachsahip anyiki karakter kaydedin.
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

Özyineleme ile:

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

CG'de ilk kez :)

Veya 118

Daha 111111111**2yüksek hassasiyetle çalışan bir JS uygulaması bulabilirsem .
(Burada: 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)
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.