Desafio
Você é dado um array de inteiros. Com um movimento, você pode aumentar ou diminuir um elemento da matriz em 1 . Sua tarefa é equalizar a matriz, ou seja, igualar todos os elementos da matriz, executando alguns movimentos . Mas isso não basta! Você também deseja fazer o mínimo de movimentos possível .
Entrada
- Uma matriz não vazia de números inteiros
- Opcionalmente, o comprimento de .
Saída
- O número mínimo de movimentos necessários para equalizar a matriz .
Regras
- Aplicam-se regras padrão para envios válidos , E / S , brechas .
- Isso é código-golfe , e a solução mais curta (em bytes) vence. Como sempre, não permita que soluções ridiculamente curtas nos idiomas de golfe o desencorajem a postar uma resposta mais longa no idioma de sua escolha.
- Esta não é uma regra, mas sua resposta será melhor recebida se incluir um link para testar a solução e uma explicação de como ela funciona.
Exemplos
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
fonte
fonte
Median
é um pouco difícil para algumas línguas esotéricas.JavaScript (Node.js) ,
5048 bytesEconomizou 2 bytes graças a Arnauld
Experimente online!
Classifique a matriz ascendente e depois some:
fonte
a=>a.sort((x,y)=>x-y).map(n=>r+=a.pop()-n,r=0)|r
.05AB1E , 4 bytes
Experimente online!
Explicação
fonte
ZL€αOW
foi a minha tentativa.Perl 6 ,
2928 bytes-1 byte graças a nwellnhof
Experimente online!
Explicação
fonte
X-
operandos para salvar um byte.Japonês, 7 bytes
Tente
Explicação
fonte
JavaScript (ES6),
605655 bytesGuardado 1 byte graças a @Shaggy
Experimente online!
Quão?
A menos que exista algum truque que esteja faltando, o cálculo da mediana em JS acaba sendo mais longo. Provavelmente em torno de 65 bytes devido ao retorno de chamada necessário para
sort()
contornar a classificação lexicográfica padrão e a longa duraçãoMath.abs()
:Em vez disso, tentamos todos os valores na matriz original como o valor de equalização .
fonte
r
dentro do primeiromap
.Haskell , 34 bytes
Experimente online!
Encontra a distância total de todos os elementos para a mediana, testando cada elemento da lista como a mediana potencial e obtendo o menor resultado.
fonte
Gelatina , 4 bytes
Experimente online!
Como funciona
fonte
Python 2 , 46 bytes
Experimente online!
Leva o comprimento da lista
n
como argumento. Calcula a soma da metade superior menos a soma da metade inferior dividindo a lista classificada no primeiron/2
e no últimon/2
elementos.A expressão
l[-~n/2:l.sort()]
é equivalente a computaçãol.sort()
, que modifica a lista no lugar, em seguida, fazendol[-~n/2:None]
, onde as listas de rejeição de corte limite superiorNone
quel.sort()
produzida. Pode parecer que a lista foi classificada tarde demais para ser cortada corretamente, mas o Python parece avaliar os argumentos da fatia antes de "travar" a lista a ser cortada.Python 2 , 47 bytes
Experimente online!
O método chato de somar a distância de cada valor da mediana. Leva o comprimento
n
como argumento.Python , 51 bytes
Experimente online!
Classifica a lista no local, adiciona repetidamente a última entrada (restante mais alto) menos a primeira (restante restante) e volta a aparecer na lista sem esses elementos até restarem apenas 0 ou 1. Usings
pop
s' recebe o mesmo comprimento:l.pop()-l.pop(0)+f(l)
.O
l.sort()
está preso em um local onde oNone
retorno não tem efeito. A fatial[None:1]
é a mesma quel[:1]
porqueNone
s nas fatias são ignorados.Python , 54 bytes
Experimente online!
Uma compreensão atraente da lista que ignora o argumento repetido e modifica a lista no local, repetidamente exibindo o primeiro e o último elementos. Garantimos que a compreensão da lista seja feita
len(l)//2
várias vezes, repetindo todos os outros elementos del
ignorar o primeiro, terminadol[1::2]
. Al.sort()
produçãoNone
pode ficar presa no argumento de final de fatia não utilizado.fonte
APL (Dyalog), 12 bytes
Forças brutas testando cada número como o equalizador. Não tenho certeza se tácito é mais curto, mas não consigo descobrir.
TIO
fonte
TI-Basic,
186 bytes-12 bytes de Misha Lavrov (não utilizo o TI-Basic há algum tempo e esqueci que as listas podem fazer isso)
O TI-Basic é uma linguagem tokenizada . Todos os tokens usados nesta resposta são de um byte.
Aceita entrada como
{1,2,3,4}:prgmNAME
Basicamente, a mesma idéia que a maioria das outras respostas: subtraia pela mediana e depois faça a soma.
Explicação:
fonte
sum(abs(Ans-median(Ans
também funciona. (E "TI-84 Plus CE" parece muito específica, o que irá trabalhar pelo menos em qualquer calculadora 83-série, e provavelmente também o 73 e 82.)Röda , 33 bytes
Experimente online!
Explicação:
fonte
R , 29 bytes
Experimente online!
fonte
Anexo , 18 bytes
Experimente online!
Explicação
fonte
J , 15 bytes
Essencialmente o mesmo que a solução Japt de Shaggy.
Experimente online!
Como funciona?
|@-/~"{
- cria uma tabela/~
de diferenças absolutas|@-
de cada número para todos os outros"{
1#.
soma cada linha[:<./
encontra o item menor (reduza no mínimo)fonte
Carvão ,
1611 bytesExperimente online! Link é a versão detalhada do código. Editar: salvou 5 bytes graças a @Arnauld. Explicação:
fonte
Visual C #, 138 bytes
ungolfed:
Experimente online!
fonte
C (gcc),
10093 bytesSolução de força bruta, tenta igualar com cada elemento. Experimente online aqui .
Agradecimentos ao ceilingcat por jogar 7 bytes.
Ungolfed:
fonte
PHP, 78 bytes
Classifica a matriz e, em seguida, percorre uma cópia, retirando elementos do original e somando a diferença absoluta, que precisa ser reduzida pela metade para o retorno.
Saída:
fonte
PHP, 69 bytes
função anônima. Experimente online .
fonte
Input: *) A non-empty array a of integers *) Optionally, the length of a
.JavaScript (Node.js) , 52 bytes
Experimente online!
fonte
Java (JDK), 112 bytes
Golfe
Ungolfed
fonte
[1,1,4]
(retorna 4, mas a resposta é 3).Kotlin Android, 200 bytes
Experimente on-line
fonte