Cuando hago levantamiento de pesas, quiero hacer un peso específico uniendo varias placas a una barra.
Tengo los siguientes platos:
- 6 platos de 1 kg cada uno
- 6 platos de 2.5 kg cada uno
- 6 platos de 5 kg cada uno
- 6 platos de 10 kg cada uno
La barra en sí pesa 10 kg.
Solo se permite unir las placas en pares: están unidas en cada extremo de la barra, y la disposición en los dos extremos debe ser completamente simétrica (por ejemplo, unir dos placas de 5 kg en un extremo y una placa de 10 kg en el otro extremo está prohibido por razones de seguridad).
Haga un programa o una función que me diga cuántas placas de cada tipo tengo que usar para obtener un peso total dado. La entrada es un entero mayor que 11; la salida es una lista / matriz / cadena de 4 números. Si es imposible combinar placas existentes para obtener el peso objetivo, generar una matriz cero / vacía, una cadena no válida, lanzar una excepción o algo así.
Si hay varias soluciones, el código debe generar solo una (no haga que el usuario elija, está demasiado ocupado con otras cosas).
Casos de prueba:
12 -> [2 0 0 0] - 2 plates of 1 kg plus the bar of 10 kg
13 -> [0 0 0 0] - a special-case output that means "impossible"
20 -> [0 0 2 0] - 2 plates of 5 kg + bar
20 -> [0 4 0 0] - a different acceptable solution for the above
21 -> [6 2 0 0] - 6 plates of 1 kg + 2 plates of 2.5 kg + bar
28 -> [0 0 0 0] - impossible
45 -> [0 2 6 0] - a solution for a random number in range
112 -> [2 4 6 6] - a solution for a random number in range
121 -> [6 6 6 6] - maximal weight for which a solution is possible
Si su código genera los números en el orden opuesto (desde la placa pesada hasta la liviana), especifique esto explícitamente para evitar confusiones.
fuente
Respuestas:
Jalea , 22 bytes
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
MATL ,
2928 bytesPara las entradas que no tienen solución, esto produce una salida vacía (sin error).
Pruébalo en línea!
Explicación
fuente
Mathematica, 70 bytes
Función anónima. Toma un número como entrada y genera una lista o errores y devuelve
{}[[1]]
si no hay solución.fuente
Jalea, 25 bytes
Pruébalo aquí.
fuente
2,5,10,20
->2,5,⁵,20
,
una diada? Toda mi vida es una mentira,
es una diada, pero también se puede usar para literales.2,5,⁵,20
sin embargo, no es literal (2,5
y20
son, pero,
,⁵
y,
son átomos), por lo que necesitaría algo para combinar los enlaces.Python 3, 112 bytes
Una función anónima que toma la entrada, a través del argumento, de la masa objetivo y devuelve el número de cada placa como una lista. Si no existe una solución, se produce un error. Esto es pura fuerza bruta.
Cómo funciona
Pruébalo en Ideone
fuente
Brachylog , 50 bytes
Devuelve
false
cuando no es posible.fuente
Pyth,
343125 bytesBanco de pruebas.
Errores de imposibilidad.
Esto es esencialmente una fuerza bruta.
Esto es bastante rápido, ya que solo hay 256 arreglos posibles.
fuente
Scala, 202 bytes
Decidí que Scala no recibe mucho amor aquí, así que presento una solución (probablemente no óptima) en Scala.
El programa sale en orden inverso y con basura adicional en comparación con las soluciones posteriores. Cuando no se encuentra una solución, imprime 0.
Nota: Podría no eliminar ninguno de los saltos de línea o espacios porque Scala es tonto, así que creo que para reducir el tamaño, el método tiene que ser hecho de nuevo a menos que me haya perdido algo obvio.
fuente
APL, 40 bytes
En ⎕IO ← 0. En inglés:
10+2×,∘.+⌿1 2.5 5 10∘.×⍳4
: construya la matriz de todos los pesos posibles, calculando la suma externa 4D de los pesos por tipo de peso;⍵⍳⍨
: busca el índice de lo dado. Si no se encuentra, el índice es 1 + el recuento de la matriz en el paso 1;(4⍴4)⊤
: representa el índice en la base 4, es decir, calcula la coordenada del peso dado en el espacio 4D;2×
: lleva el resultado al espacio del problema, donde las coordenadas deben interpretarse como la mitad del número de placas.Ejemplo: {2 × (4⍴4) ⊤⍵⍳⍨10 + 2 ×, ⊃∘. + / ↓ 1 2.5 5 10∘. × ⍳4} 112 2 4 6 6
Bonificación : dado que APL es un lenguaje de matriz, se pueden probar varios pesos a la vez. En este caso, el resultado se transpone:
fuente
JavaScript (ES6), 109 bytes
Devoluciones
00-2
por error. Solución alternativa que devuelveundefined
el error, también 109 bytes:fuente