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.
code-golf
ascii-art
kolmogorov-complexity
Eric Wilson
quelle
quelle
Antworten:
J,
29 26 24 23 2221 ZeichenDanke an FUZxxl für den
"+
Trick (ich glaube nicht, dass ich ihn jemals benutzt habeu"v
, heh).Erläuterung
quelle
"0]
schreiben"+
.,.0(<#":)"+9-+/~|i:8
⍪↑{(0<⍵)/⍕⍵}¨9-∘.+⍨|9-⍳17
APL (
3331)Wenn Leerzeichen zwischen den Zahlen zulässig sind (wie im Mathematica-Eintrag), kann dies auf
2826 verkürzt werden :Erläuterung:
⍳9
: eine Liste der Nummern 1 bis 91↓⎕D
:⎕D
Ist die Zeichenfolge '0123456789',1↓
wird das erste Element entfernt⍴∘(1↓⎕D)¨⍳9
:⍳9
Nimm für jedes Element N von die ersten N Elemente von1↓⎕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" ...]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
:⊖A
ist A vertikal gespiegelt (wobei die untere Hälfte angegeben wird),1↓
entfernt die obere Reihe der unteren Hälfte undA⍪
liegt die obere Hälfte darüber1↓⊖A
.quelle
Clojure,
191179 Bytes-12 Bytes durch Ändern des äußeren
doseq
in einloop
, wodurch ich dasatom
(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 demn
sich die höchste Nummer in der Zeile befindet.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:
Nicht einmal richtig ignoriert den offensichtlichen Fehler, aber es sah cool aus.
quelle
Mathematica
83 49 43 5451Mit 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.
quelle
f = Table[# - Abs@k, {k, -8, 8}] &; f[f[9]] /. n_ /; n < 1 -> "" // Grid
Table[9 - ManhattanDistance[{9, 10}, {j, k}], {j, 18}, {k, 18}] /. n_ /; n < 1 -> "" // Grid
Grid@#@#@9&[Table[#-Abs@k,{k,-8,8}]&]/.n_/;n<1->""
50 Zeichen.ArrayPlot[Sum[k~DiamondMatrix~17, {k, 0, 8}], AspectRatio -> 2]
Python 2,
72696761Nicht schlau:
quelle
s=`0x2bdc546291f4b1`
'L'
.C 79 Zeichen
quelle
Python 2,
6059Missbrauch von Backticks und Repunits.
quelle
in
Schlüsselwort kann wie bei derprint
Tastatur entfernt werden.L
in den mittleren sieben Ausgabezeilen.GolfScript,
333130 ZeichenEine weitere GolfScript-Lösung
Vielen Dank an @PeterTaylor für einen weiteren Char.
Vorherige Versionen:
( online laufen )
quelle
17,{8-abs." "*10@-,1>.-1%1>n}%
Mathematica
5550454138quelle
Javascript, 114
Mein erster Eintrag bei Codegolf!
Wenn dies noch weiter gekürzt werden kann, bitte kommentieren :)
quelle
PHP,
9290 ZeichenBerechnet 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):
quelle
<?
pro Meta übersprungen . Außerdem scheinen Sie einige Codierungsprobleme im zweiten Code zu haben.<?
in den bytecount mit einbeziehe. Ich habe auch einige andere Verbesserungen vorgenommen.Common Lisp, 113 Zeichen
Zuerst bemerkte ich, dass die Elemente des Diamanten so ausgedrückt werden konnten:
usw.
x
Berechnet rekursiv die Basis (1, 11, 111 usw.), die im Quadrat angegeben und dann zentriert durch gedruckt wirdformat
. Damit die Zahlen zum höchsten Term auf- und wieder absteigen, habe ich(- 8 (abs (- n 8)))
eine zweite Schleife vermiedenquelle
Holzkohle (nicht konkurrierend), 13 Bytes
Nicht konkurrieren, weil die Sprache (viel) neuer ist als die Frage.
Probieren Sie es online!
Wie?
Zeichnet neun aufeinanderfolgend kleinere konzentrische Diamanten übereinander:
quelle
JavaScript, 81
quelle
PowerShell (2 Optionen):
928445 ByteErläuterung:
1..8+9..1
oder1..9+8..1
generiert ein Array von ganzen Zahlen, die von 1 bis 9 aufsteigen und dann wieder auf 1 absteigen.|%{
...}
leitet das Integer-ArrayForEach-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'*$_)*$x
Definiert$x
als Zeichenfolge von1
s, 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.quelle
long
stattint64
1..8+9..1|%{' '*(9-$_)+ +($x='1'*$_+'L')*$x}
Vim,
623938 TastenanschlägeVielen Dank an @DJMcMayhem für das Speichern einer Menge Bytes!
Meine erste Vim-Antwort, so aufregend!
Ich habe versucht, die Zahlen über eine Aufnahme zu schreiben, aber es ist viel länger
Probieren Sie es online!
Erläuterung:
BEARBEITEN:
Ich habe
H
stattdessengg
1 Byte gespeichertquelle
ma
und ändern`ai<space>
zuI<space>
.APL (Dyalog Classic) ,
20 bis19 ByteProbieren 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:⌽
kehren Sie die Matrix horizontal um(
...)⍣2
mach das zweimal:⍉⊢⍪1↓⊖
die Transposition (⍉
) der Matrix selbst (⊢
), die vertikal (⍪
) mit der vertikal invertierten Matrix (⊖
) ohne ihre erste Zeile (1↓
) verkettet istquelle
R, 71 Zeichen
Für die Aufzeichnungen:
quelle
message(rep(" ",9-i),s[c(1:i,i:1-1)])
for(i in s<-c(1:9,8:1))...
, um ein Byte zu speichernk (
6450 Zeichen)Alte Methode:
quelle
(1+!9)#'"1"
ist,\9#"1"
CJam,
3127 BytesCJam ist viel neuer als diese Herausforderung, daher kann diese Antwort nicht akzeptiert werden. Dies war jedoch eine nette kleine Herausforderung am Samstagabend. ;)
Teste es hier.
Die Idee ist, zuerst den oberen linken Quadranten zu bilden. So funktioniert das:
Bilden Sie zunächst die Zeichenfolge
" 123456789"
mit8S*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 auf9/
. 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:Wenn wir also einfach jede zweite Zeile fallen lassen (was bequemerweise so funktioniert
2%
), erhalten wir einen Quadranten wie gewünscht: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
Zuletzt verbinden wir alle Zeilen mit Zeilenumbrüchen, mit
N*
.quelle
GolfScript, 36 Zeichen
Angenommen, dies ist eine Code-Golf- Herausforderung. Hier ist eine grundlegende GolfScript-Lösung:
quelle
Ruby, 76 Zeichen
Verbesserungen sind willkommen. :)
quelle
f=->x{[*1..x]+[*1...x].reverse};puts f[9].map{|i|(f[i]*'').center 17}
[*-8..8].map{|i|puts' '*i.abs+"#{eval [?1*(9-i.abs)]*2*?*}"}
Befunge-93 , 155 Zeichen
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ß
quelle
JavaScript, 170 Byte
Mein erster Code Golf :)
Golf gespielt
Ungolfed
quelle
Perl
5654 Zeichen1 Zeichen für den
-p
Schalter hinzugefügt .Verwendet quadratische Repunits, um die Sequenz zu generieren.
quelle
Perl, 43 + 1
Addieren von +1,
-E
wofür erforderlich istsay
say$"x(9-$_).(1x$_)**2for 1..9,reverse 1..8
edit: etwas gekürzt
quelle
Python, 65
quelle
I=int;
Ihren Code voran und ersetzen Sie alle nachfolgenden Instanzen vonint
durchI
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.Groovy
7775alte Version:
quelle
each
durch ersetzenany
, um zwei Zeichen zu sparen.Scala - 86 Zeichen
quelle
Javascript, 137
Mit Rekursion:
Zum ersten Mal auf CG :)
Oder 118
Wenn ich eine JS-Implementierung finde, die
111111111**2
mit höherer Präzision ausgeführt wird.(Hier: 12345678987654320).
quelle