Drucken Sie diesen Diamanten


76

Diese Frage hat sich wie ein Virus in meinem Büro verbreitet. Es gibt verschiedene Ansätze:

Drucken Sie Folgendes aus:

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

Antworten werden in Zeichen gewertet, wobei weniger Zeichen besser sind.


4
Was ist das Gewinnkriterium? Und ist das eine Herausforderung oder ein Golf?
Paul R

21
Ich las "Kolmogorov-Komplexität" als "Code-Golf".
DavidC

1
@DavidCarraher "Kolmogorov-Komplexität" wurde bearbeitet, nachdem die Frage gestellt wurde. Der ursprüngliche Fragesteller hat die Gewinnkriterien noch nicht angegeben.
Gareth

@Gareth Mein Kommentar wurde abgegeben, nachdem das Tag "kolmogorov-complexity" hinzugefügt wurde, aber bevor das Tag "code-golf" hinzugefügt wurde. Damals wurde noch gefragt, ob es sich um eine Code-Golf-Frage handele.
DavidC

3
perlmonks.com/?node_id=891559 enthält Perl-Lösungen.
b_jonas

Antworten:


24

J, 29 26 24 23 22 21 Zeichen

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

Danke an FUZxxl für den "+Trick (ich glaube nicht, dass ich ihn jemals benutzt habe u"v, heh).

Erläuterung

                  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)

Statt "0]schreiben "+.
FUZxxl

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

1
Hier ist Ihre Lösung in 25 APL-Zeichen übersetzt:⍪↑{(0<⍵)/⍕⍵}¨9-∘.+⍨|9-⍳17
FUZxxl

25

APL ( 33 31)

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

Wenn Leerzeichen zwischen den Zahlen zulässig sind (wie im Mathematica-Eintrag), kann dies auf 28 26 verkürzt werden :

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

Erläuterung:

  • (Langes Programm :)
  • ⍳9: eine Liste der Nummern 1 bis 9
  • 1↓⎕D: ⎕DIst die Zeichenfolge '0123456789', 1↓wird das erste Element entfernt
  • ⍴∘(1↓⎕D)¨⍳9: ⍳9Nimm für jedes Element N von die ersten N Elemente von 1↓⎕D. Dies gibt eine Liste: ["1", "12", "123", ... "123456789"] als Zeichenfolgen
  • ⌽¨: kehrt jedes Element dieser Liste um. ["1", "21", "321" ...]

  • (Kurzprogramm :)

  • ⍳¨⍳9: die Liste von 1 bis N, für N [1..9]. Dies ergibt eine Liste [[1], [1,2], [1,2,3] ... [1,2,3,4,5,6,7,8,9]] als Zahlen.
  • ⌽∘⍕∘: die Umkehrung der Zeichenfolgendarstellung jeder dieser Listen. ["1", "2 1" ...]
  • (Das selbe von jetzt an :)
  • A←⌽↑: Erstellt eine Matrix aus der Liste der Listen, füllt sie rechts mit Leerzeichen auf und kehrt diese um. Dies ergibt den oberen Quadranten des Diamanten. Es ist in A gespeichert.
  • A←A,0 1↑⌽A: A, wobei die Rückseite von A minus der ersten Spalte rechts angehängt ist. Dies ergibt die obere Hälfte des Rechtecks. Dies wird dann wieder in A gespeichert.
  • A⍪1↓⊖A: ⊖Aist A vertikal gespiegelt (wobei die untere Hälfte angegeben wird), 1↓entfernt die obere Reihe der unteren Hälfte und A⍪liegt die obere Hälfte darüber 1↓⊖A.

5
+1 Erstaunlich. Könnten Sie es für uns APL Analphabeten übersetzen?
DavidC

3
Sollte nicht ASCII-fremder Code in UTF-8 anstelle von Codepunkten gezählt werden? Dies würde APL näher zu seinen irdischen Verwandten bringen.
John Dvorak

5
@JanDvorak Nein, da es eine APL-Codepage gibt , die den gesamten Zeichensatz in ein einziges Byte passt. Aber ich denke, Sie haben das wahrscheinlich irgendwann seit 2013 herausgefunden.;)
Martin Ender

23

Clojure, 191 179 Bytes

#(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 Bytes durch Ändern des äußeren doseqin ein loop, wodurch ich das atom(yay) loswerden konnte .

Eine doppelte "for-Schleife". Die äußere Schleife ( loop) geht über jede Zeile, während die innere Schleife ( doseq) über jede Nummer in der Zeile geht, die sich in dem Bereich befindet (concat (range 1 n) (range n 0 -1)), in dem nsich die höchste Nummer in der Zeile befindet.

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

