La inspiración para este rompecabezas código de golf es el problema del puente y de la antorcha , en la que d personas en el inicio de un puente deben todos cruzarlo en la menor cantidad de tiempo.
El problema es que, como máximo, dos personas pueden cruzar a la vez, de lo contrario el puente se aplastará bajo su peso, y el grupo solo tiene acceso a una antorcha, que debe transportarse para cruzar el puente.
Cada persona en todo el rompecabezas tiene un tiempo específico que toman para cruzar el puente. Si dos personas se cruzan juntas, la pareja va tan lenta como la persona más lenta.
No hay un número establecido de personas que deben cruzar el puente; su solución DEBE funcionar por cualquier valor de d .
No necesita utilizar la entrada estándar para este problema, pero para explicar el problema, utilizaré el siguiente formato de entrada y salida para la explicación. El primer número, d , es el número de personas al comienzo del puente. Luego, el código buscará d números, cada uno de los cuales representa la velocidad de una persona.
La salida del código será la MENOR cantidad de tiempo requerida para cruzar a todos desde el inicio del puente hasta el final del puente, mientras cumple con los criterios explicados anteriormente.
Aquí hay algunos casos de entrada y salida y la explicación para el primer caso de entrada. Depende de usted derivar un algoritmo de esta información para resolver el problema en la menor cantidad de bytes posible de código.
entrada
4
1 2 5 8
salida
15
Para alcanzar este resultado, las personas deben cruzar de la siguiente manera.
A and B cross forward (2 minutes)
A returns (1 minute)
C and D cross forward (8 minutes)
B returns (2 minutes)
A and B cross forward (2 minutes)
Aquí hay otro caso de prueba para guiarlo en su camino.
entrada
5
3 1 6 8 12
salida
29
Reglas:
- Suponga que la entrada no se ordenará y debe hacerlo por su cuenta (si es necesario)
- El número de personas en el rompecabezas no está fijado en 4 (N> = 1)
- Cada grupo y cruce individual debe tener una antorcha. Solo hay una antorcha.
- ¡Cada grupo debe constar de un máximo de solo 2 personas!
- No, no puedes saltar del puente y nadar hacia el otro lado. No hay otros trucos como este;).
1 3 4 5
, que deberían devolver 14 no 15.1 4 5 6 7
tiene un problema similar 25 contra 26N >= 2
personas (lo que significa, curiosamente que es un trabajo adicional manejar el caso trivial de "1 persona necesita cruzar"), por lo que alguna aclaración sobre este punto sería genial. Gracias por adelantado.Respuestas:
Python 3,
10099 bytesuna solución recursiva
Gracias a @xnor por este artículo
Gracias a @lirtosiast save 2 bytes, @movatica save 1 bytes y @gladed señalando que mi solución anterior no funciona
use el siguiente truco para evaluar algo en la función lambda
s.sort() or s
aquí calculamos ordenar y devolver el resultado de la pruebas.sort()or len(s)>3
Sin golf
Resultados
fuente
len(s)==2
alen(s)<3
s[0]*(len(s)==2)
no es(s[0]*len(s)==2)
con el error,f([1]) -> 0
por eso no podemos reemplazarlo<3
graciasA5:22
Python 2,
11911411211911010095 bytesMe han aconsejado que separe mis respuestas.
Una solución utilizando
Theorem 1, A2:09
este documento xnor vinculado . Para citar el artículo (cambiándolo a indexación cero):The difference between C_{k-1} and C_k is 2*t_1 - t_0 - t_{N-2k}.
No golfista:
fuente
Ruby,
9413397961019699 bytesMe han aconsejado que separe mis respuestas.
Esta es una solución basada en el algoritmo descrito en
A6:06-10
de este papel en el puente y la antorcha problema .Editar: Corregir un error donde
a=s[0]
aún no está definido cuandoa
se llama al final sis.size <= 3
.No golfista:
fuente
Scala,
113135 (maldita sea)Ungolfed algo:
Ensayador:
No es genial en general, pero quizás no sea malo para un lenguaje fuertemente tipado. Y de mala gana gracias a xnor por detectar un caso que no entendí.
fuente
Ruby,
1049593 bytesMe han aconsejado que separe mis respuestas.
Esta es una solución basada en mi solución Python 2 y
Theorem 1, A2:09
en este documento sobre el problema del puente y la antorcha .No golfista:
fuente