Aidez Beth à s'échapper du désert

11

Bien que semblable à l'autre puzzle transportant de l'eau , les aspects uniques de ce défi le rendent entièrement différent.

Beth

Beth est située dans une oasis au milieu d'un désert. Il y a beaucoup d'eau dans le lac, mais malheureusement il n'y a que X seaux, chacun ayant une capacité de Y litres d'eau.

Beth peut porter 2 seaux dans ses mains, mais pour survivre, elle doit boire exactement 1 litre après chaque kilomètre parcouru. Elle peut également laisser des seaux à mi-chemin (l'eau ne s'évapore pas).

Le défi

Calculez la formule et écrivez la solution la plus courte qui fonctionnera pour les valeurs entières positives de X et Y et calculez la distance maximale que Beth peut parcourir depuis l'oasis. Il est permis de déplacer l'eau entre les seaux.

Exemple

X = 3, Y = 5

  1. Beth quitte 1 seau plein à 3 km de l'oasis, revient (ayant le dernier verre de l'oasis)
  2. Beth apporte un autre seau plein au point 3KM, ayant 12L là maintenant.
  3. Beth peut avancer jusqu'au point 6KM et laisser le seau avec 4L d'eau dedans.
  4. Revenez au point 3KM. Elle a maintenant exactement 2L pour retourner à l'oasis.
  5. Remplissez des seaux et voyagez jusqu'à 6 km. Elle a maintenant 8L d'eau.
  6. Continuez jusqu'au point 15KM.

La réponse est: 15

Entrée sortie

Vous pouvez définir X / Y directement dans le code ou lire à partir de l'entrée. Le résultat peut être placé dans une variable ou une sortie, selon la plus courte des deux.

romaninsh
la source
2
Est-ce censé être du golf de code? Il est identifié comme un défi de code.
Dennis
Oui, c'est du code-golf, j'ai ajouté le tag. Trouvez une formule correcte et exprimez-la à travers le code.
romaninsh
1
Je pense que cela vaut la peine de s'étendre sur l'étape 1. Au début, je ne savais pas clairement comment Beth pouvait parcourir 6 km avec seulement 5 litres d'eau: elle ne boit qu'après chaque km qu'elle parcourt, et au dernier, elle est à l'oasis.
xnor
1
Pourriez-vous donner un cas de test, de la manière dont un programme le sortirait?
Pavel
Modification de la question pour répondre aux deux points.
romaninsh

Réponses:

2

JavaScript (ES6), 25 octets

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

Tous ces éléments calculent la même valeur; Je n'arrive pas à trouver une formulation plus courte.

Quand xest inférieur à 3, vous prenez autant d'eau que possible et marchez aussi loin que possible, ce qui est tout simplement x*y+1.

Quand xest au moins 3, vous devez commencer à construire des caches.

De l'oasis, vous pouvez laisser un seau plein à distance y/2et retourner à l'oasis. Pour ce faire, vous avez besoin de 2 seaux, mais cela n'est pas utile si vous n'avez que 2 seaux car vous voulez pouvoir remplir 2 seaux lorsque vous revenez à l'oasis.

De l'oasis, avec un seau à distance y/2, vous pouvez laisser un seau plein à distance yet retourner à l'oasis. Vous avez besoin de 3 seaux pour ce faire.

De l'oasis, avec des seaux pleins aux deux yet y/2, vous pouvez laisser un seau plein à distance 3y/2et retourner à l'oasis. Pour ce faire, vous avez besoin de 4 seaux. Vous devez ensuite laisser un seau plein à distance y/2et retourner à l'oasis.

Finalement, vous pouvez vous retrouver avec un seau plein à (x-1)y/2. (Vous ne pouvez pas laisser un seau plein xy/2car vous ne pourriez pas retourner à l'oasis, comme le voyage aller-retour xy, la capacité totale des seaux.)

En utilisant vos seaux restants, vous pouvez laisser des seaux pleins à (x-3)y/2... you y/2. À ce stade, vous marchez aussi loin que possible, ramassant vos seaux pleins au fur et à mesure. Lorsque vous atteignez, il (x-1)y/2vous reste encore deux seaux pleins, vous permettant d'atteindre (x+3)y/2.

Le plus 1vient de la bizarrerie des règles vous permettant de parcourir votre dernier kilomètre sans avoir d'eau. Bien que l'exemple montre que vous pouvez laisser les seaux un peu plus loin que décrit ci-dessus, cela ne vous aide pas à marcher plus loin, car vous devez soit laisser moins d'eau ou boire l'eau du seau lorsque vous l'atteignez avant de pouvoir vous déplacer sur.

Neil
la source