Otrzymasz sekwencję żądań pamięci i rozmiar pamięci podręcznej. Musisz zwrócić najmniejszą możliwą liczbę braków pamięci podręcznej w ramach dowolnej strategii zastępowania pamięci podręcznej.
Optymalną strategią jest algorytm Belady , którego możesz użyć, jeśli chcesz.
System buforowania działa w następujący sposób: Pamięć podręczna zaczyna się pusta. Przychodzą żądania pamięci. Jeśli żądanie prosi o kawałek danych w pamięci podręcznej, wszystko jest w porządku. Jeśli nie, ponosisz błąd pamięci podręcznej. W tym momencie możesz wstawić dane, które były żądane do pamięci podręcznej w celu przyszłego wykorzystania. Jeśli pamięć podręczna jest pełna i chcesz wstawić nowe dane, musisz eksmitować dane, które wcześniej znajdowały się w pamięci podręcznej. Nigdy nie możesz wstawiać danych, które nie były tylko w pamięci podręcznej.
Twoim celem jest znalezienie minimalnej możliwej liczby braków pamięci podręcznej dla danej sekwencji żądań pamięci i wielkości pamięci podręcznej.
Otrzymasz rozmiar pamięci podręcznej, dodatnią liczbę całkowitą i sekwencję żądań pamięci, która jest listą tokenów. Tokeny te mogą być dowolnym rodzajem tokenów, które lubisz, o ile możliwe jest co najmniej 256 różnych tokenów (bajty są w porządku, boole nie są). Na przykład ints, łańcuchy, listy są w porządku. W razie potrzeby poproś o wyjaśnienia.
Przypadki testowe:
3
[5, 0, 1, 2, 0, 3, 1, 2, 5, 2]
6
Zobacz wikipedię, aby uzyskać informacje na temat zasad zastępowania, które to osiągają.
2
[0, 1, 2, 0, 1, 0, 1]
3
Po prostu unikaj dodawania 2
do pamięci podręcznej.
3
[0, 1, 2, 1, 4, 3, 1, 0, 2, 3, 4, 5, 0, 2, 3, 4]
9
Jednym ze sposobów osiągnięcia tego celu jest nigdy eksmisji 0
i 2
oraz eksmisji 1
jak najszybciej po jego ostatniego użycia.
Punktacja: To jest golf golfowy. Wygrywa najmniej bajtów.
źródło
Odpowiedzi:
JavaScript (ES6), 128 bajtów
Pobiera dane wejściowe jako
(size)(list)
.Wypróbuj online!
Skomentował
To implementacja algorytmu Belady.
źródło
Perl 5 , 193 bajtów
Wypróbuj online!
193 bajty bez wcięcia, nowego wiersza, spacji, komentarzy:
źródło
05AB1E , 20 bajtów
Wypróbuj online!
źródło
Haskell , 82 bajty
Wypróbuj online!
Wyjaśnienie
Działa metodą brute force: wszystkie strategie pamięci podręcznej są wypróbowywane i zwracany jest najlepszy wynik.
źródło
Perl 6 , 146 bajtów
Wypróbuj online!
źródło