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) à partir0,[a,b,...]
dea,[b,...]
,b,[a,...]
,ceil(a/2),[floor(a/2),b,...]
, ouceil(b/2),[a,floor(b/2),...]
; ou (2) à partir dex,[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 de0,[g]
où g est donné àt,L
oùt
est la cible souhaitée etL
y a-t-il une liste?Réponses:
C ++ ,
498482457 octetsSi cette fonction n'est appelée qu'une seule fois, elle peut être de 455 octets.
J'ai trouvé que presque tous les compilateurs GCC en ligne (y compris TIO) m'interdisaient d'omettre le type de la fonction
f
. Cependant, le GCC sur mon ordinateur le permet, et je ne sais pas pourquoi.Celui-ci peut gérer de grandes entrées si un emplacement peut contenir ce nombre d'éléments (bien qu'il ait besoin d'un plus grand tableau et qu'il manquera probablement de temps).
Non golfé:
la source
Gelée , 74 octets
Un programme complet avec la première entrée (3e argument) la pile actuelle et la deuxième entrée (4e argument) le curseur souhaité.
Essayez-le en ligne! En raison de la mise en œuvre, cela atteint le délai d'expiration TIO de 60 secondes pour le scénario de
25, 17
test. Cela peut être résolu en supprimant les redondances laissées pour golfiness à l'aide de ce 84 octets (qui filtre les piles de taille nulle et trie celles qui restentḟ€Ṣ¥0¦€0
à la fin du lien 6 et ne conserve que des états uniques à chaque étape avec l'utilisation deQ$
dans le principal lien).Comment?
Le programme implémente la machine à états définie.
Il crée l'état d'origine,
[0, [argument 1]]
puis passe à tous les états possibles suivants à plusieurs reprises
jusqu'à ce que l'un soit trouvé correspondant
[argument 2, [...]]
.Remarque: l'entrée du programme se trouve sur le "lien principal" qui est le plus bas (
Wṭ0WÇ€Ẏ$ÑпL’
)la source