C'est simple: imprimez un diagramme de Gantt ASCII .
En fonction des plages de tâches (tuples de début et de fin), imprimez une chronologie de Gantt sous forme de -
caractères pour chaque durée de tâche - chaque tâche dans une nouvelle ligne.
Exemple
Disons que mes plages de tâches sont 28->35, 34->40, 39->44
, le Gantt ressemblera à ceci:
-------
------
-----
Caractéristiques
- Vous pouvez écrire un programme complet, une fonction nommée ou une fonction anonyme.
- Votre programme / fonction doit accepter les tâches via STDIN ou comme arguments .
- Chaque tâche doit être représentée comme une chaîne de
start->end
oùstart
etend
sont des entiers . Les tâches sont séparées par des espaces ou des virgules. Alternativement , vous pouvez l'obtenir en tant que Tuple de nombres entiers, ou en tant que tableau / collection de 2 nombres entiers. (Par exemple, en JavaScript, vous pouvez l'obtenir sous la forme[start,end]
- cela est autorisé). - Tout nombre non négatif de tâches (arguments) doit être pris en charge.
Pour être clair, un seul argument de la collecte des tâches n'est pas autorisé. Vous pouvez soit analyser un seul argument de chaîne, soit prendre en charge zéro ou plusieurs arguments de tâches. Où la tâche est un tuple ou une collection de taille 2.- Vous pouvez supposer que seule une entrée valide sera donnée. Cela signifie que chaque tâche a une durée positive.
- La valeur de retour n'a pas d'importance, votre code doit imprimer la chronologie sur STDOUT.
- Sortie: par tâche,
start
espaces suivis de(end-start)
tirets et a\n
. - Inutile de dire que les lignes de sortie doivent être ordonnées en conséquence avec l'ordre d'entrée (tâches).
- Les espaces de fin avant le
\n
sont autorisés, si cela vous aide.
Cas de test
Input:
(empty)
Output:
(empty)
Input:
0->7,5->6,3->6
Output:
-------
-
---
Input:
5->20,5->20,2->10,15->19
Output:
---------------
---------------
--------
----
Gagnant
- Il s'agit de code-golf, donc la plus petite longueur de code (en octets) l'emporte.
- Traditionnellement, le bris d'égalité est un post antérieur.
- "Les failles standard ne sont plus drôles".
-----
MODIFIER
Comme beaucoup d'entre vous ont compris qu'il est autorisé d'avoir un seul argument de collection de tâches, et comme il n'y a pas beaucoup de différence entre cela et l' exigence varargs d' origine , il est désormais autorisé d'avoir un seul argument de collection, si vous ne souhaitez pas utiliser l'option varargs, ou dans le cas où votre langue ne prend pas en charge varargs.
To make it clear...
) n'est pas clair du tout.arguments
dans la fonction, mais vous ne pouvez pas supposer qu'ilarguments[0]
s'agit d'un tableau de tâches.Réponses:
CJam,
1614 octetsCela attend une liste de listes en entrée. Par exemple:
donne:
Comment ça marche
Essayez-le en ligne ici
la source
Python 2, 39 octets
Solution simple utilisant la multiplication de chaînes :)
Accepte une entrée formatée comme suit:
Vérifiez le ici.
la source
Brainfuck,
120115111 octetsAu moins, c'est plus court que Java :) L'entrée est une liste d'octets, où chaque paire est une seule ligne dans le gantt.
Essaie
http://copy.sh/brainfuck/
Définissez la fin de l'entrée sur charavec une valeur
\0
. Exemple de saisie\5\20\5\20\2\10\15\19
.Notez que la définition de la valeur de fin d'entrée
\0
aura pour effet secondaire qu'aucune autre entrée ne sera lue (et donc arrêtera le programme) lorsque l'entrée contient le numéro zéro. Dans BF, il n'y a pas d'autre moyen de savoir quand l'entrée est épuisée.Explication*
* (Vous ne pourrez pas compiler / exécuter cela à cause des commentaires)
la source
<
et>
, et elles sont parfaitement équilibrées.Pyth,
36221914 octetsCeci est mon premier programme Pyth. Jakube a aidé à jouer au golf sur 5 octets!
Il attend une entrée dans le formulaire
[[5,20], [5,20], [2,10], [15,19]]
.Vous pouvez l' essayer en ligne .
la source
C ++ 14, 69 octets
Pour la première fois au golf, c'était un bon problème pour commencer!
la source
std::
decin
etcout
?K, 18 octets
Attend une liste de paires en entrée:
Je déballe chaque (
'
) en utilisant tuple dot-appliquer (.
) de sorte que l' intérieur de la lambda je accès au début et à la fin comme valeurx
ety
, respectivement. Ensuite, je les rassemble dans un tuple (début, longueur) (x,y-x
) et applique "où" (&
). Cela me donne une sortie comme ça:Ensuite, je dois simplement indexer dans un tableau à 2 caractères en utilisant cette matrice irrégulière (
" -"@
) et envoyer tout cela à stdout (0:
).la source
JavaScript ( ES6 ), 63
Modifier 3 octets enregistrés thx @apsillers
63 octets sans compter l'affectation à F comme fonction anonyme est autorisé.
Une fonction avec un nombre variable de paramètres, comme demandé.Une fonction avec une liste de tâches en tant que paramètre unique.
Testez l'exécution de l'extrait ci-dessous (étant EcmaScript 6, Firefox uniquement)
la source
t[0]
à un global (ou vous pouvez l'affecter en toute sécuritél
si vous ne voulez pas créer un global). De plus, la spécification autorise "une fonction nommée ou une fonction anonyme", donc je pense que vous pouvez omettre leF=
nombre d'octets.anonymous
réflexion. MerciScala,
676359 octetsUtilisation:
res0()
oures0(Seq(28->35, 34->40, 39->44))
etc.Merci gilad d'avoir rasé 4 octets en utilisant une expression!
la source
Ruby: 35 caractères
Échantillon échantillon:
Mis à jour pour accepter plusieurs tableaux à deux éléments, un pour chaque tâche à afficher. (Je pense que c'est ce que l'exigence mise à jour attend.)
la source
Javascript (ES6), 61/66 caractères
Ma réponse est presque similaire à celle publiée par @ edc65, mais avec quelques améliorations. Comme les tâches dans un seul tableau ne sont pas autorisées (donc la fonction serait appelée comme ceci
a([3,4], [7,15], [0,14], [10, 15])
:), la bonne serait la suivante ( 66 caractères sans attribution de nom):Et si un argument de tableau est autorisé (donc appel fn comme ceci:)
a([[3,4], [7,15], [0,14], [10, 15]])
, alors ce serait ( 61 caractères sans affectation):la source
SWI-Prolog, 55 octets
Exemple:
a([[5,20],[5,20],[2,10],[15,19]]).
sortiesla source
Haskell, 76 octets
Le format d'entrée est une chaîne de tuples séparés par des virgules, par exemple
"(1,2),(3,4)"
.Exemples d'utilisation:
Comment ça marche: Je joins pour analyser la chaîne d' entrée d'entrée
[
et]
et utiliser natif de Haskellread
fonction pour les listes de tuples entières. Le reste est simple: pour chaque tuple,(s,e)
prenez dess
espaces suivis dee-s
tirets suivis d'une nouvelle ligne et concaténez le tout en une seule chaîne. Impression.Haskell, 59 octets
avec un format d'entrée détendu:
Maintenant, il faut une liste de tuples, par exemple
f [(0,7),(5,6),(3,6)]
.Fonctionne comme décrit ci-dessus, mais sans analyse d'entrée.
la source
Julia, 44 octets
Cela crée une fonction anonyme qui accepte un tableau de tuples en entrée et imprime sur STDOUT.
Ungolfed + explication:
Exemples:
la source
JavaScript (ES6),
106858068 octetsConformément aux exigences mises à jour, une liste de tâches est désormais acceptable
Prend zéro ou plusieurs arguments: 80 octets
Tentative d'origine, 106 octets:
la source
String.repeat()
?a
n'aide pas vraiment. Je pensais à quelque chose comme()=>{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.
(et serait plus court aussi)C: 108 octets
Ungolfed:
Prend comme paramètre une liste d'entiers se terminant par
-1
. Par exemple:Il permet
c
de basculer entre les espaces d'écriture et les tirets.la source
*l>=0
est le même que celui*l+1
qui est plus court.c&&putchar
est plus courte que ternaire. Si vous remplacezc=!c
parc^=13
(+1 octet), vous pouvez passerc?45:32
à32+c
(-3 octets). Déplacer lac
médaille defor
la fin de la boucle:(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 octets.Perl:
4241 caractèresJuste pour avoir au moins une solution avec l'analyse des chaînes aussi.
Échantillon échantillon:
la source
Java 8,
280275246204195185180 octetsUne méthode qui prend une chaîne d'entrée séparée par des virgules et imprime le diagramme de Gantt ascii résultant sur stdout.
Merci à durron597 et masterX244 pour m'avoir aidé à économiser 10 octets
la source
Integer i=0;
vous pouvez le fairefor(;i<i.parseInt;
, en sauvant 8 caractères.t.split(",")
lèverait une exception).Java,
187181197183101 octetsNon golfé (en quelque sorte):
Accepte l'entrée comme un tableau 2D de
int
s. Merci à masterX244 d' avoir souligné que cela est autorisé par les règles.la source
Gelée ,
139 octetsEssayez-le en ligne!
Prend les entrées en tant que
[[5, 20], [5, 20], [2, 10], [15, 19]]
.-4 octets grâce à Erik
la source
APL (Dyalog Classic) , 12 octets
Essayez-le en ligne!
APL n'a pas de varargs, donc l'argument ici est une seule matrice Nx2.
la source
↑'-'\⍨¨≤∘⍳¨
JavaScript (ES8), 54 octets
Essayez-le en ligne
la source
PowerShell 3.0,
4836 octetsMerci à Mazzy d'avoir économisé 12 avec une meilleure façon de passer dans la liste
Ancien code et explication:
Prend les arguments comme une liste de tuples, par exemple (5,20), (5,20), (2,10), (15,19). J'ai dû par défaut $ b sur une valeur pour prendre soin de la chaîne vide, car il est entré en quelque sorte dans le bloc foreach lorsqu'il a été appelé sans entrée.
la source
$args|%{" "*$_[0]+"-"*($_[1]-$_[0])}
. Enregistrer sousget-asciiGantt.ps1
. Script de test.\get-asciiGantt.ps1 (5,20) (5,20) (2,10) (15,19)
R ,
117 9075 octetsEssayez-le en ligne!
Giuseppe a joué au moins 29 octets sur ma réponse d'origine!
L'idée est simple: imprimer autant
" "
que nécessaire, puis autant"-"
que nécessaire. L'entrée est une2*L
matrice avec L le nombre de paires. La fonction vectoriséediff
est utilisée pour obtenir le nombre de "-".la source
matrix
idée originale tout en utilisant unefor
boucle ... ty!y
pour en sauver quelques autres :)<
plutôt*
et vous pouvez obtenir ceci à 81 octetsVBA (Excel),
9990 octetsUtilisation de la fenêtre immédiate et
[A1]
comme entrée, par exemple.0-1,2-5
Merci à @TaylorSott d'avoir coupé quelques octets.
la source
a=[A1]:b=Split(a,",")
àb=Split([A1])
. En outre, vous pouvez supprimer l'espace avant laTo
dans laFor
déclaration en boucle.CoffeeScript,
10482, 65 octetsListe des tâches (ES6): 65 octets
Liste des tâches (variante ES5): 82 octets
Zéro ou plusieurs arguments: 104 octets
Non minée:
la source
Array.from(arguments)
place de[].slice.call(arguments)
.arguments
.PHP,
9491 octetsPrend une liste de tâches (par exemple
[[5,20],[5,20],[2,10],[15,19]]
). Merci @IsmaelMiguel pour le rappel des noms de fonctions variables.Tentative d'origine: 94 octets
la source
$R=str_repeat;foreach($G as$v)echo$R(' ',$v[0]),$R('-',$v[1]-$v[0]),'\n';
(remplacez le\n
par une vraie nouvelle ligne). Pour que cela fonctionne, vous devez envoyer un tableau sur la clé$G
, via POST / GET / SESSION / COOKIE ...GET
paramètres comptent-ils? Et je pense que celaGET
utilise STDIN.PHP, 89 caractères (corps de fonction)
J'allais aller lire des chaînes, mais comme beaucoup d'entrées prenaient des tableaux de paires entières, j'ai pensé que je ferais de même pour des raisons de concision.
Pour chaque tuple
$a
dans le tableau,$x
je fais écho à une chaîne de tirets répétée$a[1] - $a[0]
, complétée au plus grand nombre$a[1]
avec des espaces. Puis la nouvelle ligne obligatoire.la source
printf()
semble plus court queecho
+str_pad()
:function gantt($x){array_map(function($a){printf("%$a[1]s␊",str_repeat('-',$a[1]-$a[0]));},$x);}
(Le ␊ dans le code est pour une nouvelle ligne littérale: il suffit d'envelopper votre code là-bas.)foreach
c'est mieux:function g($x){foreach($x as$a)printf("%$a[1]s␊",str_repeat('-',$a[1]-$a[0]));}
et c'est 79 caractères tout compris.Gema : 47 caractères
Échantillon échantillon:
la source
PostgreSQL: 160 caractères
Échantillon échantillon:
la source
J, 21 octets
non golfé
Ceci est essentiellement juste verbe copie de J
#
, mais son nous copient la tête de caractère d'espace de liste{.
nombre de fois, et le caractère de trait d' union « 2ème élément de la liste moins 1er élément de la liste » nombre de fois:-~/
. Malheureusement, cela nous oblige à spécifier explicitement le rang"1
, et nous devons utiliser Adverse::
pour gérer le cas vide.Essayez-le en ligne!
la source