Para verificar si una lista de enteros no negativos está equilibrada , uno puede imaginar poner los respectivos pesos en un tablero y luego tratar de equilibrar el tablero en un pivote de modo que los pesos relativos resumidos a la izquierda y a la derecha del pivote sean los mismos. El peso relativo se da multiplicando el peso con su distancia al pivote (vea la ley de la palanca ).
(Fuente: wikipedia )
Esta imagen corresponde a una lista [100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]
. Esta lista está equilibrada porque 5
tiene una distancia de 20 al pivote, 100
una distancia de 1 y 5*20 = 100 = 100*1
.
Ejemplos
3 1 5 7
#########
^
En este caso, el pivote está directamente debajo de 5
, 3
tiene la distancia 2 y el 1
y 7
tiene la distancia 1. Por lo tanto, ambos lados izquierdo y derecho del pivote se suman 7
( 3*2 + 1*1
a la izquierda y 7*1
a la derecha) y, por lo tanto, la lista [3, 1, 5, 7]
está equilibrada.
Sin embargo, tenga en cuenta que el pivote no tiene que colocarse debajo de uno de los elementos de la lista, sino que también puede ubicarse entre dos elementos de la lista:
6 3 1
#######
^
En este caso las distancias se vuelven 0.5, 1.5, 2.5, ...
y así sucesivamente. Esta lista también está equilibrada porque 6*0.5 = 3 = 3*0.5 + 1*1.5
.
El pivote solo se puede colocar exactamente debajo de un número o exactamente en el medio entre dos números, y no, por ejemplo, en dos tercios entre dos números.
Tarea
Dada una lista de enteros no negativos en cualquier formato razonable, generar un truthy
valor si la lista se puede equilibrar y un falsy
valor de lo contrario.
Puede suponer que la lista de entrada contiene al menos dos elementos y que al menos un elemento no es cero.
Este es un desafío de código de golf , por lo que gana la respuesta con la menor cantidad de bytes en cada idioma.
Casos de prueba de la verdad
[1, 0]
[3, 1, 5, 7]
[6, 3, 1]
[100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]
[10, 4, 3, 0, 2, 0, 5]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[7, 7, 7, 7]
Falsy Testcases
[1, 2]
[3, 6, 5, 1, 12]
[0, 0, 2, 0, 1, 0]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[6, 3, 2, 4, 0, 1, 2, 3]
[4, 0, 0, 2, 3, 5, 2, 0, 1, 2, 3, 0, 0, 1, 2, 4, 3, 1, 3, 0, 0, 2]
[100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]
Se encontraron muchos desafíos relacionados mientras este desafío estaba encerrado : ¿Es un número equilibrado? , Índice de equilibrio de una secuencia , Equilibrar un conjunto de pesas en un balancín , Equilibrar palabras , ¿Me volcaré? y ¿A dónde pertenece el pivote?
You can assume that the input list contains at least two elements and that at least one element is non-zero.
Respuestas:
Pyth,
1210 bytesPruébalo en línea
Ahorré 2 bytes gracias a Mr. Xcoder y Erik the Outgolfer.
Explicación
fuente
y
en lugar de*2
!%ys*VQUQs
Wolfram Language (Mathematica) , 36 bytes
Este es un problema de centro de masa en un sistema de coordenadas con el origen en uno de los puntos y luego determina si el CM cae en un punto de red donde el ancho de red = 1/2.
Pruébalo en línea!
fuente
05AB1E , 6 bytes
Pruébalo en línea!
¿Cómo?
fuente
[1,1]
(debería ser sincero). Parece que la duplicación implícita no está realmente allí.Jalea , 6 bytes
Pruébalo en línea!
Bueno, parece que Leaky Nun señaló lo inútil.
Usando el enfoque Pyth de Mnemonic.
Devuelve un entero positivo (verdad) o cero (falso).
fuente
LḶ
lugar (aunque sería exitoso para todos los casos de prueba). EDITAR: Oooh, ahora que lo pienso de nuevo, parece que sí ... ( b | a ⇔ b | a + b duh)R , 34 bytes
Pruébalo en línea!
Toma la entrada como un vector. La respuesta mnemónica de Ports . Devuelve una
1x1
matriz.fuente
Japt , 10 bytes
Pruébalo en línea!
Explicación:
Vuelve
1
por la verdad,0
por la falsedad.fuente
Python 2 , 41 bytes
La salida es a través del código de salida, por lo que 0 es verdadero y 1 es falso.
Pruébalo en línea!
fuente
Julia ,
3127 bytes4 bytes guardados gracias a @Dennis
Pruébalo en línea!
fuente
Ruby , 47 bytes
Guardado 2 bytes gracias al Sr. Xcoder
Pruébalo en línea!
fuente
C,
140137 bytesPruébalo en línea!
fuente
Python 3 , 51 bytes
Pruébalo en línea!
fuente
Perl 6 , 23 bytes
Pruébalo
Utiliza el algoritmo de varias otras entradas.
Expandido:
fuente
Japt,
11108 bytesOriginalmente inspirado en la solución de Mnemonic
Intentalo
13 bytes guardados gracias a ETHproductions.Explicación
Entrada implícita de la matriz
U
. Reduzca mediante la suma (x
), multiplicando cada elemento por su índice basado en 0 (*
) en el proceso. Verifique si el resultado es divisible (v
) por la suma de la entrada original (Ux
) con cada elemento multiplicado por 0.5 (*½
).fuente
m* x*2 vUx
. Esto me hace preguntarme sim* x*2
se puede reducir aún más ...x*
y verifique si es divisible porUx*½
:)XY{X*Y}
)C # , 71 bytes
Golfed
Sin golf
Código completo
Lanzamientos
71 bytes
- Solución inicial.Notas
Podría tener, o podría no haberlo hecho, "tomar prestada" descaradamente la solución de Dennis Python 2 ...
fuente
Haskell , 39 bytes
Pruébalo en línea!
fuente
APL (Dyalog) , 15 bytes
Pruébalo en línea!
Me parece muy poco golfista ...
fuente
Pitón 2 ,
7875 bytesgracias al Sr. Xcoder por -3 bytes
Pruébalo en línea!
fuente
0 in
. Además, no hay necesidad de que el0
enrange(0,len(l)*2)
..Julia 0.6 , 25 bytes
Pruébalo en línea!
fuente
PHP ,
139128 bytesPruébalo en línea!
die
gracias a manassehkatzfuente
die(1)
ydie(0)
y guardar 4 bytes utilizando el código de salida en lugar de una cadena impresa.Swift , 76 bytes
Pruébalo en línea!
fuente
Perl 5 , 55 + 1 (
a
) = 56 bytesPruébalo en línea!
fuente