Reto
Se le da una matriz de enteros. Con un movimiento , puede aumentar o disminuir un elemento de la matriz en 1 . Su tarea es igualar la matriz, es decir, hacer que todos los elementos de la matriz sean iguales realizando algunos movimientos . ¡Pero eso no es suficiente! También quieres hacer la menor cantidad de movimientos posible .
Entrada
- A no vacío array de enteros
- Opcionalmente, la longitud de .
Salida
- El número mínimo de movimientos necesarios para igualar la matriz .
Reglas
- Se aplican reglas estándar para envíos válidos , E / S , lagunas .
- Este es el código de golf , por lo que gana la solución más corta (en bytes). Como de costumbre, no permita que soluciones ridículamente cortas en los idiomas de golf lo desalienten a publicar una respuesta más larga en el idioma de su elección.
- Esto no es una regla, pero su respuesta será mejor recibida si incluye un enlace para probar la solución y una explicación de cómo funciona.
Ejemplos
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
fuente
fuente
Median
es un poco difícil para algunos lenguajes esotéricos.JavaScript (Node.js) ,
5048 bytesGuardado 2 bytes gracias a Arnauld
Pruébalo en línea!
Ordene la matriz ascendente y luego sume:
fuente
a=>a.sort((x,y)=>x-y).map(n=>r+=a.pop()-n,r=0)|r
.05AB1E , 4 bytes
Pruébalo en línea!
Explicación
fuente
ZL€αOW
fue mi intento ._.Perl 6 ,
2928 bytes-1 byte gracias a nwellnhof
Pruébalo en línea!
Explicación
fuente
X-
operandos para guardar un byte.Japt, 7 bytes
Intentalo
Explicación
fuente
JavaScript (ES6),
605655 bytesGuardado 1 byte gracias a @Shaggy
Pruébalo en línea!
¿Cómo?
A menos que haya algún truco que me falte, calcular la mediana en JS resulta ser más largo. Probablemente alrededor de 65 bytes debido a la devolución de llamada requerida para
sort()
eludir el tipo lexicográfico predeterminado y el bastante largoMath.abs()
:En lugar de eso, probamos todos los valores de la matriz original como valor de ecualización .
fuente
r
dentro del primeromap
.Haskell , 34 bytes
Pruébalo en línea!
Encuentra la distancia total de todos los elementos a la mediana, probando cada elemento de la lista como la mediana potencial y tomando el resultado más pequeño.
fuente
Jalea , 4 bytes
Pruébalo en línea!
Cómo funciona
fuente
Python 2 , 46 bytes
Pruébalo en línea!
Toma la longitud de la lista
n
como argumento. Calcula la suma de la mitad superior menos la suma de la mitad inferior dividiendo la lista ordenada en el primern/2
y el últimon/2
elemento.La expresión
l[-~n/2:l.sort()]
es equivalente a la computaciónl.sort()
, que modifica la lista en su lugar, a continuación, haciendol[-~n/2:None]
, en donde los ignora el corte en lonchas lista de límite superior deNone
quel.sort()
producido. Puede parecer que la lista se ordenó demasiado tarde para cortarla correctamente, pero Python parece evaluar los argumentos de corte antes de "bloquear" la lista que se va a cortar.Python 2 , 47 bytes
Pruébalo en línea!
El método aburrido de sumar la distancia de cada valor desde la mediana. Toma la longitud
n
como argumento.Python , 51 bytes
Pruébalo en línea!
Ordena la lista en su lugar, luego agrega repetidamente la última entrada (la más alta restante) menos la primera entrada (la más baja restante), y vuelve a aparecer en la lista sin estos elementos hasta que solo queden 0 o 1. Usos
pop
tienen la misma longitud:l.pop()-l.pop(0)+f(l)
.El
l.sort()
está atascado en un lugar donde elNone
retorno no tiene ningún efecto. El segmentol[None:1]
es el mismo quel[:1]
porqueNone
se ignoran los s en sectores.Python , 54 bytes
Pruébalo en línea!
Una linda comprensión de la lista que ignora el argumento iterado y modifica la lista en su lugar al hacer estallar repetidamente el primer y el último elemento. Nos aseguramos de que la comprensión de la lista se realice
len(l)//2
en varias ocasiones iterando sobre cualquier otro elemento del
omitir el primero, hecho conl[1::2]
. Lal.sort()
producciónNone
se puede atascar en el argumento final de corte no utilizado.fuente
APL (Dyalog), 12 bytes
Fuerzas brutas probando cada número como el ecualizador. No estoy seguro si tácito es más corto, pero no puedo entenderlo.
TIO
fuente
TI-Basic,
186 bytes-12 bytes de Misha Lavrov (hace tiempo que no uso TI-Basic y olvidé que las listas pueden hacerlo)
TI-Basic es un lenguaje tokenizado . Todas las fichas utilizadas en esta respuesta son un byte.
Toma entrada como
{1,2,3,4}:prgmNAME
Básicamente, la misma idea que la mayoría de las otras respuestas: restar a través de la mediana, luego tomar la suma.
Explicación:
fuente
sum(abs(Ans-median(Ans
También funciona. (Y "TI-84 Plus CE" parece demasiado específico; esto funcionará al menos en cualquier calculadora de la serie 83, y probablemente también en la 73 y 82.)Röda , 33 bytes
Pruébalo en línea!
Explicación:
fuente
R , 29 bytes
Pruébalo en línea!
fuente
Adjunto , 18 bytes
Pruébalo en línea!
Explicación
fuente
J , 15 bytes
Esencialmente lo mismo que la solución Jag de Shaggy.
Pruébalo en línea!
¿Cómo funciona?
|@-/~"{
- crea una tabla/~
de diferencias absolutas|@-
de cada número con respecto a todos los demás"{
1#.
suma cada fila[:<./
encuentra el artículo más pequeño (reducir al mínimo)fuente
Carbón ,
1611 bytesPruébalo en línea! El enlace es a la versión detallada del código. Editar: Guardado 5 bytes gracias a @Arnauld. Explicación:
fuente
Visual C #, 138 bytes
sin golf:
Pruébalo en línea!
fuente
C (gcc)
10093 bytesSolución de fuerza bruta, trata de igualar con cada elemento. Pruébalo en línea aquí .
Gracias a ceilingcat por jugar al golf 7 bytes.
Sin golf:
fuente
PHP, 78 bytes
Ordena la matriz, luego recorre una copia, sacando elementos del original y sumando la diferencia absoluta, que debe reducirse a la mitad para el retorno.
Salida:
fuente
PHP, 69 bytes
función anónima. Pruébalo en línea .
fuente
Input: *) A non-empty array a of integers *) Optionally, the length of a
.JavaScript (Node.js) , 52 bytes
Pruébalo en línea!
fuente
Java (JDK), 112 bytes
Golfed
Sin golf
fuente
[1,1,4]
(devuelve 4, pero la respuesta es 3).Kotlin Android, 200 bytes
Probar en línea
fuente