Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben, die ein ASCII-Dreieck druckt. Sie sehen so aus:
|\
| \
| \
----
Ihr Programm nimmt eine einzelne numerische Eingabe n
mit den Einschränkungen an 0 <= n <= 1000
. Das obige Dreieck hatte einen Wert von n=3
.
Das ASCII-Dreieck hat n
Backslashes ( \
) und vertikale Striche ( |
), n+1
Linien und Bindestriche ( -
) und jede Linie hat eine Anzahl von Leerzeichen, die der Zeilennummer (0-basiert, dh die erste Linie ist die Linie 0) neben der letzten Linie entsprechen .
Beispiele:
Eingang:
4
Ausgabe:
|\
| \
| \
| \
-----
Eingang:
0
Ausgabe:
In diesem Testfall muss die Ausgabe leer sein. Kein Leerzeichen.
Eingang:
1
Ausgabe:
|\
--
Input & Output muss genau so sein , wie ich es angegeben habe.
Dies ist Code-Golf , also streben Sie den kürzesten möglichen Code an!
quelle
0
eine unerwartete Ausgabe haben kann, da es sich um einenAntworten:
Jelly , 14 Bytes
Probieren Sie es online!
Wie es funktioniert.
quelle
C 58 Bytes
-
Dank @Steadybox, dessen Kommentare zu dieser Antwort mir geholfen haben, ein paar Bytes in meiner obigen Lösung zu rasieren
quelle
2*n
zweimal drin und es stört mich, kann mir jemand eine clevere Möglichkeit vorstellen, es irgendwie zu verkürzen?Javascript (ES6),
9785817574 BytesEs stellte sich heraus, dass ich fast nicht genug Rekursion verwendet habe
quelle
05AB1E ,
161516 BytesEin Byte dank Adnan gespeichert
Probieren Sie es online!
Erläuterung
quelle
ð×.svy¦…|ÿ\}¹>'-×»
.s
Ich schätze, meine Vorstellung von war nicht so gut, wie ich dachte. Gute Verwendung vonÿ
, habe das noch nie gesehen..s
auch darüber nach, als ich anfing, bekam<Ýð×
aber Probleme mit dem Sonderfall mit diesen Methoden.FðN×…|ÿ\}Dg'-×»
für 15 BytesDg
! Danke :).s
Dies führte auch zu verschachtelten Arrays und einer Reduzierung, die mehr Bytes erforderte.V ,
181716 Bytes1 Byte gespart dank @ nmjcman101 für die Verwendung einer anderen Methode zur Ausgabe von nichts, wenn die Eingabe ist
0
Probieren Sie es online!
Hexdump:
Erklärung (veraltet)
Wir haben zuerst eine Schleife, um zu überprüfen, ob das Argument ist
0
. In diesem Fall wird der folgende Code ausgeführt (|\
geschrieben). Ansonsten wird nichts geschrieben und der Puffer ist leer.Nachdem wir das obere Ende des Dreiecks erreicht haben, müssen wir seinen Körper erstellen.
Jetzt haben wir eine zusätzliche Zeile am unteren Rand des Puffers. Dies muss durch
-
s ersetzt werden.Diese Antwort wäre kürzer, wenn wir alles eingeben könnten, was wir wollen
0
V ,
1413 BytesProbieren Sie es online!
quelle
«
natürlich. Klug! :)C # 93 Bytes
Anonyme Funktion, die das ASCII-Dreieck als Zeichenfolge zurückgibt.
Volles Programm mit ungolfed, kommentierten Funktionen und Testfällen:
quelle
Python 2 , 69 Bytes
Probieren Sie es online!
quelle
"".join
und es mit dem Austausch*
Bediener und demsep
Argument in der Sleep - Funktion, solambda x:print(*['|'+' '*n+'\\'for n in range(x)]+['-'*-~x*(x>0)],sep="\n")
CJam ,
242221 BytesDank Martin Ender 1 Byte gespeichert
Probieren Sie es online!
Erläuterung
quelle
SmileBASIC, 51 Bytes
quelle
PowerShell ,
51 bis67 ByteProbieren Sie es online!
(Byteerhöhung, um keinen nachgestellten Zeilenumbruch zu berücksichtigen)
Nimmt Eingaben entgegen
$n
und überprüft, ob sie ungleich Null sind. Dann werden Schleifen erstellt, um das Dreieck zu konstruieren, und mit einer Linie aus-
. ImplizitWrite-Output
erfolgt bei Programmabschluss.quelle
Netzhaut , 39 Bytes
Probieren Sie es online aus
Konvertiert die Dezimaleingabe in eine unäre. Ersetzen Sie jedes
1
durch|<N-1 spaces>\¶
, drucken Sie und machen Sie das Ersetzen rückgängig. Ersetzen Sie jeden1
durch einen Bindestrich und den letzten durch 2 Bindestriche. Tadaa!quelle
Gemeines Lisp,
8986 BytesErstellt eine anonyme Funktion, die die Eingabe n verwendet und das Dreieck nach
*standard-output*
(standardmäßig stdout) druckt .Golf gespielt
Ungolfed
Ich bin sicher, ich könnte das irgendwie kürzer machen.
quelle
C
1019375 BytesUngolfed-Version
@Steadybox Danke für den Hinweis, macht viel Sinn.
quelle
printf("%c",'_');
so wortreich?i;f(n){for(i=0;i++<n;)printf("%c%*c\n",124,i,92);for(;n--+1;)printf("-");}
i;f(n){for(i=0;i++<n;)printf("|%*c\n",i,92);for(;n--+1;)printf("-");}
n--+1
kann verkürzt werden auf~n--
Kohle , 15 Bytes
Probieren Sie es online!
Nervenzusammenbruch
quelle
»
kann weggelassen werden.Japt , 20 Bytes
2 Bytes gespart dank @ETHproductions
Probieren Sie es online!
Erläuterung
quelle
o@'|+SpX +'\Ãp'-pUÄ)·
und aufgrund eines Fehlers (wirklich eine unbeabsichtigte Nebenwirkung der Auto-Funktionen) können Sie dann entfernen Sie die'
in'-
.p
. Das ist , so dass Sie tun können , zBm*2
jedes Element zu verdoppeln, odermp2
jeden quadratischJ, 20 Bytes
-13 bytes dank bob
Probieren Sie es online!
Original: 33 Bytes
ungolfed
Probieren Sie es online!
quelle
*,&'-' '|',.'\'{."0~_1-i.
*,&'-' '|',.' \'{~=@i.
Pyke,
1817 BytesProbieren Sie es hier aus!
quelle
Python2, 73 Bytes
Ein volles Programm. Ich habe auch versucht, Zeichenfolgen für die letzte Zeile zu interpolieren, aber es hat sich herausgestellt, dass sie ein paar Bytes länger ist: /
Eine andere Lösung bei 73 Bytes:
Testfälle
quelle
MATL , 19 Bytes
Probieren Sie es online!
quelle
QBIC , 41 Bytes
Erläuterung
quelle
R 101 Bytes
Dieser Code entspricht dem
n=0
Testfall, wenn Sie nur berücksichtigenSTDOUT
!Tatsächlich ist die
stopifnot(n>0)
Anschläge Teil der Skriptausführung, zeigt nichts an ,STDOUT
sondern schreibtError: n > 0 is not TRUE
anSDTERR
.Ungolfed:
quelle
Python 2 , 62 Bytes
Probieren Sie es online!
Druckt zeilenweise, wobei vor dem Backslash jeweils ein Leerzeichen eingefügt wird. Wenn eine Funktion zulässig wäre, die nicht gedruckt wird, wäre dies wahrscheinlich kürzer.
quelle
JavaScript (ES6), 71 Byte
Ausgänge zur Konsole. Sparen Sie 6 Byte, wenn das Drucken in der SpiderMonkey-JavaScript-Shell zulässig ist. Sparen Sie 13 Bytes, wenn die Ausgabe akzeptabel ist.
quelle
$`
Muster, aber ich weiß nicht, ob ich noch daran gedacht hätte. Nett.Python 2 , 67 Bytes
Eine weitere Funktion in Python 2 ist
rjust
.Probieren Sie es online!
quelle
Python 3 , 60 Bytes
Probieren Sie es online!
Zwei weitere Lösungen mit derselben Byteanzahl.
quelle
Perl, 63 Bytes
Ungolfed:
$"
ist das Listentrennzeichen, das standardmäßig "" lautet.$/
ist das Trennzeichen für Ausgabedatensätze, das standardmäßig "\ n" ist.$_
ist die implizite Schleifenvariable.quelle
$n=<>
?Haskell ,
8265 BytesProbieren Sie es online! Verwendung:
Oder schöner:
quelle
Pyth,
2318 BytesTestsuite online verfügbar.
Vielen Dank an Ven für das Abschlagen von 5 Bytes.
Erläuterung
quelle
|
für ein zusätzliches Byte abschneiden .Javascript 101 (Vollprogramm), 94 (Funktionsausgabe), 79 (Rückgabe) Bytes
Volles Programm
Läuft nicht in Chrome (da Prozess anscheinend nicht existiert)
Läuft nicht in TIO (da Eingabeaufforderung anscheinend nicht erlaubt ist)
Funktionieren Sie mit EXACT-Druck
Probieren Sie es online
Funktion mit Return-String
Probieren Sie es online
Das Wiederholen von Zeichen in Javascript ist dumm, ebenso wie das Unterdrücken von Zeilenumbrüchen bei der Ausgabe
quelle
Python 2 , 82 Bytes
Probieren Sie es online!
Länger als der andere Python antwortet aber eine rekursive Funktion nur um anders zu sein.
Es fühlt sich verschwenderisch an, zwei
print
Aussagen zu verwenden, aber ich kann keinen kürzeren Weg finden, um es zu umgehen. Auch dieexit()
Verschwendung 7, um das Drucken zu stoppen, verringert die Anzahl-
unter dem Dreieck.quelle
-~c*(c>0)
in der letzten Zeile 3 Bytes speichern :)c and-~c
.