Aiuta Beth a fuggire dal deserto


11

Sebbene simili agli altri puzzle che trasportano l' acqua , gli aspetti unici di questa sfida lo rendono completamente diverso.

Beth

Beth si trova in un'oasi nel mezzo di un deserto. C'è molta acqua nel lago, ma sfortunatamente ci sono solo X secchi, ognuno dei quali ha una capacità di Y litri d'acqua.

Beth può portare in mano 2 secchi, ma per sopravvivere deve bere esattamente 1 litro dopo ogni chilometro che percorre. Può anche lasciare alcuni secchi a metà strada (l'acqua non evapora).

La sfida

Scopri la formula e scrivi la soluzione più breve che funzionerà per valori interi positivi di X e Y e calcola la distanza massima che Beth può percorrere dall'oasi. È consentito spostare l'acqua tra i secchi.

Esempio

X = 3, Y = 5

  1. Beth lascia 1 secchio pieno a 3 km dall'oasi, torna indietro (avendo l'ultimo drink dall'oasi)
  2. Beth porta un altro secchio pieno al punto 3KM, avendo 12L lì ora.
  3. Beth può avanzare al punto 6KM e lasciare un secchio con 4L di acqua.
  4. Torna al punto 3KM. Ora ha esattamente 2 litri per tornare all'oasi.
  5. Riempi i secchi e viaggia verso il punto 6KM. Ora ha 8 litri di acqua.
  6. Continuare fino al punto 15KM.

La risposta è: 15

Input Output

È possibile definire X / Y direttamente nel codice o leggere dall'input. Il risultato può essere inserito in una variabile o in output, a seconda di quale sia il più breve.


2
Questo dovrebbe essere un codice golf? È etichettato come una sfida del codice.
Dennis,

Sì, è code-golf, ho aggiunto il tag. Trova una formula corretta ed esprimila attraverso il codice.
romaninsh

1
Penso che valga la pena di espandersi al passaggio 1. All'inizio non mi era chiaro come Beth potesse percorrere 6 km con solo 5 litri di acqua: beve solo dopo ogni km che percorre e all'ultima è nell'oasi.
xnor

1
Potresti dare un caso di prova, nel modo in cui un programma lo produrrebbe?
Pavel,

Modificata la domanda per affrontare entrambi i punti.
romaninsh,

Risposte:


2

JavaScript (ES6), 25 byte

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

Tutti calcolano lo stesso valore; Non riesco a trovare una formulazione più breve.

Quando xè inferiore 3, prendi quanta più acqua possibile e cammini il più lontano possibile, il che è semplicemente x*y+1.

Quando xè almeno 3, devi iniziare a costruire cache.

Dall'oasi, puoi lasciare un secchio pieno a distanza y/2e tornare all'oasi. Hai bisogno di 2 secchi per farlo, ma questo non è utile se hai solo 2 secchi perché vuoi essere in grado di riempire 2 secchi quando torni nell'oasi.

Dall'oasi, con un secchio a distanza y/2, è possibile lasciare un secchio pieno a distanza ye tornare all'oasi. Hai bisogno di 3 secchi per farlo.

Dall'oasi, con secchi pieni su entrambi ye y/2, puoi lasciare un secchio pieno a distanza 3y/2e tornare all'oasi. Hai bisogno di 4 secchi per farlo. Devi quindi lasciare un secchio pieno a distanza y/2e tornare all'oasi.

Alla fine puoi finire con un secchio pieno a (x-1)y/2. (Non puoi lasciare un secchio pieno xy/2perché non saresti in grado di tornare all'oasi, poiché il viaggio di andata e ritorno è xyla capacità totale dei secchi.)

Usando i secchi rimanenti, puoi lasciare secchi pieni a (x-3)y/2... yo y/2. A questo punto semplicemente cammini il più lontano possibile, raccogliendo i secchi pieni mentre procedi. Quando raggiungi (x-1)y/2ti restano ancora due secchi pieni, che ti consentono di raggiungere (x+3)y/2.

Il extra 1deriva dalla stranezza delle regole che ti consente di percorrere l'ultimo miglio senza avere acqua. Sebbene l'esempio mostri che puoi lasciare i secchi leggermente più distanti di quanto descritto sopra, in realtà ciò non ti aiuta a camminare oltre, poiché devi lasciare meno acqua o bere l'acqua dal secchio quando la raggiungi prima di poterti spostare su.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.