A lista de diferenças de uma lista de números inteiros é a diferença de lista de membros consecutivos.
Por exemplo, a lista de diferenças de
1, 3, 2 ,4
é
2, -1, 2
Sua tarefa é tomar como entrada uma lista de diferenças e exibir como seria a lista de diferenças se a lista original fosse classificada.
Por exemplo, a lista de diferenças
2, 1, -2, -1
Pode representar uma lista
2 4 5 3 2
Que quando classificado é
2 2 3 4 5
Que tem uma lista diferente de
0 1 1 1
Isso é código-golfe, então as respostas serão pontuadas em bytes, com menos bytes sendo melhores.
code-golf
array-manipulation
Assistente de Trigo
fonte
fonte
[-2, 100, -2, -1]
, por exemplo.Respostas:
05AB1E , 4 bytes
Experimente online!
Explicação
fonte
Undelta
05AB1E possui os mais embutidos nichos. o0Undelta
ಠ ___ ಠPython 3 com Numpy ,
565453 bytes2 bytes de desconto graças a @Artyer (Numpy em
sort
vez de padrãosorted
). 1 byte off graças a @notjagan (mudança0
paracumsum
)O código define uma função anônima que insere uma lista ou uma matriz Numpy e gera uma matriz Numpy.
Experimente online!
fonte
numpy
foi muito mais longa. Volto amanhã para votar novamente, porque já vejo você no limite. Muito agradável!diff(sort([0 cumsum(x)]))
(em Matlab,[ ]
é concatenação)0
para ocumsum
.Mathematica, 40 bytes
fonte
Differences@Sort@FoldList[+##&,1,#]&
Gelatina , 6 bytes
Experimente online!
fonte
Casca , 4 bytes
Experimente online!
Explicação
fonte
scanl(+)0
em Haskell.Pitão , 9 bytes
-1 byte graças a @EriktheOutgolfer .
Suíte de teste.
Pitão , 10 bytes
Experimente online! ou Tente mais casos de teste .
fonte
+0sM._
vez de.u+YNQ0
para -1.m=+Z
é uma variante do mesmo comprimentosM._
, mas, infelizmente, não parece que possa ser menor.JavaScript (ES6),
5756 bytesGuardado 1 byte graças a @ETHproductions
Demo
Mostrar snippet de código
fonte
.sort((a,b)=>a-b)
Essa é a maneira de obter deltas? Classificando com subtração? : Pmap()
fornece os deltas. Este código os classifica. O segundo mapa reconstrói os novos deltas. Osort()
método JS usa ordem lexicográfica por padrão. Portanto, precisamos desse retorno de chamada especializado para números> 9 (infelizmente).-p+(p=n)
mói meu artes, mas, infelizmente, não há nenhuma maneira melhor ... a menos que ...Java 8, 123 bytes
A solução padrão: entrada de soma acumulada, classificação e, em seguida, diff. Também não há truques substanciais de implementação.
Transmitir para
Consumer<int[]>
. Saída com entrada mutada.Experimente Online
Lambda ungolfed
Agradecimentos
fonte
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];}
(cuidado com caracteres invisíveis da SE, quando copiar / colar)for(;i>0;)l[i-1]=d[i]-d[--i];
(último ciclo)for(;i-->0;)l[i]=d[i+1]-d[i];
mesmo comprimento. Atualize para vir.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]);}
.Braquilog , 15 bytes
Experimente online!
fonte
R ,
3132 bytes-4 bytes graças a @ user2390246 por
diffinv
+5 bytes do Jarko para
cat
Lê de stdin, escreve para stdout.
diffinv
é um inversodiff
para um determinado valor inicial (0 por padrão). Como édiff
editado novamente, não importa qual é esse valor.Conforme apontado por Jarko Dubbeldam, eu precisava produzir corretamente o resultado, ao custo de cinco bytes. Alas.
Experimente online!
fonte
source
) não gera nada.diffinv
vez decumsum
não precisar acrescentar zero.Python 2 , 83 bytes
Experimente online!
Horrible solution.
fonte
+=
operator on lists works with any iterable, so you can user+=r[-1]+i,
instead ofr+=[r[-1]+i]
and save one byte.Perl 6, 46 bytes
Try it
Expanded:
fonte
Haskell, 74 bytes
Try it online!
Straightforward.
fonte
=<<
from the function monad comes in handy:(zipWith(-)=<<tail).sort.scanl(+)0
zipWith
.TI-Basic (TI-84 Plus CE), 23 bytes
Prompts for user input. The list must be input with a leading
{
, with numbers separated by,
, and with an optional trailing}
.TI-Basic is a tokenized language;
ΔList(
andcumSum(
are two-byte tokens, all other tokens used are one byte each.Example run (with
NAME
as the program name and{4,-2,7,-4,0}
as the input):Explanation:
fonte
L
's?C++ (gcc), 136 bytes
As unnamed generic lambda, assuming input to be like
std::list
and returning via reference parameter.Try it online!
Ungolfed:
fonte
Pyth, 8 bytes
Demonstration
fonte
TI-Basic, 20 bytes
fonte
Perl 5, 87 + 1 (-a) = 88 bytes
Try it online!
fonte
VB.NET (.NET 4.5), 109 bytes
A function that expects a list as input and modifies it directly. The original parameter can then be used for output
Try it online!
fonte
APL (Dyalog),
1514 bytes-1 byte thanks to ngn.
+\
cumulative sum0,
prepend a zero(
…)
apply the following tacit function on that:⊂
enclose (so we can pick multiple items)⍋⊃¨
let each of the indices that would sort the argument pick from that¯2-/
reversed pairwise differenceTry it online!
Original solution found by the Code Golf Hackathon participants at the Dyalog '17 User Meeting:
Try it online!
⎕
prompt for input0,
prepend a zero+\
cumulative suml←
store asl
⍋
find the indices that will sortl
l[
…]
use that to index intol
¯2-/
reversed pairwise differencefonte
MATL, 6 bytes
Try it online!
fonte
Gaia, 7 bytes
Try it online!
Explanation
fonte
k, 16 bytes
Try it online!
fonte
Japt, 10 bytes
Test it
fonte
Röda, 42 bytes
Try it online!
This is similar to the Perl 6 answer.
.sort
is|sort
,.rotor(2=>-1).flat
is|slide 2
and.map(*R-*)
is|[_2-_1]
.Explanation:
The statement
[i]if i+=_
is equivalent toThe
+=
operator does not push values to the stream, so it is truthy. I could also have used some kind of block (eg.{|j|i+=j;[i]}_
) to tie the addition and pushing statements together, butif
is shorter.fonte
Julia 0.6.0 (34 bytes)
Pretty much a copy of what has been done in R and Python 3
x->diff(sort(cumsum(vcat([0],x))))
fonte
J, 10 bytes
explanation
"sort under scan sum": In J, the Under conjunction
&.
applies the transformation to its right to the input, then applies the verb to its left (in this case sort/:~
) and then does the reverse transformation. That is, J understands how to invert a scan sum, which is exactly what's needed here: the successive differences are the input that, when scan-summed, will produce that scan-sum.Try it online!
fonte