Inspiriert von der fehlerhaften Ausgabe in @Carcigenicates Clojure-Antwort für die Herausforderung " Diesen Diamanten drucken " .
Drucken Sie genau diesen Text aus:
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1234567890
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
(Von der Mitte nach außen in beide Richtungen wird jede Ziffer durch ein Leerzeichen mehr als in der vorherigen Zeile getrennt.)
Herausforderungsregeln:
- Es wird keine Eingabe ( oder eine leere unbenutzte Eingabe ) geben.
- Nachgestellte Leerzeichen sind optional.
- Eine einzelne nachgestellte neue Zeile ist optional.
- Führende Leerzeichen oder Zeilenumbrüche sind nicht zulässig.
- Die Rückgabe eines String-Arrays ist nicht erlaubt. Sie sollten entweder den Text ausgeben oder eine Funktion haben, die eine einzelne Zeichenfolge mit korrektem Ergebnis zurückgibt.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie ggf. auch eine Erklärung hinzu.
code-golf
ascii-art
number
kolmogorov-complexity
Kevin Cruijssen
quelle
quelle
Antworten:
SOGL V0.12 , 12 Bytes
Probieren Sie es hier aus! Erläuterung:
quelle
Python 2 ,
59 57 5655 BytesProbieren Sie es online!
Erläuterung
i=8
- Weist den Wert8
einer aufgerufenen Variablen zui
.exec"..."*17
- Führen Sie diesen Codeblock (...
) 17 Mal aus.print(...)
- Das Ergebnis ausgeben.' '*abs(i)
- Erstellen Sie eine Zeichenfolge mit einem Leerzeichen, das mehrmals|i|
verwendet wird..join('1234567890')
- Verschachteln Sie den oben erstellten String mit1234567890
, sodass|i|
zwischen den Ziffern Leerzeichen eingefügt werden.i-=1
- Dekrementierei
und führe es 17 Mal aus, um ein sich-8
wiederholendes Muster mit Hilfe von zu erzeugenabs()
.quelle
exec
in 55 Bytes weggelassen werden . Verwendete einen ähnlichen Ansatz , um Python 3 auf 57 Bytes zu reduzieren .exec
Ich sah keinen offensichtlichen Weg, es durch Weglassen zu verkürzen , aber ich dachte, ich würde es als eine Möglichkeit erwähnen.Vim, 35 Bytes:
Erläuterung:
quelle
05AB1E ,
1413 BytesProbieren Sie es online!
Erläuterung
quelle
s
... ist es sinnvoll, einen String mit einer Liste oder eine Liste mit einem String zu verbinden? Ich werde Adnan eine Verbesserung vorschlagen. Oh, und es gibt.∊
dafürû»
.8F9ÝÀNð×ý}».∊
Ich habe ein Raumschiff gemacht! Und ich war ganz aufgeregt, eine 12-Byte-Bearbeitung vorzuschlagen.C64 ASM, 358 Bytes (102 Bytes mit Basicstub kompiliert)
Dies ist der nächste Punkt, den ich aufgrund offensichtlicher Einschränkungen erreichen könnte:
(Könnte wahrscheinlich einiges optimiert werden)
quelle
TSQL,
220148 BytesVon ZLK gepostete Verbesserung:
Ausgabe:
quelle
DECLARE @ VARCHAR(MAX)=''SELECT TOP 17@+=REPLACE('1@2@3@4@5@6@7@8@9@0','@',SPACE(ABS(9-RANK()OVER(ORDER BY object_id))))+' 'FROM sys.objects PRINT @
sys.objects
mitsysobjects
und 1object_id` durchid
Ich habe nach kürzeren Tabellen imsys
Schema gesucht , aber nichtssysobjects
CAST
(mit demPOWER(10)
) inVARCHAR
LOG10
und verwendenREPLICATE
:DECLARE @o VARCHAR(MAX)=''SELECT TOP 17 @o+=REPLACE('1@2@3@4@5@6@7@8@9@0','@',replicate(' ',LOG10(POWER(10,ABS(ROW_NUMBER()OVER(ORDER BY id)-9)+1)/10)))+' 'FROM sysobjects PRINT @o
@
3 Zeichen gespart werden.APL (Dyalog) , 22 Bytes
Probieren Sie es online!
⎕D
D igits von null bis neun1⌽
einen Schritt nach rechts drehen (Null am Ende setzen)⊂
beifügen (als Einheit behandeln)(
... nimm)↑¨¨
für jede dieser Zahlen so viele Zeichen aus jedem Buchstaben:⍳17
eins bis siebzehn¯9+
subtrahieren neun|
finde die absoluten Werte1+
füge eins hinzu∊¨
tragen Sie sich jeweils ein↑
verwandle eine Ebene der Tiefe in eine Ebene des Ranges (matrify)quelle
>:
.APL is not a golfing language
...↑⊃¨,/¨(1+|¯9+⍳17)↑¨¨⊂1⌽⎕D
... ಠ_ಠHaskell ,
58-55BytesProbieren Sie es online!
Dies ist im Grunde @nimis Lösung :)
quelle
Java 11 (JDK) , 98 Byte
Probieren Sie es online!
String::repeat
.Vorherige Antwort ( Java (OpenJDK 8) ),
113112 BytesProbieren Sie es online!
Erklärungen
Ich konstruiere im Grunde die folgenden
String
17 Male (N
ist eine Variable, kein tatsächlicher Wert):Es ist alle erwarteten Ziffern, zusammen mit
%1$Ns
denenN
die Anzahl der Räume zwischen den einzelnen Ziffern.%1$Ns
bedeutet im Grunde "nimm das erste Argument und fülle es auf, bis die Länge mindestensN
". Auch%1$0s
wird nicht unterstützt so ein Sonderfall%1$s
wird für0
.Schließlich formatiere ich diesen String mit einem einzigen Argument
""
:, damit der Formatierer immer denselben leeren String wiederverwendet und ihn nach Bedarf mit Leerzeichen auffüllt.Speichert
quelle
()->
mito->
einem Byte zu speichern. :)o
eineint
for-Schleife erstellen und verwenden?for(o=-9;++o<9;)
Japt
-R
,1918161413 BytesTesten Sie es oder versuchen Sie es online
Erläuterung
quelle
9ÆAõ%A qXîÃw ê ·
JavaScript (ES2017),
83737268 ByteDanke Shaggy für das Speichern von 10 Bytes. Vielen Dank an Craig für das Speichern von 1 Byte. Dank Bögen für das Speichern von 4 Bytes.
quelle
Math.abs
. Ich habe diea
Liste auch nicht fest codiert, aber das ist eine Vorliebe ...a=[...Array(10).keys()];for(i=-8;i<9;i++)console.log(a.join(' '.repeat(i<0?-i:i)))
[..."1234567890"].join("".padEnd(i<0?-i:i))
[...Array(10).keys]
hätte0
als erstes Element nicht das letzte.for(i=-8,s="";i<9;i++)s+=[..."1234567890"].join("".padEnd(i<0?-i:i))+`X`
wobeiX
sich eine aktuelle neue Zeile befindetBrachylog ,
302928 BytesProbieren Sie es online!
1 Byte dank Leaky Nun gespeichert .
Erläuterung
quelle
Kohle , 18 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Hinweis: Nimmt
Cast(1)
die gleiche Anzahl von Bytes an, da"1"
zuvor ein Trennzeichen erforderlich wäre":"
(was der Deverbosifier dann nicht einfügen kann).quelle
R , 108 Bytes
Einfach die Saiten einfügen und zusammenfalten.
Probieren Sie es online!
Edit: danke für Challenger5 für den Hinweis auf ein Problem. Behebt es jetzt.
Edit 2: Speichert ein Byte dank Bouncyball.
quelle
paste0
anstattpaste
so musste ein Byte hinzufügen :(el
:el(strsplit("1234567890",""))
anstelle vonstrsplit("1234567890","")[[1]]
paste
Anweisungen loswerden, indem Sie dassep
Argument verwendencat
und ein bisschen mehr tun, um es auf 70 Bytes zu bringenPython 3 ,
585754 BytesProbieren Sie es online!
(danke an @flornquake für die letzten drei Bytes; ich habe komplett vergessen mit
sep
zu speichern vs..join
)quelle
while i+9:print(*'1234567890',sep=' '*abs(i));i-=1
Pyth ,
1413 Bytes1 Byte dank Mnemonic.
Probieren Sie es online!
quelle
Java 8,
235234206163 BytesUpdate : -28 Bytes dank Leaky Nun!
Update 2 : -43 Bytes nochmal dank Leaky Nun!
Ungolfed:
Probieren Sie es online aus
EDIT: Der Code früher war falsch! Beim Golfen des Codes ist ein Fehler aufgetreten. Der Code sollte nun wie vorgesehen funktionieren.
quelle
public
und einige unnötige Räume loswerden. Und es gibt noch einiges zu verbessern, aber ich schlage vor, die Tipps durchzulesen und zu prüfen, wo Sie sich verbessern können. Nochmals herzlich willkommen und genießen Sie Ihren Aufenthalt! :)Schale , 21 Bytes
Dies ist ein vollständiges Programm, das auf STDOUT gedruckt wird. Probieren Sie es online! Es gibt viele nachgestellte Leerzeichen.
Erläuterung
Husk fehlen immer noch viele wichtige Dinge wie eine Range-Funktion mit zwei Argumenten, daher sind Teile dieser Lösung etwas verrückt.
quelle
ṁs`:0ḣ9
mituṁsḣ10
der Zeichenfolge „1234567890“ mit einem weniger Byte zu generieren!T-SQL 145
152BytesAktualisiert, um zu verwenden:
master..spt_values
Zahlen generieren (WHERE type = 'P'
diese sind immer aufeinanderfolgend, beginnend mit 0)TOP 17
IdeeErgebnisse:
(Danke @JanDrozen für die REPLACE Idee)
quelle
SELECT TOP 17REPLACE('1x2x3x4x5x6x7x8x9x0','x',SPACE(ABS(9-RANK()OVER(ORDER BY object_id))))FROM sys.objects
(vorausgesetzt, Sie müssen nicht drucken).Clojure,
12699 Bytes-27 durch Beheben einiger dummer Fehler. Der äußere Gebrauch von
a
war nicht notwendig, also konnte ich micha
insgesamt loswerden und nurapply str
einmal schreiben . Dadurch konnte ich auch ein Funktionsmakro für die Hauptfunktion verwenden, das einige Bytes sparte. Ich habe auch die Aufforderung zumMath/abs
erneuten Binden ausgeführtn-spaces
.Grundsätzlich eine Clojure-Portierung von @ Mr.Xcoders Python-Idee. Rückblickend hätte ich ursprünglich die
abs
/range
-Methode für die Diamant-Herausforderung verwenden sollen, aber dann habe ich möglicherweise nicht die fehlerhafte Ausgabe erstellt!Ziemlich einfach. Verbindet die Zahlenfolge mit einer Anzahl von Leerzeichen, die von der aktuellen Zeile abhängt.
quelle
Gelee , 15 Bytes
Probieren Sie es online!
quelle
Mathematica, 92 Bytes
Probieren Sie es online aus
Kopieren / Einfügen von Code mit Strg-V
Drücken Sie UMSCHALT + EINGABETASTE , um auszuführen
quelle
C 97 Bytes
Ihr Compiler wird wahrscheinlich beschweren viel über diesen Code; meins warf 7 Warnungen von 4 verschiedenen Typen. Könnte den Code später verbessern.
Probieren Sie es online!
quelle
C (gcc) , 76 Bytes
Probieren Sie es online!
Es werden einige nachgestellte Leerzeichen ausgegeben, von denen angenommen wird, dass sie OK sind.
Es druckt die Zahlen mit linksbündigen Feldern dynamischer Länge - dafür ist die Formatzeichenfolge gedacht
%-*d
.Die innere Schleife hat eine lustige Initialisierung (beginnt bei 10; ein Vielfaches von 10 wäre in Ordnung), um ihre Beendigungsbedingung zu "vereinfachen".
quelle
Holzkohle ,
21 20 1918 BytesProbieren Sie es online!
Link zur ausführlichen Version . Grundsätzlich erstelle ich den unteren Teil der Zeichnung und reflektiere dann den Text nach oben.
quelle
E…⁹⪫E…·¹χI﹪κχ× ι‖B↑
(auch für 19 Bytes), aber der Dolmetscher scheint es nicht zu mögen (ich kann nicht sehen, was daran falsch ist).Map
es ein roter Hering war, also habe ich jetzt meine 18-Byte-Antwort gepostet.CJam , 21 Bytes
Probieren Sie es online!
Erläuterung
quelle
9{S*A,(+\*}%_W%);\+N*
Batch, 163 Bytes
Hinweis: Die erste Zeile endet in 9 Leerzeichen. Erläuterung: Verwendet die Creative-Zeilennummerierung! Die erste Schleife muss 9 Mal ausgeführt und jedes Mal ein Leerzeichen gelöscht werden, während die zweite Schleife 8 Mal ausgeführt und jedes Mal ein Leerzeichen hinzugefügt werden muss. Ersteres wird erreicht, indem man es siebenmal ausführt und zum achten Mal durchfällt, während letzteres erreicht wird, indem man zwei Leerzeichen hinzufügt und durchfällt, um eines von ihnen wieder zu löschen.
quelle
SOGL V0.12 , 14 Bytes
Probieren Sie es hier aus!
Erläuterung:
quelle
PHP , 69 Bytes
Probieren Sie es online!
quelle
PowerShell , 30 Byte
Probieren Sie es online!
Konstruiert einen Bereich von
8,7,6...2,1,0,1,2...8
then-Schleifen durch jede Zahl. Innerhalb der Schleife wir eine Reihe von Konstrukt1..9
verketteten mit0
dann-join
den Zahlen im Bereich zusammen mit der entsprechenden Anzahl von Räumen. Jede Zeichenfolge verbleibt in der Pipeline, und die Ausgabe erfolgt implizit nach Abschluss des Programms.quelle