La gestion des stocks de Minecraft est difficile. Vous avez 17 diamants, mais vous en avez besoin de 7 pour fabriquer une table d'enchantement, une pioche et une épée. Les ramassez-vous et faites-vous un clic droit 7 fois? Ou faites-vous un clic droit une fois et un clic droit deux fois et prenez le 7 à gauche? C'est tellement déroutant!
pour ceux d'entre vous qui sont maintenant confus, ne vous inquiétez pas, je vais tout expliquer dans une seconde
Défi
Compte tenu de la taille d'une pile d'articles et du montant souhaité, déterminez le moins de clics pour obtenir ce montant. Vous avez seulement besoin de gérer jusqu'à 64 pour les deux entrées et vous pouvez supposer que vous avez des emplacements d'inventaire infinis. Vous ne pouvez pas utiliser l'astuce glisser-distribuer.
Définitions
L' inventaire est une collection d'emplacements où vous pouvez stocker des objets.
Un emplacement est un espace de stockage dans votre inventaire où vous pouvez placer jusqu'à un type d'objet.
Une pile est un certain nombre d'éléments placés dans le même groupe. Pour les besoins de ce défi, une pile est simplement un tas d'objets au même endroit (donc ignorez la taille de la pile)
Le curseur est votre truc pointu. Ce curseur. Il peut contenir des éléments "dessus"; en d'autres termes, si vous avez cliqué sur un emplacement et ramassé des objets, les objets que vous avez ramassés sont "sur le curseur" jusqu'à ce que vous les posiez.
Caractéristiques
Il y a quatre situations possibles. Soit vous avez un élément sur votre curseur, soit vous n'en avez pas, et soit vous faites un clic gauche, soit vous faites un clic droit.
Si vous n'avez pas d'objet sur votre curseur et que vous cliquez avec le bouton gauche sur un emplacement, vous récupérez la pile entière.
Si vous n'avez pas d'élément sur votre curseur et que vous cliquez avec le bouton droit sur un emplacement, vous récupérez la moitié de la pile, arrondie vers le haut.
Si vous avez un élément sur votre curseur et que vous faites un clic gauche sur un emplacement, vous placez tous les éléments dans cet emplacement. (Pour tous les joueurs de Minecraft, vous n'aurez pas> 64 objets pour ce défi et ils sont tous 64 empilables, et vous n'avez qu'un seul type, donc l'échange d'objets ne s'applique pas ici)
Si vous avez un élément sur votre curseur et que vous cliquez avec le bouton droit sur un emplacement, vous placez un élément dans cet emplacement.
Ainsi, vous commencez avec tous les éléments donnés (première entrée ou seconde; vous pouvez choisir l'ordre) dans un emplacement, et vous souhaitez terminer avec la quantité souhaitée (autre entrée) dans votre curseur.
Passons en revue un exemple. Disons que vous commencez avec 17 objets et que vous en voulez 7. Tout d'abord, vous cliquez avec le bouton droit sur la pile, ce qui signifie que vous en avez ramassé 9 et qu'il y en a 8 dans cet emplacement. Ensuite, si vous cliquez à nouveau avec le bouton droit sur la pile, vous remettez un élément dans l'emplacement, vous laissant avec 8 et l'emplacement avec 9. Enfin, vous cliquez à nouveau avec le bouton droit et vous avez 7 et l'emplacement a 10. Ainsi, vous reviendriez 3
(le nombre de clics).
Si vous parvenez à me cliquer sur un golf, dites-le moi et je modifierai l'exemple: P
Cas de test
Ceux-ci sont générés manuellement, veuillez donc me dire s'il y a des erreurs. Je fais la gestion de l'inventaire par un clic droit sur la gigue, donc je n'ai pas d'expérience avec la gestion optimale de l'inventaire: 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
Explications
Ce défi pourrait être délicat pour les joueurs non-Minecraft, je n'en ai aucune idée. Voici quelques explications.
64, 8 -> 5
parce que vous prenez 32 en utilisant le clic droit, placez-le vers le bas, ramassez 16, placez-le, puis ramassez 8.
63, 8 -> 5
pour la même raison.
25, 17 -> 7
parce que vous ramassez 13, placez-le vers le bas, ramassez 6 dans les 12 restants, placez 2 dans la pile de restes, puis placez le 4 dans le curseur dans le 13, puis ramassez-les.
Règles
- Des échappatoires standard s'appliquent
- Vous pouvez supposer que
0 <= desired <= given <= 64
- Vous pouvez prendre des données dans l'un ou l'autre ordre et effectuer des E / S dans n'importe quel format raisonnable
0,[n]
, peut passer: (1) à partir 0,[a,b,...]
de a,[b,...]
, b,[a,...]
, ceil(a/2),[floor(a/2),b,...]
, ou ceil(b/2),[a,floor(b/2),...]
; ou (2) à partir de x,[a,b,...]
( x>0
) à 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]
. Le défi consiste alors à trouver les transitions minimales possibles de 0,[g]
où g est donné à t,L
où t
est la cible souhaitée et L
y a-t-il une liste?