La gestione dell'inventario di Minecraft è difficile. Hai 17 diamanti, ma hai bisogno di 7 per creare un tavolo degli incantesimi, un piccone e una spada. Li raccogli e fai clic destro 7 volte? O fai clic destro una volta e fai clic destro due volte e prendi il 7 a sinistra? È così confuso!
per quelli di voi che sono ora confusi, non ti preoccupare, ti spiegherò tutto in un secondo
Sfida
Data la dimensione di una pila di articoli e un importo desiderato, determinare il numero minimo di clic per ottenere tale importo. Devi solo gestire fino a 64 per entrambi gli input e puoi supporre di avere infiniti slot di inventario. Non è possibile utilizzare il trucco trascina per distribuire.
definizioni
L' inventario è una raccolta di slot in cui è possibile memorizzare articoli.
Uno slot è uno spazio di archiviazione nel tuo inventario in cui è possibile posizionare fino a un tipo di articolo.
Una pila è un numero di oggetti posizionati nello stesso gruppo. Ai fini di questa sfida, uno stack è semplicemente un gruppo di oggetti nello stesso posto (quindi ignora le dimensioni dello stack)
Il cursore è il tuo oggetto appuntito. Quel cursore. Può avere elementi "su di esso"; in altri termini, se si fa clic su uno slot e si raccolgono gli oggetti, gli oggetti che hai raccolto sono "sul cursore" fino a quando non li metti giù.
specificazioni
Esistono quattro possibili situazioni. O hai un oggetto sul tuo cursore oppure no, e fai clic con il tasto sinistro o destro.
Se non hai un oggetto sul cursore e fai clic con il pulsante sinistro del mouse su uno slot, raccogli l'intera pila.
Se non hai un oggetto sul cursore e fai clic con il pulsante destro del mouse su uno slot, raccogli metà dello stack, arrotondato per eccesso.
Se hai un elemento sul cursore e fai clic con il pulsante sinistro del mouse su uno slot, inserisci tutti gli elementi nello slot. (Per tutti voi giocatori di Minecraft, non avrete> 64 oggetti per questa sfida e sono tutti impilabili a 64, e avete solo un tipo quindi lo scambio di oggetti non si applica qui)
Se hai un elemento sul cursore e fai clic con il pulsante destro del mouse su uno slot, inserisci un elemento nello slot.
Quindi, inizi con tutti gli elementi dati (primo input o secondo; puoi scegliere l'ordine) in uno slot e vuoi finire con la quantità desiderata (altro input) nel cursore.
Facciamo un esempio. Supponi di iniziare con 17 oggetti e che desideri 7. Innanzitutto, fai clic con il pulsante destro del mouse sulla pila, il che significa che hai raccolto 9 e ce ne sono 8 in quello slot. Quindi, se fai nuovamente clic con il pulsante destro del mouse sullo stack, rimetti un oggetto nello slot, lasciandoti con 8 e lo slot con 9. Infine, fai di nuovo clic con il pulsante destro del mouse e hai 7 e lo slot ha 10. Quindi, restituiresti 3
(il numero di clic).
Se riesci a farmi il click-golf, per favore dimmelo e io modificherò l'esempio: P
Casi test
Questi sono generati manualmente, quindi per favore dimmi se ci sono errori. Eseguo la gestione dell'inventario facendo clic con il pulsante destro del mouse, quindi non ho esperienza con la gestione ottimale dell'inventario: P
Given, Desired -> Output
17, 7 -> 3
64, 8 -> 5
63, 8 -> 5
10, 10 -> 1
10, 0 -> 0 # note this case
25, 17 -> 7
spiegazioni
Questa sfida potrebbe essere difficile per i giocatori non Minecraft, non ne ho idea. Ecco alcune spiegazioni.
64, 8 -> 5
perché raccogli 32 usando il tasto destro del mouse, posizionalo verso il basso, raccogli 16, posizionalo verso il basso, quindi raccogli 8.
63, 8 -> 5
per la stessa ragione.
25, 17 -> 7
perché raccogli 13, posizionalo in basso, raccogli 6 dal rimanente 12, rimetti 2 nella pila rimanente, quindi posiziona il 4 nel cursore nel 13, quindi raccogli quelli.
Regole
- Si applicano scappatoie standard
- Si può presumere che
0 <= desired <= given <= 64
- È possibile accettare input in entrambi gli ordini ed eseguire I / O in qualsiasi formato ragionevole
0,[n]
, può passare: (1) da 0,[a,b,...]
a a,[b,...]
, b,[a,...]
, ceil(a/2),[floor(a/2),b,...]
, o ceil(b/2),[a,floor(b/2),...]
; o (2) da x,[a,b,...]
( x>0
) a x-1,[a+1,b,...]
, x-1,[a,b+1,...]
, x-1,[a,b,...,1]
, 0,[a+x,b,...]
, 0,[a,b+x,...]
, 0,[a,b,...,x]
. La sfida è quindi quella di trovare le transizioni minime possibili da 0,[g]
dove g è dato a t,L
dove t
è il target desiderato ed L
è un elenco?