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.