Este es simple: imprima un diagrama de Gantt ASCII .
Dados los rangos de las tareas (tiempo de inicio - Tuplas de tiempo de finalización), imprima una línea de tiempo de Gantt en forma de -
caracteres para la duración de cada tarea, cada tarea en una nueva línea.
Ejemplo
Digamos que mis rangos de tareas son 28->35, 34->40, 39->44
, el Gantt se verá así:
-------
------
-----
Presupuesto
- Puede escribir un programa completo, una función con nombre o una función anónima.
- Su programa / función debe aceptar las tareas a través de STDIN o como argumentos .
- Cada tarea debe representarse como una cadena de
start->end
dóndestart
yend
son enteros . Las tareas están separadas por espacios o comas. Alternativamente , puede obtenerlo como una Tupla de enteros, o como una matriz / colección de 2 enteros. (Por ejemplo, en JavaScript puede obtenerlo como[start,end]
: esto está permitido). - Se debe admitir cualquier número no negativo de tareas (argumentos).
Para que quede claro, no se permite un único argumento de recopilación de tareas. Puede analizar un solo argumento de cadena o admitir argumentos de cero o más tareas. Donde la tarea es una tupla o una colección de tamaño 2.- Puede suponer que solo se proporcionarán datos válidos. Eso significa que cada tarea tiene una duración positiva.
- El valor de retorno no importa, su código debe imprimir la línea de tiempo en STDOUT.
- Salida: por tarea,
start
espacios seguidos de(end-start)
guiones y a\n
. - No es necesario decir que las líneas de salida deben ordenarse en correspondencia con el orden de entrada (tareas).
- Los espacios finales antes del
\n
están permitidos, si eso te ayuda.
Casos de prueba
Input:
(empty)
Output:
(empty)
Input:
0->7,5->6,3->6
Output:
-------
-
---
Input:
5->20,5->20,2->10,15->19
Output:
---------------
---------------
--------
----
Victorioso
- Este es el código de golf, por lo que gana la menor longitud de código (en bytes).
- Tradicionalmente, el desempate es la publicación anterior.
- "Las lagunas estándar ya no son divertidas".
-----
EDITAR
Como muchos de ustedes entendieron que está permitido tener un único argumento de recopilación de tareas, y dado que no hay mucha diferencia entre eso y el requisito original de varargs , ahora está permitido tener un único argumento de recopilación, si no desea usar la opción varargs, o en caso de que su idioma no sea compatible con varargs.
To make it clear...
) no está claro en absoluto.arguments
dentro de la función, pero no puede suponer que searguments[0]
trata de una serie de tareas.Respuestas:
CJam,
1614 bytesEsto espera una lista de listas como entrada. Por ejemplo:
da:
Cómo funciona
Pruébalo en línea aquí
fuente
Python 2, 39 bytes
Solución directa usando multiplicación de cuerdas :)
Acepta entradas formateadas así:
Compruébalo aquí.
fuente
Brainfuck,
120115111 bytesAl menos es más corto que Java :) La entrada es una lista de bytes, donde cada par es una sola línea en el gantt.
Probar
http://copy.sh/brainfuck/
Establezca el fin de la entrada a charcon valor
\0
. Ejemplo de entrada:\5\20\5\20\2\10\15\19
.Tenga en cuenta que establecer el valor de fin de entrada
\0
tendrá el efecto secundario de que no se leerán más entradas (y, por lo tanto, se detendrá el programa) cuando la entrada contenga el número cero. En BF no hay otra forma de saber cuándo se agota la entrada.Explicación*
* (No podrá compilar / ejecutar esto debido a los comentarios)
fuente
<
y>
, y están perfectamente equilibrados.Pyth,
36221914 bytesEste es mi primer programa Pyth. ¡Jakube ayudó a jugar golf 5 bytes!
Espera entrada en el formulario
[[5,20], [5,20], [2,10], [15,19]]
.Puedes probarlo en línea .
fuente
C ++ 14, 69 bytes
Primera vez jugando al golf, ¡este fue un buen problema para empezar!
fuente
std::
sobrecin
ycout
?K, 18 bytes
Espera una lista de pares como entrada:
Descomprimo cada
'
tupla ( ) usando dot-apply (.
) para que dentro de la lambda tenga acceso al valor inicial y final comox
yy
, respectivamente. Luego los vuelvo a ensamblar en una tupla (inicio, longitud) (x,y-x
) y aplico "where" (&
). Esto me da salida de esta manera:Luego, simplemente tengo que indexar en una matriz de 2 caracteres usando esta matriz desigual (
" -"@
) y enviarla a stdout (0:
).fuente
JavaScript ( ES6 ), 63
Editar 3 bytes guardados thx @apsillers
63 bytes sin contar la asignación a F como una función anónima está permitida.
Una función con un número variable de parámetros, según lo solicitado.Una función con una lista de tareas como un solo parámetro.
Pruebe a ejecutar el fragmento a continuación (siendo EcmaScript 6, solo Firefox)
fuente
t[0]
a un global (o puede asignarlo de manera segural
si no desea hacer un global). Además, la especificación permite "una función con nombre o una función anónima", por lo que creo que podría omitirlaF=
en su recuento de bytes.anonymous
. GraciasScala,
676359 bytesUso:
res0()
ores0(Seq(28->35, 34->40, 39->44))
etc.¡Gracias gilad por afeitar 4 bytes usando una expresión for!
fuente
Rubí: 35 caracteres.
Ejecución de muestra:
Actualizado para aceptar múltiples matrices de dos elementos, una para cada tarea a mostrar. (Creo que eso es lo que espera el requisito actualizado).
fuente
Javascript (ES6), 61/66 caracteres
Mi respuesta es casi similar a la publicada por @ edc65, pero con algunas mejoras. Como las tareas en una sola matriz no están permitidas (la función se llamaría así:)
a([3,4], [7,15], [0,14], [10, 15])
, la correcta sería esta ( 66 caracteres sin asignación de nombre):Y si se permite un argumento de matriz (entonces llame así:)
a([[3,4], [7,15], [0,14], [10, 15]])
, entonces sería ( 61 caracteres sin asignación):fuente
SWI-Prolog, 55 bytes
Ejemplo:
a([[5,20],[5,20],[2,10],[15,19]]).
salidasfuente
Haskell, 76 bytes
El formato de entrada es una cadena de tuplas separadas por comas, por ejemplo
"(1,2),(3,4)"
.Ejemplos de uso:
Cómo funciona: análisis sintáctico para la entrada Adjunto la cadena de entrada en
[
y]
y uso nativo de Haskellread
función de listas de tuplas de números enteros. El resto es fácil: para cada tupla,(s,e)
tomes
espacios seguidos dee-s
guiones seguidos de una nueva línea y concatene todo en una sola cadena. Impresión.Haskell, 59 bytes
con formato de entrada relajado:
Ahora se necesita una lista de tuplas, por ejemplo
f [(0,7),(5,6),(3,6)]
.Funciona como se describió anteriormente, pero sin análisis de entrada.
fuente
Julia, 44 bytes
Esto crea una función anónima que acepta una matriz de tuplas como entrada e imprime en STDOUT.
Ungolfed + explicación:
Ejemplos:
fuente
JavaScript (ES6),
106858068 bytesSegún los requisitos actualizados, ahora se acepta una lista de tareas
Toma cero o más argumentos: 80 bytes
Intento original, 106 bytes:
fuente
String.repeat()
?a
realmente no ayuda. Tenía en mente algo así()=>{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.
(y también sería más corto)C: 108 bytes
Sin golf:
Toma como parámetro una lista de enteros terminados por
-1
. Por ejemplo:Se usa
c
para alternar entre espacios de escritura y guiones.fuente
*l>=0
es lo mismo*l+1
que es más corto.c&&putchar
Es más corto que el ternario. Si reemplazac=!c
conc^=13
(+1 byte) puede cambiarc?45:32
a32+c
(-3 bytes). Moverc
flip desdefor
el final del bucle:(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 caracteresSolo para tener al menos una solución con análisis de cadenas también.
Ejecución de muestra:
fuente
Java 8,
280275246204195185180 bytesUn método que toma una cadena de entrada separada por comas e imprime el diagrama de Gantt ascii resultante en stdout.
Gracias a durron597 y masterX244 por ayudarme a ahorrar 10 bytes
fuente
Integer i=0;
puedes hacerlofor(;i<i.parseInt;
, guardando 8 caracteres.t.split(",")
arrojaría una excepción).Java,
187181197183101 bytesSin golf (tipo de):
Acepta la entrada como una matriz 2D de
int
s. Gracias a masterX244 por señalar que esto está permitido por las reglas.fuente
Jalea ,
139 bytesPruébalo en línea!
Toma entrada como
[[5, 20], [5, 20], [2, 10], [15, 19]]
.-4 bytes gracias a Erik
fuente
APL (Dyalog Classic) , 12 bytes
Pruébalo en línea!
APL no tiene varargs, por lo que el argumento aquí es una única matriz Nx2.
fuente
↑'-'\⍨¨≤∘⍳¨
JavaScript (ES8), 54 bytes
Pruébalo en línea
fuente
PowerShell 3.0,
4836 bytesGracias a Mazzy por salvar 12 con una mejor manera de pasar en la lista
Código antiguo y explicación:
Toma argumentos como una lista de tuplas, por ejemplo (5,20), (5,20), (2,10), (15,19). Tuve que predeterminar $ b a un valor para cuidar la cadena vacía porque de alguna manera ingresó al bloque foreach cuando se llamó sin entrada.
fuente
$args|%{" "*$_[0]+"-"*($_[1]-$_[0])}
. Guardar comoget-asciiGantt.ps1
. Script de prueba.\get-asciiGantt.ps1 (5,20) (5,20) (2,10) (15,19)
R ,
117 9075 bytesPruébalo en línea!
¡Giuseppe jugó al menos 29 bytes de mi respuesta original!
La idea es sencilla: imprima tantas
" "
como sea necesario y luego tantas"-"
como sea necesario. La entrada es una2*L
matriz con L el número de pares. La función vectorizadadiff
se usa para obtener el número de "-".fuente
matrix
idea original mientras uso unfor
bucle ... ¡ty!y
para ahorrar unos cuantos más :)<
lugar de*
y puede llevar esto a 81 bytesVBA (Excel),
9990 bytesUsando la ventana Inmediato y
[A1]
como entrada ej.0-1,2-5
Gracias a @TaylorSott por cortar algunos bytes.
fuente
a=[A1]:b=Split(a,",")
ab=Split([A1])
. Además, puede soltar el espacio antesTo
de laFor
declaración en el bucle.CoffeeScript,
10482, 65 bytesLista de tareas (ES6): 65 bytes
Lista de tareas (variante ES5): 82 bytes
Cero o más argumentos: 104 bytes
No minificado:
fuente
Array.from(arguments)
lugar de[].slice.call(arguments)
.arguments
.PHP,
9491 bytesToma una lista de tareas (por ejemplo
[[5,20],[5,20],[2,10],[15,19]]
). Gracias @IsmaelMiguel por el recordatorio de los nombres de las funciones variables.Intento original: 94 bytes
fuente
$R=str_repeat;foreach($G as$v)echo$R(' ',$v[0]),$R('-',$v[1]-$v[0]),'\n';
(reemplace el\n
con una nueva línea real ). Para que esto funcione, debe enviar una matriz en la clave$G
, a través de POST / GET / SESSION / COOKIE ...GET
Cuentan los parámetros? Y creo que esoGET
usa STDIN.PHP, 89 caracteres (cuerpo de la función)
Iba a ir a leer cadenas, pero como muchas de las entradas tomaban conjuntos de pares enteros, pensé que seguiría el ejemplo por razones de brevedad.
Para cada tupla
$a
en la matriz,$x
hago eco de una serie de guiones repetidos$a[1] - $a[0]
, rellenados hasta el número más grande$a[1]
con espacios. Luego la nueva línea obligatoria.fuente
printf()
parece más corto queecho
+str_pad()
:function gantt($x){array_map(function($a){printf("%$a[1]s␊",str_repeat('-',$a[1]-$a[0]));},$x);}
(La ␊ en el código es para una nueva línea literal: simplemente envuelva su código allí.)foreach
es mejor:function g($x){foreach($x as$a)printf("%$a[1]s␊",str_repeat('-',$a[1]-$a[0]));}
y son 79 caracteres, incluido todo.Gema : 47 caracteres
Ejecución de muestra:
fuente
PostgreSQL: 160 caracteres
Ejecución de muestra:
fuente
J, 21 bytes
sin golf
Esto es esencialmente lo mismo verbo copia de J
#
, pero su estamos copiando la cabeza carácter de espacio de la lista{.
número de veces, y el carácter de guión "segundo elemento de la lista menos el primero elemento de la lista de" número de veces:-~/
. Lamentablemente, esto nos obliga a tener que especificar el rango"1
explícitamente, y necesitamos usar Adverse::
para manejar el caso vacío.Pruébalo en línea!
fuente