Otrzymałeś torbę Kręgli. Wszyscy wiedzą, że aby najbardziej docenić różne smaki, musisz przełączać się między nimi.
Podstawy:
- Jednorazowo możesz zjeść tylko 1 kręgle
- Kolejność spożywania kręgli musi być okresowa.
- Każdy okres nie może zawierać określonego smaku więcej niż jeden raz.
- Twoja torba ma tylko tyle kręgli. Nie możesz jeść bardziej określonego smaku kręgu niż pojawia się w twojej torbie.
- Chcesz zjeść jak najwięcej kręgli (może nie zawsze być to możliwe)
Przykłady:
Załóżmy, że zaczynasz od 3 czerwonych, 2 niebieskich i 3 zielonych kręgli:
R B G R B G R G Invalid: The last R must be followed by a B, not a G
R B G R B G R Valid, but sub-optimal
R R R Valid, but sub-optimal
R G B R G B R G Valid and optimal
G R B G R B G R Also valid and optimal (there are multiple good solutions)
Wejście wyjście
- Przekazano niepustą listę dodatnich liczb całkowitych dla zliczeń kolorów. (Powyższy przykład to
[3,2,3]
). - Musisz zwrócić listę zawierającą prawidłowe i optymalne zamówienie.
- Zamiast używać kolorów, użyjesz indeksów z listy danych wejściowych. (Ostatni przykładowy wynik powyżej to
[2,0,1,2,0,1,2,0]
). - Twoje dane wyjściowe mogą być indeksowane 0 lub indeksowane 1. Moje przykłady będą indeksowane 0
Przypadki testowe
1 0
4 0 0 0 0
4 1 0 0 0 0
3 1 0 1 0 or 0 0 0
5 2 2 0 1 2 0 1 2 0
2 3 5 2 1 0 2 1 0 2 1 or 1 2 0 1 2 0 1 2
2 4 5 2 1 2 1 2 1 2 1 2
3 4 5 2 1 0 2 1 0 2 1 0 2 1 or 1 2 0 1 2 0 1 2 0 1 2
1 1 1 1 1 6 5 0 1 2 3 4 5 (lots of other solutions)
1 1 1 1 1 8 5 5 5 5 5 5 5 5
2 4 6 8 3 2 1 3 2 1 3 2 1 3 2 1 3 2
To jest gra w golfa , więc spraw , aby Twoje rozwiązania były jak najkrótsze w swoim ulubionym języku!
Odpowiedzi:
JavaScript (ES6),
177175 bajtówSformatowane i skomentowane
Zastosowana formuła
Poniżej znajduje się tabela pokazująca działanie formuły
F(i, j) = minimum(value[j], value[i] + 1)
, tutaj wraz zi = 0
danymi wejściowymi[ 5, 2, 2 ]
.Ta formuła może być interpretowana w następujący sposób: dla każdego typu Skittle możemy wybrać nie więcej niż liczbę najmniej dostępnego typu plus jeden.
Przypadki testowe
Pokaż fragment kodu
źródło
m
znajdowanie się na końcu „pętli” jest związane z golfem, czy jest to po prostu JS?m=0
tutaj jest jednak związane z golfem, ponieważ nie dbam o początkową wartość tej pętli (i tak zostanie ona nadpisana). Inicjowaniem
jest wygodne.[1,2,3].reduce((x, y) => x+y, 10)
w JS będziereduce(lambda x,y: x+y, [1,2,3], 10)
w Pythonie (myślę), oba skutkują16
.Galaretka , 22 bajty
Indeksowanie 1.
Wypróbuj online!
W jaki sposób?
Powtarza każdy prefiks indeksów posortowanych według wartości malejącej jeszcze raz, niż byłoby to możliwe przy danej torbie kręgli, a następnie usuwa końcowy kręgle lub kręgle z każdego z nich, aby były możliwe do osiągnięcia, i zwraca ten z największą liczbą kręgli .
Liczba, którą należy usunąć z jednego dodatkowego okresowego powtórzenia, to tylko liczba z minimalną liczbą w całym tym prefiksie.
źródło
Python3,
174172167 bajtówPomysł
Biorąc pod uwagę np. 3 czerwone, 2 niebieskie i 3 zielone kręgle, można je ułożyć w siatkę, posortowaną według koloru i ilości:
Jeśli ktoś spróbuje dokładnie zjeść kręgle i, może co najmniej zjeść łącznie kręgle i * c, gdzie c jest liczbą kręgli w kolumnie r, np. Dla i = 2 można zjeść przynajmniej 6 kręgli.
Pozostaje tylko policzyć, ile dodatkowych kręgli można zjeść w niepełnym okresie.
Grał w golfa
Skomentował
Wypróbuj online!
Edit: Wymieniłem
(i+1)
z-~i
zaoszczędzić 2 bajty.Edycja: -5 bajtów dzięki Dead Possum
źródło
sum(1for e in b if e[0]>c)
nasum(c<e[0]for e in b)
. Konwertuje Prawdę na 1 domyślnie i oszczędza 5 bajtów