Aufgrund eines Fehlers in der Logik bei meinem ersten Versuch (das versehentliche Einfügen der Präfix-Leerzeichen zwischen den einzelnen Nummern) gelang mir Folgendes:

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

Nicht einmal richtig ignoriert den offensichtlichen Fehler, aber es sah cool aus.


20

Mathematica 83 49 43 54 51

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

Formatierung verbessert


Mit 3 Bytes dank Kelly Lowder gespart.

Analyse

Der Hauptteil des Codes Sum[DiamondMatrix[k, 17], {k, 0, 8}]kann auf WolframAlpha überprüft werden .

Das Folgende zeigt die zugrunde liegende Logik des Ansatzes in kleinerem Maßstab.

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}

Gitter


1
David, du hast mich dieses Mal geschlagen! :-)
Mr.Wizard

1
Ein weiterer Versuch (55 Zeichen):f = Table[# - Abs@k, {k, -8, 8}] &; f[f[9]] /. n_ /; n < 1 -> "" // Grid
DavidC

Noch eine (71 Zeichen):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 Zeichen.
Chyanog

Eine visuelle Anzeige des Codes:ArrayPlot[Sum[k~DiamondMatrix~17, {k, 0, 8}], AspectRatio -> 2]
DavidC

15

Python 2, 72 69 67 61

Nicht schlau:

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

1
Funktioniert nicht in Python 3+, bei dem die Argumente mit Parens versehen werden müssen :(
Griffin

7
@Griffin: Im Codegolf wähle ich Python 2 oder Python 3, je nachdem, ob ich print als Funktion benötige.
Steven Rumbalski

3
s=`0x2bdc546291f4b1`
Knabber

1
@knabber. Sehr kluger Vorschlag. Leider enthält die Repräsentation dieses Hexadezimalzeichens ein Trailing 'L'.
Steven Rumbalski

1
@gnibbler: Dies funktioniert in Python auf 64-Bit-Plattformen, jedoch nicht auf 32-Bit-Plattformen.
Konrad Borowski

14

C 79 Zeichen

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
Erklärung bitte?
Lucas Henrique

1
@LucasHenrique Insgesamt 307 Zeichen. i% 18-9 ist der x-Wert in der kartesischen Ebene, der sich auf der y-Achse spiegelt. i / 18-8 ist der y-Wert in der kartesischen Ebene, der sich selbst auf der x-Achse widerspiegelt. Sum sie zusammen 1 zu erhalten: 1 Diagonale (die numerische Verschiebung verursacht auf 1 zu bilden... 1 Diamanten (32:57) -v für ASCII 0-9 unichar numerischen Wert ist 10 neue Linie
Albert Renshaw

14

Python 2, 60 59

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

Missbrauch von Backticks und Repunits.


Das Leerzeichen nach dem inSchlüsselwort kann wie bei der printTastatur entfernt werden.
Konrad Borowski

@GlitchMr: Danke! Aktualisiert.
Nneonneo

Ich bekomme ein Extra Lin den mittleren sieben Ausgabezeilen.
Steven Rumbalski

Sie sollten nicht ... welche Version von Python verwenden Sie?
Nneonneo

12

GolfScript, 33 31 30 Zeichen

Eine weitere GolfScript-Lösung

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

Vielen Dank an @PeterTaylor für einen weiteren Char.

Vorherige Versionen:

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

( online laufen )

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

1
Sie brauchen keine nachgestellten Leerzeichen (der Text in der Frage enthält keine Leerzeichen), daher können Sie das Hinzufügen der Zahlen zu den Leerzeichen überspringen und ein Zeichen als17,{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-Grafiken


1
Sehr gute Arbeit.
DavidC

@ DavidCarraher Vielen Dank: D
Chyanog

Ich stimme Davids Bemerkung zu. Wie bist du darauf gekommen?
Mr.Wizard

Darf ich Ihre Antwort mit der kürzeren Änderung aktualisieren, die ich geschrieben habe?
Mr.Wizard

@ Mr.Wizard Sicher.
Chyanog

10

Javascript, 114

Mein erster Eintrag bei 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}

Wenn dies noch weiter gekürzt werden kann, bitte kommentieren :)


verdammt!! Ich habe den Raum verpasst und einen halben Diamanten gemacht. Ich muss jetzt schlafen
Joomler

9

PHP, 92 90 Zeichen

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

Berechnet und druckt die Manhattan-Entfernung der Position vom Zentrum. Gibt ein Leerzeichen aus, wenn es kleiner als 1 ist.

Ein anonymer Benutzer schlug die folgende Verbesserung vor (84 Zeichen):

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

2. funktioniert nicht
Christian

Ich weiß, dass es sehr spät ist, aber ich muss immer Golf spielen, wenn ich PHP-Skripte sehe. 83 Bytes mit <?pro Meta übersprungen . Außerdem scheinen Sie einige Codierungsprobleme im zweiten Code zu haben.
RedClover

@ Soaku Die zweite ist nicht meine. Es wurde von einem anonymen Benutzer als Änderung meiner Antwort vorgeschlagen. Ich habe es nur hinzugefügt, ohne es zu überprüfen - ich bin mir nicht sicher, warum der Benutzer es nicht wirklich als eigenen Versuch gepostet hat. Die Meta-Frage datiert diese Antwort um fast 3 Jahre nach.
Gareth

Ich meinte, dass ich nicht <?in den bytecount mit einbeziehe. Ich habe auch einige andere Verbesserungen vorgenommen.
RedClover

8

Common Lisp, 113 Zeichen

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

Zuerst bemerkte ich, dass die Elemente des Diamanten so ausgedrückt werden konnten:

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

usw.

xBerechnet rekursiv die Basis (1, 11, 111 usw.), die im Quadrat angegeben und dann zentriert durch gedruckt wird format. Damit die Zahlen zum höchsten Term auf- und wieder absteigen, habe ich (- 8 (abs (- n 8)))eine zweite Schleife vermieden


8

Holzkohle (nicht konkurrierend), 13 Bytes

Nicht konkurrieren, weil die Sprache (viel) neuer ist als die Frage.

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

Probieren Sie es online!

Wie?

Zeichnet neun aufeinanderfolgend kleinere konzentrische Diamanten übereinander:

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
Dies sollte nun konkurrieren nach neuem Konsens in Meta.
offiziell

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 Optionen): 92 84 45 Byte

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

Danke an Strigoides für den Hinweis, 1 ^ 2,11 ^ 2,111 ^ 2 zu verwenden ...


Einige Charaktere rasiert von:

  • Eliminieren $w.
  • Verschachtelt die Definition von $xanstelle seiner ersten Verwendung.
  • Nahm einige Hinweise aus Rynants Lösung :
    • Kombiniert man die Integer-Arrays mit, können +stattdessen ,die Klammern um die Arrays und eine Ebene zum Verschachteln in den Schleifen entfernt werden.
    • Wird verwendet 9-$_, um die Länge der benötigten Leerzeichen zu berechnen, anstatt kompliziertere Mathematik- und Objektmethoden. Damit entfällt auch die Notwendigkeit $y.

Erläuterung:

1..8+9..1oder 1..9+8..1generiert ein Array von ganzen Zahlen, die von 1 bis 9 aufsteigen und dann wieder auf 1 absteigen.

|%{... }leitet das Integer-Array ForEach-Objectüber den eingebauten Alias in eine Schleife %.

' '*(9-$_)+ subtrahiert die aktuelle Ganzzahl von 9 und erstellt am Anfang der Ausgabe für diese Zeile eine Zeichenfolge mit so vielen Leerzeichen.

[int64]($x='1'*$_)*$xDefiniert $xals Zeichenfolge von 1s, solange die aktuelle Ganzzahl groß ist. Dann wird es in int64 konvertiert (zur korrekten Ausgabe von 111111111 2 ohne Verwendung der E-Notation erforderlich ) und quadriert.

Bildbeschreibung hier eingeben


1
Sie können ein Byte speichern, indem Sie in ein longstattint64
Veskah

Eine andere Möglichkeit, ein Byte zu speichern1..8+9..1|%{' '*(9-$_)+ +($x='1'*$_+'L')*$x}
mazzy

5

Vim, 62 39 38 Tastenanschläge

Vielen Dank an @DJMcMayhem für das Speichern einer Menge Bytes!

Meine erste Vim-Antwort, so aufregend!

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

Ich habe versucht, die Zahlen über eine Aufnahme zu schreiben, aber es ist viel länger

Probieren Sie es online!

Erläuterung:

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

BEARBEITEN:

Ich habe Hstattdessen gg1 Byte gespeichert


Sie können das löschen maund ändern `ai<space>zu I<space>.
DJMcMayhem

Möglicherweise können Sie auch Stufe 3 löschen, wenn Sie Stufe 1 in Einfügen über und unter ändern .
DJMcMayhem

@DJMcMayhem Danke für den Vorschlag! Ich dachte anfangs darüber nach, ein neues Register für die kopierten Bits einzuführen, aber das ist viel kürzer!
Kritixi Lithos

5

APL (Dyalog Classic) , 20 bis 19 Byte

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

Probieren Sie es online!

⎕d sind die Ziffern '0123456789'

1↓lass das erste fallen ( '0')

,⍨\ Catenate Scan vertauscht, dh die umgekehrten Präfixe '1' '21' '321' ... '987654321'

mischen in eine Matrix mit Leerzeichen:

1
21
321
...
987654321

kehren Sie die Matrix horizontal um

(... )⍣2mach das zweimal:

⍉⊢⍪1↓⊖die Transposition ( ) der Matrix selbst ( ), die vertikal ( ) mit der vertikal invertierten Matrix ( ) ohne ihre erste Zeile ( 1↓) verkettet ist


4

R, 71 Zeichen

Für die Aufzeichnungen:

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

+1 - kann ein paar retten mitmessage(rep(" ",9-i),s[c(1:i,i:1-1)])
flodel

@flodel Sie müssten beachten, dass das auf stderr gedruckt wird, und Sie könnten auch tun for(i in s<-c(1:9,8:1))..., um ein Byte zu speichern
Giuseppe


4

k ( 64 50 Zeichen)

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

Alte Methode:

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


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

4

CJam, 31 27 Bytes

CJam ist viel neuer als diese Herausforderung, daher kann diese Antwort nicht akzeptiert werden. Dies war jedoch eine nette kleine Herausforderung am Samstagabend. ;)

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

Teste es hier.

Die Idee ist, zuerst den oberen linken Quadranten zu bilden. So funktioniert das:

Bilden Sie zunächst die Zeichenfolge " 123456789"mit 8S*9,:)+. Diese Zeichenfolge ist 17 Zeichen lang. Nun wiederholen wir den String 9 mal und teilen ihn dann mit in Teilstrings der Länge 9 auf 9/. Die Nichtübereinstimmung zwischen 9 und 17 versetzt jede zweite Zeile um ein Zeichen nach links. Wenn wir jeden Teilstring in einer eigenen Zeile drucken, erhalten wir:

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

Wenn wir also einfach jede zweite Zeile fallen lassen (was bequemerweise so funktioniert 2%), erhalten wir einen Quadranten wie gewünscht:

        1
       12
      123
     1234
    12345
   123456
  1234567
 12345678
123456789

Zum Schluss spiegeln wir dies zweimal und transponieren das Raster dazwischen, um sicherzustellen, dass die beiden Spiegelvorgänge entlang unterschiedlicher Achsen verlaufen. Die Spiegelung selbst ist gerecht

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

Zuletzt verbinden wir alle Zeilen mit Zeilenumbrüchen, mit N*.


3

GolfScript, 36 Zeichen

Angenommen, dies ist eine Herausforderung. Hier ist eine grundlegende GolfScript-Lösung:

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

3

Ruby, 76 Zeichen

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

Verbesserungen sind willkommen. :)


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

Großartiger Kommentar, ich kannte das "..." nicht und verstand nicht, wie das funktionieren könnte.
GB

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

3

Befunge-93 , 155 Zeichen

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

Probieren Sie es online!

Es könnte definitiv mehr Golf gespielt werden, aber es ist mein erstes Funge-Programm und mein Kopf tut schon weh. Hatte aber viel Spaß


3

JavaScript, 170 Byte

Mein erster Code Golf :)

Golf gespielt

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

Willkommen bei PPCG!
Евгений Новиков

2

Perl 56 54 Zeichen

1 Zeichen für den -pSchalter hinzugefügt .

Verwendet quadratische Repunits, um die Sequenz zu generieren.

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

2

Perl, 43 + 1

Addieren von +1, -Ewofür erforderlich istsay

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

edit: etwas gekürzt


2

Python, 65

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

Stellen Sie I=int;Ihren Code voran und ersetzen Sie alle nachfolgenden Instanzen von intdurchI
Cyoce

@Cyoce Daran hatte ich gedacht. Jedes Mal int, wenn es verwendet wird, werden 2 Zeichen gespart , und es wird dreimal verwendet, sodass 6 Zeichen zu einem Preis von 6 Zeichen gespart werden.
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""}

alte Version:

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

fügte eine 57 char groovy Lösung hinzu. Sie können beide eachdurch ersetzen any, um zwei Zeichen zu sparen.
Matias Bjarland

2

Scala - 86 Zeichen

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

2

Javascript, 137

Mit Rekursion:

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

Zum ersten Mal auf CG :)

Oder 118

Wenn ich eine JS-Implementierung finde, die 111111111**2mit höherer Präzision ausgeführt wird.
(Hier: 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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.