Zarządzanie zapasami w Minecraft jest trudne. Masz 17 diamentów, ale potrzebujesz 7, aby stworzyć stół zaklęcia, kilof i miecz. Czy bierzesz je i klikasz prawym przyciskiem 7 razy? A może raz prawym przyciskiem myszy i dwa razy prawym przyciskiem myszy i wziąć 7 w lewo? To takie mylące!
dla tych z was, którzy są teraz zdezorientowani, nie martw się, wyjaśnię to wszystko za chwilę
Wyzwanie
Biorąc pod uwagę rozmiar stosu przedmiotów i pożądaną ilość, określ najmniejszą liczbę kliknięć, aby uzyskać tę liczbę. Musisz obsłużyć do 64 dla obu danych wejściowych i możesz założyć, że masz nieskończone miejsca na ekwipunek. Nie można użyć sztuczki przeciągania i rozpowszechniania.
Definicje
Inwentarz jest zbiorem szczeliny w której można przechowywać przedmioty.
Szczelina to przestrzeń do przechowywania w magazynie, w którym można umieścić do jednego typu elementu.
Stos jest liczba elementów umieszczonych w tej samej grupie. Na potrzeby tego wyzwania stos jest po prostu zbiorem przedmiotów w tym samym miejscu (więc zignoruj rozmiar stosu)
Kursor to pointy thingy. Ten kursor. Może zawierać elementy „na nim”; innymi słowy, jeśli klikniesz miejsce i podniosłeś przedmioty, przedmioty, które podniosłeś, są „na kursorze”, dopóki ich nie odłożysz.
Dane techniczne
Istnieją cztery możliwe sytuacje. Albo masz element na kursorze, albo go nie masz, albo klikniesz lewym przyciskiem myszy, albo prawym przyciskiem myszy.
Jeśli nie masz przedmiotu na kursorze, a kliknięcie lewym przyciskiem myszy na polu, podnosi cały stos.
Jeśli nie masz przedmiotu na kursorze i klikniesz miejsce prawym przyciskiem myszy, podnosisz połowę stosu, zaokrąglając w górę.
Jeśli masz element na kursorze i klikniesz lewy przycisk na polu, umieścisz wszystkie elementy w tym polu. (W przypadku wszystkich graczy Minecraft nie będziesz mieć> 64 przedmiotów do tego wyzwania i wszystkie można układać w stosy w 64, a masz tylko jeden typ, więc zamiana przedmiotów nie ma tutaj zastosowania)
Jeśli masz kursor na przedmiot i klikniesz na niego prawym przyciskiem myszy, umieścisz w nim jeden przedmiot.
Tak więc zaczynasz od wszystkich podanych elementów (pierwsze wejście lub drugie; możesz wybrać kolejność) w gnieździe i chcesz zakończyć z żądaną ilością (inne wejście) w kursorze.
Przejrzyjmy przykład. Powiedzmy, że zaczynasz z 17 przedmiotami i chcesz 7. Najpierw kliknij stos prawym przyciskiem myszy, co oznacza, że wybrałeś 9 i jest tam 8. Następnie, jeśli ponownie klikniesz stos prawym przyciskiem myszy, umieścisz jeden przedmiot z powrotem w polu, pozostawiając ci 8, a pole 9. Wreszcie, ponownie kliknij prawym przyciskiem myszy i masz 7, a pole ma 10. Zatem, zwrócisz 3
(liczba kliknięć).
Jeśli uda ci się wygrać w golfa, proszę powiedz mi, a ja wyedytuję przykład: P
Przypadki testowe
Są one generowane ręcznie, więc proszę o informację, czy są jakieś błędy. Zarządzam zapasami poprzez kliknięcie jittera prawym przyciskiem myszy, więc nie mam doświadczenia w optymalnym zarządzaniu zapasami: 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
Objaśnienia
To wyzwanie może być trudne dla graczy spoza Minecrafta, nie mam pojęcia. Oto kilka wyjaśnień.
64, 8 -> 5
ponieważ podnosisz 32 za pomocą kliknięcia prawym przyciskiem myszy, odkładasz go, podnosisz 16, odkładasz, a następnie podnosisz 8.
63, 8 -> 5
z tego samego powodu.
25, 17 -> 7
ponieważ podnosisz 13, odkładasz, odrywasz 6 z resztek 12, umieszczasz 2 z powrotem na stosie resztek, a następnie umieszczasz 4 w kursorze na 13, a następnie podnosisz je.
Zasady
- Obowiązują standardowe luki
- Możesz to założyć
0 <= desired <= given <= 64
- Możesz przyjmować dane wejściowe w dowolnej kolejności i wykonywać operacje we / wy w dowolnym rozsądnym formacie
0,[n]
, może przejść: (1) od 0,[a,b,...]
do a,[b,...]
, b,[a,...]
, ceil(a/2),[floor(a/2),b,...]
, lub ceil(b/2),[a,floor(b/2),...]
; lub (2) z x,[a,b,...]
( x>0
) i 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]
. Wyzwanie polega zatem na znalezieniu minimalnych możliwych przejść od miejsca, 0,[g]
gdzie g jest podane, do t,L
gdzie t
jest pożądany cel i czy L
jest jakaś lista?