Erstellen Sie ein Programm, das eine Länge und eine Liste von Intervallen annimmt und ein Lineal dieser Länge mit längeren Häkchen für jedes Intervall unter Verwendung der Strichzeichnungszeichen ausgibt ┌ ┬ ┐ │ ╵
- Die erste Zeile der Ausgabe sollte mit dem Häkchen für 0 mit beginnen
┌
und mit einem Häkchen für die Länge mit enden┐
,┬
wobei für jedes Zeichen dazwischen ein verwendet wird.length
In dieser ersten Zeile befinden sich insgesamt + 1 Strichzeichnungszeichen. - Ein Häkchen sollte mit
╵
und│
auf der Grundlage der Eingabeintervalle vertikal in Schritten von jeweils einem halben Zeichen verlängert werden. - Intervalle werden vom kleinsten bis zum größten im Verhältnis zum Intervall davor aufgelistet. Ausarbeiten:
- Das erste Intervall gibt an, wie viele Basis-Ticks (die erste Zeile - ein Zeichen pro Tick) sich im zweitkleinsten Intervall befinden (das kleinste Intervall ist 1). Zum Beispiel verlängert [3] jeden dritten Tick um ein halbes Zeichen.
- Das zweite und die nachfolgenden Intervalle beziehen sich auf das nächstkleinere Intervall. Zum Beispiel verlängert [3, 5] jeden 15. Basistick um ein ganzes Zeichen und [3, 5, 2] jeden 30. Basistick um eineinhalb Zeichen.
- Ein Unterintervall von 1 ist gültig und bedeutet effektiv, dass die letzten Intervallzeilen durch ein volles Zeichen anstelle eines halben Zeichens verlängert werden.
- Die Beispiel-Testfälle sollen verdeutlichen, wie dies funktioniert.
Beispiele / Testfälle
3, []:
┌┬┬┐
9, [3]:
┌┬┬┬┬┬┬┬┬┐
╵ ╵ ╵ ╵
30, [5, 2]:
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵ │
32, [4, 2, 2, 2]:
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵ │ ╵ │
│ ╵ │
48, [5, 3, 2]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ ╵ │ ╵ ╵ │ ╵ ╵ │
╵ ╵
24, [7, 3]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ ╵ │
17, [3, 2, 1]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵
╵ ╵ ╵
1, [23, 19, 13, 11, 7, 5, 3, 2, 1]
┌┐
│
│
│
│
╵
Sonstige Regeln / Hinweise
- Die Ein- und Ausgabe kann in jedem beliebigen Format erfolgen
- Das Lineal muss nicht mit einem großen Häkchen enden
- Die Intervallliste ist möglicherweise leer
- Das nullte Häkchen liegt immer in allen Intervallen.
- Sie können davon ausgehen, dass die Länge des Lineals und die Intervalle immer positive ganze Zahlen sind, die kleiner als 120 sind
- Nachgestellte Leerzeichen sind in Ordnung, führende Leerzeichen jedoch nicht.
- Ein beliebiges Leerzeichen mit fester Einfachbreite ist als Abstandszeichen zulässig, wenn Sie aus irgendeinem Grund etwas anderes als ASCII-Leerzeichen verwenden möchten.
Viel Spaß beim Golfen!
Antworten:
JavaScript (Node.js) , 123 Byte
Probieren Sie es online!
Verwenden Sie diese Funktion als
f(20)([5, 2])
.Danke Arnauld, spart 4 Bytes.
quelle
Perl 6 ,
130 122 10292 Bytes-10 bytes dank nwellnhof!
Probieren Sie es online!
Ach ja, viel kürzer als meine bisherige Methode. Dies ist ein anonymer Codeblock, der eine Liste von Zeilen zurückgibt.
Erläuterung:
quelle
Dyalog APL,
66645852 BytesProbieren Sie es online!
2814 Bytes dank ngn !quelle
∊'┌'(1↓⍵⍴'┬')'┐'
->'┌┬┐'/⍨2⍵2-1
+⌿0=(×\⍺)∘.|⍳1+⍵
->⊥¨⍨0=(⍵+1)⍴⍳⌽⍺
. Das Akzeptieren⍺
in umgekehrter Reihenfolge ist jetzt ausdrücklich erlaubt , daher können Sie auch das Entfernen von⌽
('┌┬┐'/⍨2⍵2-1)
->'┌┬┐'[2,⍨×⍳⍵]
('┌┬┐'/⍨2⍵2-1)⍪⍉
->'┌┐'@0⍵@0⍉'┬',
Python 3 ,
173172 BytesProbieren Sie es online!
quelle
05AB1E , 51 Bytes
Nicht allzu gerne
I¯Qiεõ}}
als Umgehungslösung für leere Eingabelisten. Und kann definitiv auch an einigen anderen Stellen gespielt werden.ANMERKUNG: Verwendet komprimierte Ganzzahlen, die in die erforderlichen Zeichen konvertiert wurden, da bei der direkten Verwendung der erforderlichen Zeichen das gesamte Programm in UTF-8 gezählt werden muss, wodurch es auch für alle in 05AB1E integrierten Zeichen um zu viel erhöht wird.
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
Sehen Sie diese 05AB1E Spitze Mine (Abschnitt Wie große natürliche Zahlen zu komprimieren? ) Zu verstehen , warum
•5·W4•
ist94749589
und•áΣ=Yô•
ist948495169488
.quelle
×S
kann seinи
sиS
funktioniert, aber leider ist es ein Byte länger als kürzer. Das liegt daran, dass sich die ganzen Zahlen zuerst auf dem Stapel befinden und die Zeichenfolgen danach. Dabei ist×
es egal, ob esint,string
oder iststring,int
, aberи
damit rechnet esstring,int
.и
! Das wird in Zukunft gut zu wissen sein, ich hatte es noch nie gesehen, bevor eine Ihrer anderen Antworten verwendet wurde.Holzkohle , 50 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Box-Drawing-Zeichen haben eine 3-Byte-Darstellung in Charcoal, daher ist die obige Zeichenfolge nur 40 Zeichen lang. Erläuterung:
Berechnen Sie das kumulative Produkt der Intervalle.
Drucken Sie die erste Zeile der Häkchen. Das linke und das rechte Zeichen sind falsch herum, da das Ergebnis später wiedergegeben wird.
Berechnen Sie die Anzahl der Intervalle, die ein Faktor für jedes Häkchen sind. Erzeugen Sie eine Folge von
│
s mit der halben Länge und addieren Sie sie╵
für ungerade Längen. Drucken Sie jede Zeichenfolge mit den nachfolgenden Zeichenfolgen in den vorherigen Spalten nach unten, dh in umgekehrter Reihenfolge.Reflektiere alles, um das Lineal in der Reihenfolge von links nach rechts zu erhalten.
quelle
Canvas ,
424140 BytesProbieren Sie es hier aus! ( mit einer Schriftart, die die Ausgabe monospaces )
quelle
Emacs Lisp , 303 Bytes
Verwenden Sie diese Funktion als
(f '(30 (5 2)))
.Besser lesbare Version:
quelle
Jelly ,
4241 BytesEin volles Programm.
Probieren Sie es online!
Oder sehen Sie sich eine Testsuite an.
Hinweis: Dieser Code wurde von einem vollständigen Programm geändert -
ñ
(nächster Link als Dyade) wurde durch1ŀ
(Link bei Index 1 als Dyade) ersetzt, damit er mehrmals von der Fußzeile aufgerufen werden kann .Wie?
quelle
Ruby , 126 Bytes
Probieren Sie es online!
Sieht mit all dem
each_slice
Zeug ziemlich wortreich aus , wird aber vorerst reichen, es sei denn, ich finde einen golferischeren Ansatz.Nimmt Eingaben in Bezug
l
auf Länge undi
Intervalle vor und gibt ein Array von Zeichenfolgen zurück.quelle
R ,
175170 BytesProbieren Sie es online!
Nimmt leere Intervalle als
0
, gibt eine Zeichenmatrix zurück. TIO-Link zeigt die Ausgabe hübsch gedruckt an.quelle
Haskell ,
167164149 BytesProbieren Sie es online! Etwas andere Herangehensweise von Golf Οurous .
Probieren Sie es online! Es gibt immer noch einige Redundanzen, die so aussehen, als könnten sie ausgenutzt werden, aber bisher haben sie alle weiteren Golfversuche überstanden.
Die vorherige 167-Byte-Lösung ist abgesehen vom Newline-Handling dieselbe und wahrscheinlich etwas besser lesbar:
Probieren Sie es online!
quelle
PowerShell , 152 Byte
Probieren Sie es online!
Abgerollt:
quelle
C # (Visual C # Interactive Compiler) , 204 Byte
Probieren Sie es online!
Ausgänge, bleibt aber in einer Endlosschleife stecken.
quelle
Sauber ,
221201195162 BytesProbieren Sie es online!
Gibt eine Liste von Listen mit UTF-8-Zeichen zurück (als Zeichenfolgen, da Clean keine angeborene UTF-8-Unterstützung bietet).
Generiert zunächst die erste Zeile, nimmt dann das Produkt der Präfixe der Liste in Zweiergruppen und prüft, welche Markierung zu zeichnen ist, basierend darauf, ob das Produkt die aktuelle Zeichenposition teilt.
Ungolfed:
quelle