Вызов
У вас есть массив целых чисел. С ходом вы можете увеличить или уменьшить элемент массива на 1 . Ваша задача - выровнять массив, то есть сделать все элементы массива равными, выполнив несколько шагов . Но этого недостаточно! Вы также хотите , чтобы сделать , как несколько ходов , как это возможно .
вход
- Непустая массив целых чисел
- Необязательно, длина от .
Выход
- Минимальное количество ходов нужно уравнять в массиве .
правила
- Применяются стандартные правила для действительных представлений , ввода / вывода , лазеек .
- Это код-гольф , поэтому выигрывает самое короткое решение (в байтах). Как обычно, не позволяйте смехотворно коротким решениям на языках игры в гольф отговаривать вас публиковать более длинные ответы на выбранном вами языке.
- Это не правило, но ваш ответ будет лучше принят, если он будет содержать ссылку для проверки решения и объяснение того, как оно работает.
Примеры
Input --> Output
[10] --> 0
[-1, 0, 1] --> 2
[4, 7] --> 3
[6, 2, 3, 8] --> 9
[5, 8, 12, 3, 2, 8, 4, 5] --> 19
[1,10,100] --> 99
code-golf
array-manipulation
Delfad0r
источник
источник
Median
это слишком сложно для некоторых эзотерических языков.JavaScript (Node.js) ,
5048 байтовСохранено 2 байта благодаря Арно
Попробуйте онлайн!
Отсортируйте массив по возрастанию и затем сложите:
источник
a=>a.sort((x,y)=>x-y).map(n=>r+=a.pop()-n,r=0)|r
.05AB1E , 4 байта
Попробуйте онлайн!
объяснение
источник
ZL€αOW
была моя попытка.Perl 6 ,
2928 байт-1 байт благодаря nwellnhof
Попробуйте онлайн!
объяснение
источник
X-
операнды, чтобы сохранить байт.Japt, 7 байт
Попытайся
объяснение
источник
JavaScript (ES6),
605655 байтСохранено 1 байт благодаря @Shaggy
Попробуйте онлайн!
Как?
Если нет какой-то хитрости, которую я пропускаю, вычисление медианы в JS оказывается дольше. Вероятно, около 65 байтов из-за необходимого обратного вызова для
sort()
обхода лексикографической сортировки по умолчанию и довольно длинногоMath.abs()
:Вместо этого мы используем все значения в исходном массиве в качестве выравнивающего значения.
источник
r
в первомmap
.Haskell , 34 байта
Попробуйте онлайн!
Находит общее расстояние всех элементов до медианы, проверяя каждый элемент в списке как потенциальную медиану и получая наименьший результат.
источник
Желе , 4 байта
Попробуйте онлайн!
Как это работает
источник
Python 2 , 46 байт
Попробуйте онлайн!
Принимает длину списка
n
в качестве аргумента. Вычисляет сумму верхней половины минус сумму нижней половины, разбивая отсортированный список на первыйn/2
и последнийn/2
элементы.Выражение
l[-~n/2:l.sort()]
эквивалентно вычислениюl.sort()
, который модифицирует список на месте, а затем делатьl[-~n/2:None]
, где список нарезки игнорирует верхней границы ,None
которыеl.sort()
производятся. Может показаться, что список был отсортирован слишком поздно для правильной нарезки, но Python, похоже, оценивает аргументы среза перед тем, как «заблокировать» список для нарезки.Python 2 , 47 байт
Попробуйте онлайн!
Скучный метод суммирования расстояния каждого значения от медианы. Принимает длину
n
в качестве аргумента.Python , 51 байт
Попробуйте онлайн!
Сортирует список по месту, затем многократно добавляет последнюю (наивысшую оставшуюся) запись минус первую (наименьшую оставшуюся) запись и рекурсирует в списке без этих элементов, пока не останутся только 0 или 1. Usings
pop
«s получает одинаковую длину:l.pop()-l.pop(0)+f(l)
.l.sort()
Застрял в месте , гдеNone
он возвращается не имеет никакого эффекта. Срезl[None:1]
такой же, как иl[:1]
потому, чтоNone
s в срезах игнорируются.Python , 54 байта
Попробуйте онлайн!
Симпатичное понимание списка, которое игнорирует аргумент, перебранный и изменяет список на месте, многократно выталкивая первый и последний элементы. Мы гарантируем, что понимание списка выполняется
len(l)//2
раз, перебирая все остальные элементыl
пропуска первого, сделанного с помощьюl[1::2]
.l.sort()
ПродюсированиеNone
может быть застряло в неиспользуемом конце ломтика аргументе.источник
APL (Дьялог), 12 байт
Грубые силы, проверяя каждое число в качестве эквалайзера. Не уверен, если молчание короче, но я не могу понять это.
TIO
источник
TI-Basic,
186 байтов-12 байт от Миши Лаврова (я давно не пользовался TI-Basic и забыл, что списки могут это сделать)
TI-Basic - это токенизированный язык . Все токены, используемые в этом ответе, являются одним байтом.
Принимает вход как
{1,2,3,4}:prgmNAME
По сути, та же идея, что и у большинства других ответов: вычесть по медиане, затем взять сумму.
Объяснение:
источник
sum(abs(Ans-median(Ans
тоже работает. (И «TI-84 Plus CE» кажется слишком конкретным; это сработает, по крайней мере, на любом калькуляторе серии 83, а также, возможно, на 73 и 82).Рёда , 33 байта
Попробуйте онлайн!
Объяснение:
источник
R , 29 байт
Попробуйте онлайн!
источник
Атташе , 18 байт
Попробуйте онлайн!
объяснение
источник
J 15 байт
По сути то же самое, что и решение Шэгги Джапта.
Попробуйте онлайн!
Как это работает?
|@-/~"{
- создает таблицу/~
абсолютных отличий|@-
каждого числа от всех остальных"{
1#.
суммирует каждый ряд[:<./
находит самый маленький предмет (уменьшите на минимум)источник
Древесный уголь ,
1611 байтПопробуйте онлайн! Ссылка на подробную версию кода. Редактировать: 5 байтов сохранено благодаря @Arnauld. Объяснение:
источник
Visual C #, 138 байт
ungolfed:
Попробуйте онлайн!
источник
C (gcc),
10093 байтаРешение грубой силы, пытается выровнять с каждым элементом. Попробуйте это онлайн здесь .
Благодаря Celercat для игры в гольф 7 байтов.
Ungolfed:
источник
PHP, 78 байт
Сортирует массив, затем перебирает копию, вытаскивая элементы из оригинала и суммируя абсолютную разницу, которую нужно уменьшить вдвое для возврата.
Выход:
источник
PHP, 69 байт
анонимная функция. Попробуйте онлайн .
источник
Input: *) A non-empty array a of integers *) Optionally, the length of a
.JavaScript (Node.js) , 52 байта
Попробуйте онлайн!
источник
Java (JDK), 112 байт
Golfed
Ungolfed
источник
[1,1,4]
подходит для ввода (возвращает 4, но ответ 3).Котлин Андроид, 200 байт
Попробуйте онлайн
источник