Список различий в списке целых чисел - это список различий последовательных членов.
Например, список различий
1, 3, 2 ,4
является
2, -1, 2
Ваша задача - взять в качестве входных данных список различий и вывести, как будет выглядеть список различий, если бы исходный список был отсортирован.
Например список различий
2, 1, -2, -1
Может представлять список
2 4 5 3 2
Который при сортировке
2 2 3 4 5
Который имеет список различий
0 1 1 1
Это код-гольф, поэтому ответы будут оцениваться в байтах, причем меньше байтов будет лучше.
code-golf
array-manipulation
Мастер пшеницы
источник
источник
[-2, 100, -2, -1]
, например.Ответы:
05AB1E , 4 байта
Попробуйте онлайн!
объяснение
источник
Undelta
05AB1E имеет большинство встроенных ниш. o0Undelta
ಠ ___ ಠPython 3 с Numpy ,
565453 байта2 байта отключены благодаря @Artyer (Numpy's
sort
вместо стандартногоsorted
). 1 байт благодаря @notjagan (переходит0
вcumsum
)Код определяет анонимную функцию, которая вводит список или массив Numpy и выводит массив Numpy.
Попробуйте онлайн!
источник
numpy
был намного дольше. Я вернусь завтра, чтобы выразить это, потому что вижу, что ты уже в шапке. Очень хорошо!diff(sort([0 cumsum(x)]))
(в Matlab[ ]
- конкатенация)0
вcumsum
.Mathematica, 40 байт
источник
Differences@Sort@FoldList[+##&,1,#]&
Желе , 6 байт
Попробуйте онлайн!
источник
Шелуха , 4 байта
Попробуйте онлайн!
Explaination
источник
scanl(+)0
в Haskell.Pyth , 9 байт
-1 байт благодаря @EriktheOutgolfer .
Тестирование.
Pyth , 10 байт
Попробуйте онлайн! или попробуйте больше тестовых случаев .
источник
+0sM._
вместо.u+YNQ0
-1.m=+Z
вариант такой же длиныsM._
, но, к сожалению, не похоже, что он может быть короче.JavaScript (ES6),
5756 байтСохранено 1 байт благодаря @ETHproductions
демонстрация
Показать фрагмент кода
источник
.sort((a,b)=>a-b)
Это способ получить дельты? Сортировка с вычитанием? : Pmap()
дает дельты. Этот код сортирует их. 2-я карта перестраивает новые дельты. Метод JSsort()
по умолчанию использует лексикографический порядок. Итак, нам нужен этот специализированный обратный вызов для номеров> 9 (к сожалению).-p+(p=n)
раздражает меня, но, к сожалению, лучшего способа нет ... если только ...Java 8, 123 байта
Стандартное решение: ввод суммарной суммы, сортировка, затем дифференциал. Никаких существенных уловок реализации также.
В ролях
Consumer<int[]>
. Выход является мутированным входом.Попробуйте онлайн
Неуправляемая лямбда
Подтверждения
источник
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];}
(остерегайтесь невидимых символов SE при копировании / вставке)for(;i>0;)l[i-1]=d[i]-d[--i];
(последний цикл)for(;i-->0;)l[i]=d[i+1]-d[i];
такой же длины. Обновление впереди.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]);}
.Брахилог , 15 байт
Попробуйте онлайн!
источник
R ,
3132 байта-4 байта спасибо @ user2390246 за
diffinv
+5 байтов от Ярко за
cat
Читает из стандартного ввода, пишет в стандартный вывод.
diffinv
является обратнойdiff
величиной для данного начального значения (по умолчанию 0). Так как онdiff
снова издан, не имеет значения, что это за значение.Как указал Ярко Дуббелдам, мне нужно было правильно вывести результат, стоимостью пять байтов. Увы.
Попробуйте онлайн!
источник
source
), она ничего не выводит.diffinv
а неcumsum
вам не нужно добавлять ноль.Python 2 , 83 байта
Попробуйте онлайн!
Ужасное решение.
источник
+=
Оператор Python для списков работает с любой итерацией, поэтому вы можете использоватьr+=r[-1]+i,
вместоr+=[r[-1]+i]
одного байта и сохранять его.Perl 6 , 46 байт
Попытайся
Expanded:
источник
Haskell , 74 байта
Попробуйте онлайн!
Непосредственная.
источник
=<<
от функции монады пригождается:(zipWith(-)=<<tail).sort.scanl(+)0
zipWith
.TI-Basic (TI-84 Plus CE), 23 байта
Запрашивает ввод пользователя. Список должен быть введен с начальным
{
, с номерами, разделенными,
, и с дополнительным трейлингом}
.TI-Basic - это токенизированный язык ;
ΔList(
иcumSum(
являются двухбайтовыми токенами, все остальные используемые токены по одному байту каждый.Пример выполнения (с
NAME
указанием имени программы и{4,-2,7,-4,0}
ввода):Объяснение:
источник
L
?C ++ (gcc) , 136 байт
Как неназванная общая лямбда, предполагая, что ввод будет похожим,
std::list
и возвращая через опорный параметр.Попробуйте онлайн!
Ungolfed:
источник
Pyth, 8 байт
демонстрация
источник
TI-Basic, 20 байтов
источник
Perl 5 , 87 + 1 (-a) = 88 байт
Попробуйте онлайн!
источник
VB.NET (.NET 4.5), 109 байт
Функция, которая ожидает список в качестве входных данных и изменяет его напрямую. Исходный параметр затем может быть использован для вывода
Попробуйте онлайн!
источник
APL (Дьялог) ,
1514 байтов-1 байт благодаря ngn .
+\
накопленная сумма0,
ставить ноль(
…)
Примените к этому следующую молчаливую функцию:⊂
заключить (чтобы мы могли выбрать несколько предметов)⍋⊃¨
пусть каждый из индексов, которые будут сортировать аргумент, выберет из этого¯2-/
обратная попарная разницаПопробуйте онлайн!
Оригинальное решение, найденное участниками Code Golf Hackathon на встрече пользователей Dyalog '17 :
Попробуйте онлайн!
⎕
запрос на ввод0,
ставить ноль+\
накопленная суммаl←
хранить какl
⍋
найти индексы, которые будут сортироватьl
l[
...]
использовать это для индексации вl
¯2-/
обратная попарная разницаисточник
MATL , 6 байтов
Попробуйте онлайн!
источник
Gaia , 7 байт
Попробуйте онлайн!
объяснение
источник
к , 16 байт
Попробуйте онлайн!
источник
Japt , 10 байт
Попробуй это
источник
Рёда , 42 байта
Попробуйте онлайн!
Это похоже на ответ Perl 6 .
.sort
есть|sort
,.rotor(2=>-1).flat
есть|slide 2
и.map(*R-*)
есть|[_2-_1]
.Объяснение:
Утверждение
[i]if i+=_
эквивалентно+=
Оператор не нажмет значение потока, поэтому truthy. Я также мог бы использовать какой-то блок (например{|j|i+=j;[i]}_
), чтобы связать операторы сложения и сжатия, ноif
он короче.источник
Юлия 0.6.0 (34 байта)
Практически копия того, что было сделано в R и Python 3
x->diff(sort(cumsum(vcat([0],x))))
источник
J, 10 байт
объяснение
«сортировать по сумме сканирования»: в J соединение Under
&.
применяет преобразование справа от входа, затем применяет глагол слева (в данном случае сортировка/:~
), а затем выполняет обратное преобразование. То есть J понимает, как инвертировать сумму сканирования, что именно здесь и необходимо: последовательные различия - это входные данные, которые при суммировании сканирования будут производить эту сумму сканирования.Попробуйте онлайн!
источник