Ayuda a Beth a escapar del desierto

11

Si bien es similar al otro rompecabezas que transporta agua , los aspectos únicos de este desafío lo hacen completamente diferente.

Beth

Beth está ubicada en un oasis en medio de un desierto. Hay mucha agua en el lago, pero desafortunadamente solo hay cubos X, cada uno de los cuales tiene una capacidad de Y litros de agua.

Beth puede llevar 2 cubos en sus manos, pero para sobrevivir, debe beber exactamente 1 litro después de cada kilómetro que recorre. También puede dejar algunos cubos a mitad de camino (el agua no se evapora).

El reto

Calcule la fórmula y escriba la solución más corta que funcione para valores enteros positivos de X e Y y calcule la distancia máxima que Beth puede viajar desde el oasis. Se permite mover agua entre los cubos.

Ejemplo

X = 3, Y = 5

  1. Beth deja 1 cubo lleno a 3 km del oasis, regresa (tomando el último trago del oasis)
  2. Beth trae otro balde lleno en el punto de 3 km, con 12 litros allí ahora.
  3. Beth puede avanzar hasta el punto de 6 km y dejar el balde con 4 litros de agua.
  4. Vuelve al punto de 3 km. Ahora tiene exactamente 2 litros para volver al oasis.
  5. Llenar cubos y viajar a punto de 6 km. Ella ahora tiene 8L de agua.
  6. Continuar todo el camino hasta el punto 15KM.

La respuesta es: 15

De entrada y salida

Puede definir X / Y directamente en el código o leer desde la entrada. El resultado podría colocarse en variable o salida, el que sea más corto.

romaninsh
fuente
2
¿Se supone que esto es código golf? Está etiquetado como un desafío de código.
Dennis
Sí, es código golf, agregué la etiqueta. Encuentre una fórmula correcta y expréselo a través del código.
romaninsh
1
Creo que vale la pena ampliar el paso 1. Al principio no me quedó claro cómo Beth podía viajar 6 km con solo 5 litros de agua: bebe solo después de cada km que viaja, y en el último está en el oasis.
xnor
1
¿Podría dar un caso de prueba, de la forma en que un programa lo generaría?
Pavel
Editó la pregunta para abordar ambos puntos.
romaninsh

Respuestas:

2

JavaScript (ES6), 25 bytes

x=>y=>((x<3?x:3)+x)*y/2+1
x=>y=>(x<3?x+x:x+3)*y/2+1
x=>y=>(x<3?x:(x+3)/2)*y+1
x=>y=>(x<3?x:x/2+1.5)*y+1

Todos estos calculan el mismo valor; Parece que no se me ocurre una formulación más corta.

Cuando xes menor que 3, tomas tanta agua como puedes y caminas tan lejos como puedes, lo cual es simple x*y+1.

Cuando xes al menos 3, debes comenzar a construir cachés.

Desde el oasis, puede dejar un cubo lleno a distancia y/2y regresar al oasis. Necesitas 2 cubos para hacer esto, pero esto no es útil si solo tienes 2 cubos porque quieres poder llenar 2 cubos cuando regreses al oasis.

Desde el oasis, con un balde a distancia y/2, puede dejar un balde lleno a distancia yy regresar al oasis. Necesitas 3 cubos para hacer esto.

Desde el oasis, con cubos llenos en ambos yy y/2, puede dejar un cubo lleno a distancia 3y/2y regresar al oasis. Necesitas 4 cubos para hacer esto. Luego debes dejar un cubo lleno a una distancia y/2y regresar al oasis.

Finalmente, puede terminar con un cubo lleno en (x-1)y/2. (No puede dejar un cubo lleno xy/2porque no podría volver al oasis, ya que el viaje de ida y vuelta es xyla capacidad total de los cubos).

Usando los cubos restantes, puede dejar cubos llenos en (x-3)y/2... yo y/2. En este punto, simplemente camina lo más lejos que puede, recogiendo sus cubos llenos a medida que avanza. Cuando llegue (x-1)y/2, todavía le quedan dos cubos llenos, lo que le permite alcanzar (x+3)y/2.

El extra 1proviene de la peculiaridad de las reglas que le permite caminar su última milla sin tener agua. Aunque el ejemplo muestra que puede dejar los cubos un poco más lejos de lo descrito anteriormente, esto en realidad no le ayuda a caminar más, ya que debe dejar menos agua o beber el agua del cubo cuando lo alcanza antes de poder moverse. en.

Neil
fuente