La lista de diferencias de una lista de enteros es la lista de diferencias de miembros consecutivos.
Por ejemplo, la lista de diferencias de
1, 3, 2 ,4
es
2, -1, 2
Su tarea es tomar como entrada una lista de diferencias y mostrar cómo se vería la lista de diferencias si se ordenara la lista original.
Por ejemplo la lista de diferencias
2, 1, -2, -1
Podría representar una lista
2 4 5 3 2
Que cuando se ordena es
2 2 3 4 5
Que tiene una lista de diferencias de
0 1 1 1
Este es el código de golf, por lo que las respuestas se puntuarán en bytes, siendo mejores menos bytes.
code-golf
array-manipulation
Asistente de trigo
fuente
fuente
[-2, 100, -2, -1]
, por ejemplo.Respuestas:
05AB1E , 4 bytes
Pruébalo en línea!
Explicación
fuente
Undelta
05AB1E tiene la mayoría de los empotrados integrados. o0Undelta
ಠ ___ ಠPython 3 con Numpy ,
565453 bytes2 bytes de descuento gracias a @Artyer (Numpy's en
sort
lugar de estándarsorted
). 1 byte apagado gracias a @notjagan (mudarse0
acumsum
)El código define una función anónima que ingresa una lista o una matriz Numpy y genera una matriz Numpy.
Pruébalo en línea!
fuente
numpy
fue mucho más largo. Volveré mañana para votar esto, porque veo que ya tienes un tope. ¡Muy agradable!diff(sort([0 cumsum(x)]))
(en Matlab,[ ]
es concatenación)0
acumsum
.Mathematica, 40 bytes
fuente
Differences@Sort@FoldList[+##&,1,#]&
Jalea , 6 bytes
Pruébalo en línea!
fuente
Casco , 4 bytes
Pruébalo en línea!
Explicación
fuente
scanl(+)0
en Haskell.Pyth , 9 bytes
-1 byte gracias a @EriktheOutgolfer .
Banco de pruebas.
Pyth , 10 bytes
Pruébalo en línea! o Pruebe más casos de prueba .
fuente
+0sM._
lugar de.u+YNQ0
para -1.m=+Z
es una variante de la misma longitudsM._
, pero lamentablemente no parece que pueda ser más corta.JavaScript (ES6),
5756 bytesGuardado 1 byte gracias a @ETHproductions
Manifestación
Mostrar fragmento de código
fuente
.sort((a,b)=>a-b)
¿Esa es la forma de obtener deltas? Al ordenar con sustracción? : Pmap()
da los deltas. Este código los ordena. El segundo mapa reconstruye los nuevos deltas. Elsort()
método JS usa el orden lexicográfico por defecto. Por lo tanto, necesitamos esta devolución de llamada especializada para números> 9 (lamentablemente).-p+(p=n)
muele mis engranajes, pero lamentablemente no hay mejor manera ... a menos que ...Java 8, 123 bytes
La solución estándar: entrada de suma acumulativa, ordenar, luego diff. No hay trucos sustanciales de implementación tampoco.
Fundido a
Consumer<int[]>
. La salida es entrada mutada.Pruébalo en línea
Lambda sin golf
Expresiones de gratitud
fuente
l->{int s=l.length,d[]=new int[s+1],i=0;for(;i<s;)d[i+1]=d[i]+l[i++];java.util.Arrays.sort(d);for(i=0;i<s;)l[i]=-d[i]+d[++i];}
(tenga cuidado con los caracteres invisibles de SE al copiar / pegar)for(;i>0;)l[i-1]=d[i]-d[--i];
(último bucle)for(;i-->0;)l[i]=d[i+1]-d[i];
la misma longitud. Actualización por venir.l->{int s=l.length,d[]=new int[s+1],i=0;while(i<s)d[i+1]=d[i]+l[i++];for(java.util.Arrays.sort(d);i-->0;l[i]=d[i+1]-d[i]);}
.Brachylog , 15 bytes
Pruébalo en línea!
fuente
R ,
3132 bytes-4 bytes gracias a @ user2390246 por
diffinv
+5 bytes de Jarko para
cat
Lee desde stdin, escribe en stdout.
diffinv
es un inverso dediff
un valor inicial dado (0 por defecto). Como estádiff
editado nuevamente, no importa cuál sea ese valor.Como señaló Jarko Dubbeldam, necesitaba generar correctamente el resultado, a un costo de cinco bytes. Ay.
Pruébalo en línea!
fuente
source
) no genera nada.diffinv
lugar decumsum
no necesita anteponer cero.Python 2 , 83 bytes
Pruébalo en línea!
Solución horrible
fuente
+=
operador de Python en listas funciona con cualquier iterable, por lo que puede usar enr+=r[-1]+i,
lugar der+=[r[-1]+i]
y guardar un byte.Perl 6 , 46 bytes
Intentalo
Expandido:
fuente
Haskell , 74 bytes
Pruébalo en línea!
Sencillo.
fuente
=<<
de la función mónada es útil:(zipWith(-)=<<tail).sort.scanl(+)0
zipWith
.TI-Basic (TI-84 Plus CE), 23 bytes
Solicita la entrada del usuario. La lista debe ser ingresada con un inicio
{
, con números separados por,
, y con un final opcional}
.TI-Basic es un lenguaje tokenizado ;
ΔList(
ycumSum(
son tokens de dos bytes, todos los demás tokens utilizados son de un byte cada uno.Ejemplo de ejecución (con
NAME
el nombre del programa y{4,-2,7,-4,0}
la entrada):Explicación:
fuente
L
's?C ++ (gcc) , 136 bytes
Como lambda genérico sin nombre, suponiendo que la entrada sea similar
std::list
y que regrese a través del parámetro de referencia.Pruébalo en línea!
Sin golf:
fuente
Pyth, 8 bytes
Demostración
fuente
TI-Basic, 20 bytes
fuente
Perl 5 , 87 + 1 (-a) = 88 bytes
Pruébalo en línea!
fuente
VB.NET (.NET 4.5), 109 bytes
Una función que espera una lista como entrada y la modifica directamente. El parámetro original se puede usar para la salida
Pruébalo en línea!
fuente
APL (Dyalog) ,
1514 bytes-1 byte gracias a ngn .
+\
suma acumulativa0,
anteponer un cero(
...)
aplique la siguiente función tácita sobre eso:⊂
adjuntar (para que podamos elegir varios elementos)⍋⊃¨
deje que cada uno de los índices que ordenaría el argumento elija¯2-/
diferencia por pares invertidaPruébalo en línea!
Solución original encontrada por los participantes de Code Golf Hackathon en la reunión de usuarios de Dyalog '17 :
Pruébalo en línea!
⎕
solicitud de entrada0,
anteponer un cero+\
suma acumulatival←
almacenar comol
⍋
encuentra los índices que ordenaránl
l[
...]
usa eso para indexarl
¯2-/
diferencia por pares invertidafuente
MATL , 6 bytes
Pruébalo en línea!
fuente
Gaia , 7 bytes
Pruébalo en línea!
Explicación
fuente
k , 16 bytes
Pruébalo en línea!
fuente
Japt , 10 bytes
Pruébalo
fuente
Röda , 42 bytes
Pruébalo en línea!
Esto es similar a la respuesta de Perl 6 .
.sort
es|sort
,.rotor(2=>-1).flat
es|slide 2
y.map(*R-*)
es|[_2-_1]
.Explicación:
La declaración
[i]if i+=_
es equivalente aEl
+=
operador no envía valores a la secuencia, por lo que es veraz. También podría haber usado algún tipo de bloqueo (p. Ej.{|j|i+=j;[i]}_
) Para unir la suma y las declaraciones, peroif
es más corto.fuente
Julia 0.6.0 (34 bytes)
Más o menos una copia de lo que se ha hecho en R y Python 3
x->diff(sort(cumsum(vcat([0],x))))
fuente
J, 10 bytes
explicación
"ordenar bajo suma de exploración": en J, la conjunción Bajo
&.
aplica la transformación a su derecha a la entrada, luego aplica el verbo a su izquierda (en este caso, ordenar/:~
) y luego realiza la transformación inversa. Es decir, J entiende cómo invertir una suma de exploración, que es exactamente lo que se necesita aquí: las diferencias sucesivas son la entrada que, cuando se suma la exploración, producirá esa suma de exploración.Pruébalo en línea!
fuente