Dies ist ganz einfach: Drucken Sie ein ASCII- Gantt-Diagramm .
Geben Sie für die angegebenen Aufgabenbereiche (Startzeit - Endzeit-Tupel) eine Gantt-Zeitleiste in Form von -
Zeichen für jede Aufgabendauer aus - jede Aufgabe in einer neuen Zeile.
Beispiel
Angenommen, meine Aufgabenbereiche sind 28->35, 34->40, 39->44
, sieht der Gantt folgendermaßen aus:
-------
------
-----
Spezifikationen
- Sie können ein vollständiges Programm, eine benannte Funktion oder eine anonyme Funktion schreiben.
- Ihr Programm / Ihre Funktion sollte die Aufgaben über STDIN oder als Argumente annehmen .
- Jede Aufgabe sollte als eine Zeichenfolge von
start->end
wherestart
undend
are Integers dargestellt werden . Aufgaben werden durch Leerzeichen oder Kommas getrennt. Alternativ können Sie es als Tupel von Ganzzahlen oder als Array / Sammlung von 2 Ganzzahlen erhalten. (Zum Beispiel können Sie es in JavaScript wie[start,end]
folgt abrufen - dies ist zulässig). - Jede nicht negative Anzahl von Aufgaben (Argumenten) sollte unterstützt werden.
Zur Verdeutlichung ist ein einzelnes Argument der Auflistung von Aufgaben nicht zulässig. Sie können entweder ein einzelnes Zeichenfolgenargument analysieren oder null oder mehr Aufgabenargumente unterstützen. Wo Aufgabe ist ein Tupel oder eine Sammlung von Größe 2.- Sie können davon ausgehen, dass nur gültige Eingaben gemacht werden. Das heißt, jede Aufgabe hat eine positive Dauer.
- Rückgabewert spielt keine Rolle, Ihr Code muss die Timeline auf STDOUT drucken.
- Ausgabe: pro Aufgabe
start
Leerzeichen, gefolgt von(end-start)
Bindestrichen und a\n
. - Es ist unnötig zu erwähnen, dass die Ausgabezeilen entsprechend der Reihenfolge der Eingabe (Aufgaben) angeordnet werden sollten.
- Leerzeichen vor dem
\n
sind erlaubt, wenn das hilft.
Testfälle
Input:
(empty)
Output:
(empty)
Input:
0->7,5->6,3->6
Output:
-------
-
---
Input:
5->20,5->20,2->10,15->19
Output:
---------------
---------------
--------
----
Gewinnen
- Dies ist Code-Golf, so dass die geringste Codelänge (in Bytes) gewinnt.
- Traditionell ist Tie Breaker ein früherer Posten.
- "Standardlücken sind nicht mehr lustig".
-----
BEARBEITEN
Wie viele von Ihnen verstanden haben, ist es zulässig, ein einziges Argument für die Auflistung von Tasks zu verwenden, und da es keinen großen Unterschied zur ursprünglichen Varg- Anforderung gibt, ist es jetzt zulässig, ein einziges Argument für die Auflistung zu verwenden, wenn Sie es nicht verwenden möchten die varargs Option, oder falls Ihre Sprache varargs nicht unterstützt.
To make it clear...
) ist überhaupt nicht klar.arguments
innerhalb der Funktion iterieren , aber Sie können nicht davon ausgehen, dassarguments[0]
es sich um ein Array von Aufgaben handelt.Antworten:
CJam,
16 bis14 BytesDies erwartet eine Liste von Listen als Eingabe. Beispielsweise:
gibt:
Wie es funktioniert
Probieren Sie es hier online aus
quelle
Python 2, 39 Bytes
Einfache Lösung mit String-Multiplikation :)
Akzeptiert wie folgt formatierte Eingaben:
Schau es dir hier an.
quelle
Brainfuck,
120115111 BytesZumindest ist es kürzer als Java :) Die Eingabe ist eine Liste von Bytes, wobei jedes Paar eine einzelne Zeile im Gantt ist.
Ausprobieren
http://copy.sh/brainfuck/
Setzen Sie das Eingabeende auf charmit Wert
\0
. Beispiel Eingabe:\5\20\5\20\2\10\15\19
.Beachten Sie, dass das Setzen des Eingabeende-Werts auf
\0
den Nebeneffekt hat, dass keine Eingabe mehr gelesen wird (und somit das Programm beendet wird), wenn die Eingabe die Zahl Null enthält. In BF gibt es keine andere Möglichkeit zu wissen, wann die Eingabe erschöpft ist.Erläuterung*
* (Sie können dies aufgrund der Kommentare nicht kompilieren / ausführen)
quelle
<
und>
, und sie sind perfekt ausbalanciert.Pyth,
36221914 BytesDies ist mein erstes Pyth-Programm. Jakube hat 5 Bytes beim Golfen geholfen!
Es erwartet Eingaben in das Formular
[[5,20], [5,20], [2,10], [15,19]]
.Sie können es online ausprobieren .
quelle
C ++ 14, 69 Bytes
Zum ersten Mal Golf spielen, das war ein gutes Problem für den Anfang!
quelle
std::
aufcin
undcout
?K, 18 Bytes
Erwartet eine Liste von Paaren als Eingabe:
I Entpacke jedes (
'
) unter Verwendung von Dot-Tupel gelten (.
) , so dass innerhalb der Lambda - I Zugriff auf den Anfangs- und Endwert haben , wiex
undy
, respectively. Dann setze ich diese zu einem (Anfang, Länge) Tupel (x,y-x
) zusammen und wende "where" (&
) an. Das gibt mir eine Ausgabe wie folgt:Dann muss ich einfach mit dieser unregelmäßigen Matrix (
" -"@
) ein Array mit 2 Zeichen indizieren und alles an stdout (0:
) senden .quelle
JavaScript ( ES6 ), 63
Bearbeite 3 Bytes gespeichert dank @apsillers
63 Bytes nicht die Zuordnung zu F als anonyme Zählfunktion ist erlaubt.
Eine Funktion mit einer variablen Anzahl von Parametern, wie angefordert.Eine Funktion mit einer Liste von Aufgaben als einem einzigen Parameter.
Teste das folgende Snippet (nur in EcmaScript 6, Firefox)
quelle
t[0]
es einem Global zuweisen (oder Sie können es sicher zuweisen,l
wenn Sie kein Global erstellen möchten). Außerdem erlaubt die Spezifikation "eine benannte Funktion oder eine anonyme Funktion", so dass Sie dieF=
in Ihrer Byteanzahl weglassen könnten .anonymous
Gedanken verpasst . DankeScala,
676359 BytesVerwendung:
res0()
oderres0(Seq(28->35, 34->40, 39->44))
etc.Vielen Dank, Gilad, für das Rasieren von 4 Bytes mit einem for-Ausdruck!
quelle
Ruby: 35 Zeichen
Probelauf:
Aktualisiert, um mehrere Arrays mit zwei Elementen zu akzeptieren, eines für jede anzuzeigende Aufgabe. (Ich denke, das ist, was die aktualisierte Anforderung erwartet.)
quelle
Javascript (ES6), 61/66 Zeichen
Meine Antwort ist fast ähnlich der von @ edc65, aber mit einigen Verbesserungen. Da Aufgaben in einem einzelnen Array nicht zulässig sind (so würde die Funktion folgendermaßen aufgerufen werden:), ist dies
a([3,4], [7,15], [0,14], [10, 15])
korrekt ( 66 Zeichen ohne Namenszuweisung):Und wenn ein Array-Argument erlaubt ist (also fn wie folgt aufrufen:)
a([[3,4], [7,15], [0,14], [10, 15]])
, dann wäre es ( 61 Zeichen ohne Zuweisung):quelle
SWI-Prolog, 55 Bytes
Beispiel:
a([[5,20],[5,20],[2,10],[15,19]]).
Ausgängequelle
Haskell, 76 Bytes
Das Eingabeformat ist eine Folge von durch Kommas getrennten Tupeln, z
"(1,2),(3,4)"
.Anwendungsbeispiele:
So funktioniert es: Zum Parsen von Eingaben füge ich die Eingabezeichenfolge in
[
und ein]
und verwende die nativeread
Funktion von Haskell für Listen von Integer-Tupeln. Der Rest ist einfach: für jedes Tupel(s,e)
nehmens
Leerzeichen gefolgt vone-s
Bindestrichen und einer neuen Zeile, und verketten Sie alles zu einer einzigen Zeichenfolge. Drucken.Haskell, 59 Bytes
mit entspanntem Eingabeformat:
Nun braucht es eine Liste von Tupeln, z
f [(0,7),(5,6),(3,6)]
.Funktioniert wie oben beschrieben, jedoch ohne Eingabe-Parsing.
quelle
Julia, 44 Bytes
Dadurch wird eine anonyme Funktion erstellt, die ein Array von Tupeln als Eingabe akzeptiert und an STDOUT ausgibt.
Ungolfed + Erklärung:
Beispiele:
quelle
JavaScript (ES6),
106858068 ByteGemäß den aktualisierten Anforderungen ist jetzt eine Liste von Aufgaben zulässig
Nimmt keine oder mehr Argumente an: 80 Bytes
Ursprünglicher Versuch, 106 Bytes:
quelle
String.repeat()
?a
hilft das zweidimensionale nicht wirklich. Ich hatte so etwas im Sinn()=>{for(i=0,s='';a=arguments[i++];)s+='_'.repeat(a[0])+'-'.repeat(a[1]-a[0])+"\n";return s}
.a=>a.reduce((p,v)=>p+=' '.repeat(z=v[0])+'-'.repeat(v[1]-z)+"\n",'')
Return value does not matter, your code must print the timeline on STDOUT.
(und wäre auch kürzer)C: 108 Bytes
Ungolfed:
Nimmt als Parameter eine Liste von Ganzzahlen, die mit abgeschlossen sind
-1
. Beispielsweise:Es verwendet
c
zwischen Beschriftungsfeldern und Striche zu wechseln.quelle
*l>=0
ist das gleiche wie*l+1
das, was kürzer ist.c&&putchar
ist kürzer als ternär. Wenn Sie ersetzenc=!c
mitc^=13
(1 Byte) können Sie ändern ,c?45:32
bis32+c
(-3 Bytes). Bewegenc
Flip ausfor
bis zum Ende der Schleife:(c^=13)||putchar(10);
.c;void g(int*l){for(;*l+1;l++){l[1]-=c?0:*l;while(l[0]--)putchar(32+c);(c^=13)||putchar(10);}}
- 94 Bytes.Perl:
4241 ZeichenNur um mindestens eine Lösung mit String-Parsing zu haben.
Probelauf:
quelle
Java 8,
280275246204195185180 BytesEine Methode, die eine durch Kommas getrennte Eingabezeichenfolge verwendet und das resultierende ASCII-Gantt-Diagramm an stdout ausgibt.
Vielen Dank an durron597 und masterX244, die mir geholfen haben, 10 Bytes zu sparen
quelle
Integer i=0;
tunfor(;i<i.parseInt;
, können Sie 8 Zeichen speichern.t.split(",")
würde eine Ausnahme auslösen ).Java,
187181197183101 BytesUngolfed (Art):
Akzeptiert Eingaben als 2D-Array von
int
s. Vielen Dank an masterX244 für den Hinweis, dass dies nach den Regeln zulässig ist.quelle
Jelly ,
139 BytesProbieren Sie es online!
Übernimmt die Eingabe als
[[5, 20], [5, 20], [2, 10], [15, 19]]
.-4 Bytes danke an Erik
quelle
APL (Dyalog Classic) , 12 Byte
Probieren Sie es online!
APL hat keine Varargs, daher ist das Argument hier eine einzelne Nx2-Matrix.
quelle
↑'-'\⍨¨≤∘⍳¨
JavaScript (ES8), 54 Byte
Probieren Sie es online aus
quelle
PowerShell 3.0,
4836 BytesVielen Dank an Mazzy für das Speichern von 12 mit einer besseren Möglichkeit, die Liste weiterzugeben
Alter Code und Erklärung:
Nimmt Argumente als Liste von Tupeln, zB (5,20), (5,20), (2,10), (15,19). Wir mussten $ b auf einen Wert zurücksetzen, um die leere Zeichenfolge zu pflegen, da sie beim Aufruf ohne Eingabe irgendwie in den foreach-Block einging.
quelle
$args|%{" "*$_[0]+"-"*($_[1]-$_[0])}
. Speichern unterget-asciiGantt.ps1
. Testskript.\get-asciiGantt.ps1 (5,20) (5,20) (2,10) (15,19)
R ,
117 9075 BytesProbieren Sie es online!
Giuseppe hat mindestens 29 Bytes von meiner ursprünglichen Antwort entfernt!
Die Idee ist einfach: Drucken Sie so viele
" "
wie nötig, gefolgt von so vielen"-"
wie nötig. Die Eingabe ist eine2*L
Matrix mit L der Anzahl der Paare. Die vektorisierte Funktiondiff
wird verwendet, um die Anzahl von "-" zu erhalten.quelle
matrix
Idee festzuhalten, während ich einefor
Schleife benutze ... ty!y
, um ein paar mehr zu retten :)<
statt*
und Sie können dies auf 81 Bytes bekommenVBA (Excel),
99 bis90 ByteMit Sofortfenster und
[A1]
als Eingabe zB.0-1,2-5
Vielen Dank an @TaylorSott für das Schneiden einiger Bytes.
quelle
a=[A1]:b=Split(a,",")
bis ändernb=Split([A1])
. Sie können auch das Leerzeichen vor derTo
In-For
Loop-Deklaration einfügen.CoffeeScript,
10482, 65 BytesAufgabenliste (ES6): 65 Byte
Aufgabenliste (ES5-Variante): 82 Byte
Null oder mehr Argumente: 104 Byte
Nicht abgeschlossen:
quelle
Array.from(arguments)
anstelle von verwenden[].slice.call(arguments)
.arguments
mehr darauf verweisen .PHP,
9491 BytesNimmt eine Liste von Aufgaben auf (zB
[[5,20],[5,20],[2,10],[15,19]]
). Vielen Dank an @IsmaelMiguel für die Erinnerung an variable Funktionsnamen.Ursprünglicher Versuch: 94 Bytes
quelle
$R=str_repeat;foreach($G as$v)echo$R(' ',$v[0]),$R('-',$v[1]-$v[0]),'\n';
(Ersetzen Sie die\n
durch eine echte Newline). Damit dies funktioniert, müssen Sie ein Array auf den Schlüssel$G
über POST / GET / SESSION / COOKIE senden ...GET
Parameter zählen? Und ich denke, dasGET
nutzt STDIN.PHP, 89 Zeichen (Funktionskörper)
Ich wollte Strings lesen, aber da viele der Einträge Arrays aus ganzzahligen Paaren enthielten, nahm ich an, dass ich der Kürze halber dem Beispiel folgen würde.
Für jedes Tupel
$a
im Array gebe$x
ich eine Folge von Strichen wieder$a[1] - $a[0]
, die$a[1]
mit Leerzeichen auf die größere Zahl aufgefüllt sind. Dann die obligatorische Newline.quelle
printf()
scheint kürzer zu sein alsecho
+str_pad()
:function gantt($x){array_map(function($a){printf("%$a[1]s␊",str_repeat('-',$a[1]-$a[0]));},$x);}
(Das ␊ im Code steht für eine wörtliche Neuzeile: Schreiben Sie einfach Ihren Code dort hinein.)foreach
besser:function g($x){foreach($x as$a)printf("%$a[1]s␊",str_repeat('-',$a[1]-$a[0]));}
Und das sind 79 Zeichen inklusive allem.Gema : 47 Zeichen
Probelauf:
quelle
PostgreSQL: 160 Zeichen
Probelauf:
quelle
J, 21 Bytes
ungolfed
Dies ist im Wesentlichen nur Kopie Verbs J
#
, aber die wir kopieren das Leerzeichen Kopf der Liste{.
Anzahl der Male, und der Bindestrich - Zeichen „2. Listenelement minus 1. Listenelement“ Mal:-~/
. Leider müssen wir deshalb den Rang"1
explizit angeben , und wir müssen Adverse verwenden::
, um mit dem leeren Fall umzugehen .Probieren Sie es online!
quelle