(Inspiriert von dieser Frage )
Zielsetzung
Ihre Aufgabe ist es, ein Programm oder eine Funktion zum Drucken einer ASCII-Version des Stack Overflow-Logos an STDOUT zu schreiben
\|/
(-)
(-)
(-)
(-)
Ihr Programm sollte zwei Eingaben annehmen, die hier als H und N bezeichnet werden. Die Höhe des Stapels "Container" (die Klammern) wird durch H bestimmt. Die Anzahl der Elemente im Stapel wird durch N bestimmt Stapel wird "überlaufen".
Input-Output
H bestimmt die Höhe der Container
Zum Beispiel:
H = 1:
( )
H = 2:
( )
( )
H = 3:
( )
( )
( )
H wird immer mindestens 1 sein
N bestimmt, wie viele Elemente sich im Stapel befinden. Die folgenden Beispiele sind alle H = 2:
N = 0
( )
( )
N = 1
( )
(-)
N = 2
(-)
(-)
N = 3
\
(-)
(-)
N = 4
\|
(-)
(-)
N = 5
\|/
(-)
(-)
N = 6
\|/
(-)-
(-)
N = 7
\|/
(-)-
(-)-
N wird niemals größer sein als 2H+3
(mit anderen Worten, der Stapel wird niemals durch den Boden gehen).
Regeln
- Keine Standardlücken.
- Ihr Programm darf keine Fehler erzeugen.
- Alle Testfälle müssen bestanden werden.
- Sie können H und N nach Belieben eingeben.
- Ich bezweifle ernsthaft, dass Ihre Sprache eine eingebaute dafür hat.
- Jede Zeile kann optional ein zusätzliches Leerzeichen am Ende enthalten. Eine leere Zeile oberhalb eines Stapels, wobei N <= H optional ist, sowie eine nachgestellte Zeile.
- Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
Testfälle
Zusätzlich zu allen H = 2-Testfällen aus dem Bereich Eingabe / Ausgabe müssen alle folgenden Testfälle bestanden werden:
H = 1, N = 1
(-)
H = 1, N = 5
\|/
(-)-
H = 4, N = 7
\|/
(-)
(-)
(-)
(-)
H = 5, N = 0
( )
( )
( )
( )
( )
Bestenlisten
Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
# Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Leaderboard-Snippet angezeigt wird:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Antworten:
Pyth,
434140 BytesProbieren Sie es online aus. Testsuite.
Erster Durchgang, schnell und dreckig. Eingabe in STDIN als
N\nH
.Erläuterung
J
(JE
) und subtrahieren Sie sie von der ersten Eingabe (Anzahl der Elemente). (-QJE
)K
. (K-QJE
)hK-QJE
)max(0, previous)
. Dies ist erforderlich, da negative Zahlen den nächsten Schritt unterbrechen würden. (g#0hK-QJE
)" \|/"
, um die erste Zeile zu erhalten und zu drucken. (<" \|/"g#0hK-QJE
)N
überrange(0, J)
. (VJ
) Für jedenN
Druck die Verkettung von Folgendem: (s[
)"("
(\(
)" "
wenn es mindestensN+1
freie Plätze im Stack gibt (<N_K
),"-"
sonst. (?<N_Kd\-
)")"
(\)
)"-"
wenn sich mindestensN+4
überlaufende Teile im Stapel befinden (<N-K3
),""
andernfalls. (*<N-K3\-
)quelle
JavaScript (ES6),
105 bis102 Byte@Edit: 3 Bytes dank @PatrickRoberts gespeichert.
quelle
substring
mitsubstr
3 Bytes zu speichern, und ersetzti+n<h?' ':'-'
mit'- '[i+n<h]
zu speichern 2 Bytes und ersetzeni+h+3<n?'-':''
mit' -'[i+h+3<n]
1 Byte zu speichern. Das bringt dich unter 100substr
negative Indizes ignoriert wurden oder nicht, aber ich kann Ihre anderen Tipps nicht verwenden, da Zeichenfolgen-Indizes Zeichenfolgen sind, also sind Boolesche Werte nicht gut genug.JavaScript (ES6),
126122112 BytePrüfung
Alternativer Test (falls Ihr Browser ES6 nicht unterstützt)
Sehen Sie den Test auf Babeljs.io und überprüfen Sie "auswerten".
Interessante Alternative bei 136 Bytes
Dadurch werden die Wiederholungsbeträge in die Vorlagenzeichenfolge verschoben, und es werden reguläre Ausdrücke und Ersetzungen zum Einfügen der sich wiederholenden Gruppen verwendet. Leider ist die Signatur dafür
.replace()
einfach zu lang.quelle
C ++ 14 (Lambda-Funktion), 196
Dank Quentin 1 Byte gespeichert.
2 Bytes gespart dank Adam Martin.
Die Funktion selbst benötigt 157 Bytes.
Sehen sie in Aktion hier .
Ungolfed-Version:
quelle
include
s und dieusing namespace std;
Byteanzahl einzuschließen, es sei denn, Ihre Antwort ist ein vollständiges Programm (was es nicht ist).CJam, 57 Bytes
Teste es hier.
Könnte definitiv eine Verbesserung gebrauchen. Die Idee ist, ein Gitter aufzubauen, in dem die
-\|/-
Zellen durch aufeinanderfolgende ganze Zahlen ersetzt werden, zUnd dann, um sie am Ende durch die richtigen Zeichen (möglicherweise Leerzeichen) zu ersetzen.
quelle
Python 2,
10110098 Bytesquelle
print
sind nichtJavaScript (ES6),
87 bis80 ByteVerwendet die Rekursion, um die Ausgabezeichenfolge von unten nach oben zu erstellen.
EDIT : Dank @Neil zum Rasieren 7 Bytes aus 87 Bytes aus
Original
Testschnipsel:
quelle
SyntaxError
für mich.JavaScript (ES6),
149139137 BytesIch mochte die Idee von @ MartinEnder, die
-\|/
Zeichen zu indizieren , und ich wollte sehen, wie es sich in ES6 entwickeln würde. Anscheinend habe ich es nicht so gut gemacht. Versuche herauszufinden, ob dies mit verbessert werden könntefor...of
.Bearbeitungen
.replace
die Indizierung direkt ing()
zu verschieben.f=
in der zweiten Byteanzahl gezähltPrüfung
quelle
Java,
186177 BytesUngolfed online versuchen
quelle
Excel, 131 Bytes
Eingabe als Tupel, Höhe
H
inA1
,N
inB1
. Für Zellen mit Formeln muss der Textumbruch aktiviert sein. Schlagen Sie die Verwendung einer Mono-Spaced-Schriftart vor.quelle
A1
und annimmt, undB1
die einfache Anmerkung hinzufügen, dass dies erfordert, dass die aufrufende Zelle die Option zum Umbrechen von Text aufweist, um wahr zu sein. Um die richtige Ausrichtung zu erreichen, sollte die Schrift auch in einem einzigen Abstand angeordnet sein, z. B. Courier New oder Lucidia ConsoleC ++ 11,
155148145 BytesUngolfed :
Verwendung :
quelle
Python 3,
134121118111 BytesTesten Sie es hier: https://repl.it/CYL1/0
Nicht golfen:
Ich hätte den Seitenüberlauf gerne zum Listenverständnis hinzugefügt, konnte ihn aber nicht einklemmen, also musste ich mit der while-Schleife fortfahren.13 Bytes gespart!quelle
'\|/'[:max(0,n-h)]
, um wie die Python 2-Lösung zu sein.Perl 5 , 91 Bytes
Probieren Sie es online!
quelle
Pip , 50 Bytes
Probieren Sie es online!
Ach, das ist zu lang ... ich weiß aber nicht, wie ich es noch kürzen soll. Die in der Regel hilfreiche zyklische Indizierung kostet diesmal zusätzliche Bytes.
quelle
PowerShell ,
109108104 ByteProbieren Sie es online!
Hat viel an teurer Indexierung verloren, ist aber immer noch anständig. Ich bin mir jedoch nicht sicher, ob meine Indexberechnung optimal ist. Stahl eine Logik aus den anderen Antworten, um ein Byte zu speichern. Es wurde auch an den Vorrang erinnert, einige Parens für -4 Bytes zu platzieren.
quelle
05AB1E , 45 Bytes
Kann auf jeden Fall golfen werden .. Nicht allzu glücklich darüber in seiner jetzigen Form tbh.
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
LR'(ì')«¹x‚3+¬UŸ¦ζJ¹XŸJ¦1úr)˜»
und das ist nur zur Hälfte erledigt.