O gerenciamento de inventário do Minecraft é difícil. Você tem 17 diamantes, mas precisa de 7 para criar uma mesa de encantamento, uma picareta e uma espada. Você as pega e clica com o botão direito 7 vezes? Ou você clica com o botão direito uma vez e clica com o botão direito duas vezes e vira à esquerda o 7? É tão confuso!
para aqueles de vocês que agora estão confusos, não se preocupem, vou explicar tudo em um segundo
Desafio
Dado o tamanho de uma pilha de itens e a quantidade desejada, determine o menor número de cliques para obter essa quantidade. Você só precisa lidar com até 64 para ambas as entradas e pode assumir que possui infinitos slots de inventário. Você não pode usar o truque de arrastar para distribuir.
Definições
O inventário é uma coleção de slots onde você pode armazenar itens.
Um slot é um espaço de armazenamento em seu inventário onde você pode colocar até um tipo de item.
Uma pilha é um número de itens colocados no mesmo grupo. Para os propósitos deste desafio, uma pilha é simplesmente um monte de itens no mesmo local (portanto, ignore o tamanho da pilha)
O cursor é sua coisa pontuda. Aquele cursor. Pode ter itens "nele"; em outros termos, se você clicou em um slot e pegou itens, os itens que você pegou estão "no cursor" até que você os soltasse.
Especificações
Existem quatro situações possíveis. Você tem um item no cursor ou não, e você clica com o botão esquerdo ou com o botão direito.
Se você não possui um item no cursor e clica com o botão esquerdo do mouse em um slot, escolhe toda a pilha.
Se você não tiver um item no cursor e clicar com o botão direito do mouse em um slot, você pegará metade da pilha, arredondada para cima.
Se você tiver um item no cursor e clicar com o botão esquerdo do mouse em um slot, coloque todos os itens nesse slot. (Para todos os seus jogadores do Minecraft, você não terá> 64 itens para este desafio e todos eles são empilháveis em 64, e você só tem um tipo para que a troca de itens não se aplique aqui)
Se você tiver um item no cursor e clicar com o botão direito do mouse em um slot, coloque um item nesse slot.
Então, você começa com todos os itens fornecidos (primeira entrada ou segunda; pode escolher a ordem) em um slot e deseja terminar com a quantidade desejada (outra entrada) em seu cursor.
Vamos percorrer um exemplo. Digamos que você comece com 17 itens e deseje 7. Primeiro, clique com o botão direito do mouse na pilha, o que significa que você pegou 9 e há 8 nesse slot. Então, se você clicar com o botão direito do mouse na pilha novamente, coloque um item de volta no slot, deixando-o com 8 e o slot com 9. Por fim, clique com o botão direito do mouse novamente e você terá 7 e o slot terá 10. Assim, você retornaria 3
(o número de cliques).
Se você conseguir sair do campo de golfe comigo, informe-me e editarei o exemplo: P
Casos de teste
Estes são gerados manualmente, por isso, diga-me se houver algum erro. Eu faço o gerenciamento de inventário clicando com o botão direito do mouse, para não ter experiência com o gerenciamento ideal de inventário: 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
Explicações
Esse desafio pode ser complicado para jogadores que não são do Minecraft, não faço ideia. Aqui estão algumas explicações.
64, 8 -> 5
porque você pega 32 usando o botão direito, coloque-o para baixo, pegue 16, coloque-o e depois 8.
63, 8 -> 5
pela mesma razão.
25, 17 -> 7
porque você pega 13, coloca-o no chão, pega 6 dos 12 restantes, coloca 2 de volta na pilha restante e, em seguida, coloca o 4 no cursor nos 13 e depois pega-os.
Regras
- Aplicam-se brechas padrão
- Você pode assumir que
0 <= desired <= given <= 64
- Você pode receber informações em qualquer ordem e executar E / S em qualquer formato razoável
0,[n]
, pode transitar: (1) a partir de 0,[a,b,...]
a a,[b,...]
, b,[a,...]
, ceil(a/2),[floor(a/2),b,...]
, ou ceil(b/2),[a,floor(b/2),...]
; ou (2) a partir de 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]
. O desafio é encontrar as transições mínimas possíveis de 0,[g]
onde g é dado para t,L
onde t
está o alvo desejado e L
existe alguma lista?