Lista różnic listy liczb całkowitych to różnice list kolejnych członków.
Na przykład lista różnic
1, 3, 2 ,4
jest
2, -1, 2
Twoim zadaniem jest pobranie jako listy różnicowej i wyświetlenie, jak wyglądałaby lista różnic, gdyby posortowana była lista oryginalna.
Na przykład lista różnic
2, 1, -2, -1
Może reprezentować listę
2 4 5 3 2
Które po posortowaniu jest
2 2 3 4 5
Która ma listę różnic
0 1 1 1
To jest golf golfowy, więc odpowiedzi będą liczone w bajtach, przy czym mniej bajtów będzie lepszych.
code-golf
array-manipulation
Kreator pszenicy
źródło
źródło
[-2, 100, -2, -1]
na przykład różne wyniki .Odpowiedzi:
05AB1E , 4 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Undelta
05AB1E ma najbardziej niszowe wbudowane funkcje. o0Undelta
ಠ ___ ಠPython 3 z Numpy ,
565453 bajtów2 bajty wyłączone dzięki @Artyer (Numpy
sort
zamiast standardowychsorted
). 1 bajt off dzięki @notjagan (przejście0
documsum
)Kod definiuje anonimową funkcję, która wprowadza listę lub tablicę Numpy i wyprowadza tablicę Numpy.
Wypróbuj online!
źródło
numpy
było znacznie dłuższe. Wrócę jutro, aby głosować za tym, ponieważ widzę, że już jesteś ograniczony. Bardzo dobrze!diff(sort([0 cumsum(x)]))
(w Matlabie[ ]
jest konkatenacja)0
documsum
.Mathematica, 40 bajtów
źródło
Differences@Sort@FoldList[+##&,1,#]&
Galaretka , 6 bajtów
Wypróbuj online!
źródło
Łuska , 4 bajty
Wypróbuj online!
Wyjaśnienie
źródło
scanl(+)0
w Haskell.Pyth , 9 bajtów
-1 bajt dzięki @EriktheOutgolfer .
Pakiet testowy.
Pyth , 10 bajtów
Wypróbuj online! lub Wypróbuj więcej przypadków testowych .
źródło
+0sM._
zamiast.u+YNQ0
-1.m=+Z
jest wariantem o tej samej długościsM._
, ale niestety nie wydaje się, że może być krótszy.JavaScript (ES6),
5756 bajtówZaoszczędzono 1 bajt dzięki produktom @ETH
Próbny
Pokaż fragment kodu
źródło
.sort((a,b)=>a-b)
To jest sposób na uzyskanie delt? Sortując z odejmowaniem? : Pmap()
daje delty. Ten kod je sortuje. Druga mapa odbudowuje nowe delty. Metoda JSsort()
domyślnie używa kolejności leksykograficznej. Potrzebujemy więc tego wyspecjalizowanego oddzwaniania dla numerów> 9 (niestety).-p+(p=n)
szlifuje moje narzędzia, ale niestety nie ma lepszego sposobu ... chyba że ...Java 8, 123 bajty
Standardowe rozwiązanie: suma wejściowa, sortowanie, a następnie różnicowanie. Nie ma też istotnych sztuczek związanych z wdrażaniem.
Przesyłaj do
Consumer<int[]>
. Wyjście jest zmutowanym wejściem.Wypróbuj online
Niegolfowana lambda
Podziękowanie
źródło
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];}
(uwaga niewidoczne znaki, SE, gdy kopiowanie / wklejanie)for(;i>0;)l[i-1]=d[i]-d[--i];
(ostatnia pętla)for(;i-->0;)l[i]=d[i+1]-d[i];
do tej samej długości. Zaktualizuj, aby nadejść.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 bajtów
Wypróbuj online!
źródło
R ,
3132 bajtów-4 bajty dzięki @ user2390246 dla
diffinv
+5 bajtów od Jarko dla
cat
Odczytuje ze standardowego, zapisuje na standardowe.
diffinv
jest odwrotnościądiff
dla danej wartości początkowej (domyślnie 0). Ponieważ jestdiff
ponownie edytowany, nie ma znaczenia, co to za wartość.Jak zauważył Jarko Dubbeldam, musiałem poprawnie wydrukować wynik, kosztem pięciu bajtów. Niestety.
Wypróbuj online!
źródło
source
) nie powoduje wypisania niczego.diffinv
raczej niżcumsum
nie musisz dodawać zera.Python 2 , 83 bajty
Wypróbuj online!
Straszne rozwiązanie.
źródło
+=
Operator Pythona na listach działa z dowolnym iterowalnym, więc możesz użyćr+=r[-1]+i,
zamiastr+=[r[-1]+i]
jednego bajtu i zapisać go.Perl 6 , 46 bajtów
Spróbuj
Rozszerzony:
źródło
Haskell , 74 bajty
Wypróbuj online!
Bezpośredni.
źródło
=<<
z funkcji przydaje się monada:(zipWith(-)=<<tail).sort.scanl(+)0
zipWith
.TI-Basic (TI-84 Plus CE), 23 bajty
Monity o dane wejściowe użytkownika. Lista musi być wprowadzana z wiodącym
{
, z liczbami oddzielonymi przez,
i z opcjonalnym końcowym}
.TI-Basic to tokenizowany język ;
ΔList(
icumSum(
są żetonami dwubajtowymi, wszystkie pozostałe używane żetony są jednobajtowe.Przykład uruchomienia (z
NAME
nazwą programu i{4,-2,7,-4,0}
jako dane wejściowe):Wyjaśnienie:
źródło
L
?C ++ (gcc) , 136 bajtów
Jako nienazwana ogólna lambda, przy założeniu, że dane wejściowe są podobne
std::list
i zwracane przez parametr referencyjny.Wypróbuj online!
Nie golfowany:
źródło
Pyth, 8 bajtów
Demonstracja
źródło
TI-Basic, 20 bajtów
źródło
Perl 5 , 87 + 1 (-a) = 88 bajtów
Wypróbuj online!
źródło
VB.NET (.NET 4.5), 109 bajtów
Funkcja, która oczekuje listy jako danych wejściowych i modyfikuje ją bezpośrednio. Oryginalny parametr może być następnie użyty do wydruku
Wypróbuj online!
źródło
APL (Dyalog) ,
1514 bajtów-1 bajt dzięki ngn .
+\
suma skumulowana0,
wstaw zero(
…)
Zastosuj następującą funkcję ukrytą:⊂
załącz (abyśmy mogli wybrać wiele przedmiotów)⍋⊃¨
niech każdy z indeksów, który sortowałby argument, wybrał z tego¯2-/
odwrócona różnica parWypróbuj online!
Oryginalne rozwiązanie znalezione przez uczestników Code Golf Hackathon na spotkaniu użytkowników Dyalog '17 :
Wypróbuj online!
⎕
monit o wprowadzenie0,
wstaw zero+\
suma skumulowanal←
przechowywać jakol
⍋
znajdź indeksy, które posortująl
l[
…]
Użyj tego do indeksowanial
¯2-/
odwrócona różnica parźródło
MATL , 6 bajtów
Wypróbuj online!
źródło
Gaia , 7 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
k , 16 bajtów
Wypróbuj online!
źródło
Japt , 10 bajtów
Sprawdź to
źródło
Röda , 42 bajty
Wypróbuj online!
Jest to podobne do odpowiedzi w Perlu 6 .
.sort
jest|sort
,.rotor(2=>-1).flat
jest|slide 2
i.map(*R-*)
jest|[_2-_1]
.Wyjaśnienie:
Instrukcja
[i]if i+=_
jest równoważna z+=
Operator nie naciskać wartości strumienia, więc jest truthy. Mógłbym również użyć pewnego rodzaju bloku (np.{|j|i+=j;[i]}_
), Aby powiązać dodawanie i wypychanie instrukcji, aleif
jest krótszy.źródło
Julia 0.6.0 (34 bajty)
Prawie kopia tego, co zostało zrobione w R i Python 3
x->diff(sort(cumsum(vcat([0],x))))
źródło
J, 10 bajtów
wyjaśnienie
„sortuj według sumy skanowania”: W J koniunkcja
&.
stosuje transformację po prawej stronie do danych wejściowych, następnie stosuje czasownik po lewej stronie (w tym przypadku sortuj/:~
), a następnie wykonuje odwrotną transformację. Oznacza to, że J rozumie, jak odwrócić sumę skanu, która jest dokładnie potrzebna tutaj: kolejne różnice są danymi wejściowymi, które po zsumowaniu skanu wygenerują tę sumę skanu.Wypróbuj online!
źródło