To pytanie ma podobny zestaw, aby znaleźć tablicę, która pasuje do zestawu sum, chociaż ma zupełnie inne cele.
Rozważ tablicę A
długości n
. Tablica zawiera tylko dodatnie liczby całkowite. Na przykład A = (1,1,2,2)
. Zdefiniujmy f(A)
jako zbiór sum wszystkich niepustych, sąsiadujących pod-macierzy A
. W tym przypadku f(A) = {1,2,3,4,5,6}
. Kroki do produkcji f(A)
są następujące:
Podziemne A
są (1), (1), (2), (2), (1,1), (1,2), (2,2), (1,1,2), (1,2,2), (1,1,2,2)
. Ich odpowiednie kwoty to 1,1,2,2,2,3,4,4,5,6
. Zestaw, który otrzymujesz z tej listy, to dlatego {1,2,3,4,5,6}
.
Tablicę nazywamy A
unikalną, jeśli nie ma innej tablicy B
o takiej samej długości f(A) = f(B)
, z wyjątkiem A
odwróconej tablicy . Na przykład, f((1,2,3)) = f((3,2,1)) = {1,2,3,5,6}
ale nie ma innej tablicy długości, 3
która generowałaby ten sam zestaw sum.
Rozważymy tylko tablice, w których elementy są albo liczbą całkowitą, s
albo s+1
. Np. Jeśli s=1
tablice zawierają tylko 1
i 2
.
Zadanie
Zadaniem dla danego n
i s
jest policzenie liczby unikalnych tablic o tej długości. Możesz założyć, że s
jest pomiędzy 1
i 9
.
Nie należy liczyć odwrotności tablicy, a także samej tablicy.
Przykłady
s = 1
, odpowiedź brzmi zawsze n+1
.
s = 2
, odpowiedzi liczone od n = 1
góry to:
2,3,6,10,20,32,52,86
s = 8
, odpowiedzi liczone od n = 1
góry to:
2,3,6,10,20,36,68,130
Wynik
W przypadku danego n
kodu kod powinien wyświetlać odpowiedź dla wszystkich wartości s
od 1
do 9
. Twój wynik jest najwyższą wartością, n
której wypełnienie następuje w ciągu jednej minuty.
Testowanie
Będę musiał uruchomić Twój kod na moim komputerze z Ubuntu, więc podaj możliwie szczegółowe instrukcje dotyczące tego, jak skompilować i uruchomić kod.
Tabela liderów
- n = 24 autorstwa Andersa Kaseorga w Rust (34 sekundy)
- n = 16 przez Ourous in Clean (36 sekund)
- n = 14 według JRowan w Common Lisp (49 sekund)
źródło
Odpowiedzi:
Rdza , n ≈ 24
Wymaga nocnej rdzy dla wygodnej
reverse_bits
funkcji. Kompilujrustc -O unique.rs
i uruchamiaj z (np./unique 24
. ) .źródło
s
is+1
w nich?s
is + 1
ponieważ powiedziałeś, że są to jedyne tablice, które rozważymy), chociaż nie jest od razu oczywiste, czy to coś zmieni.Często Lisp SBCL, N = 14
funkcja wywołania (goahead ns)
oto czasy wykonywania
źródło
sbcl
jakoś go wywołać ?Czysty
Z pewnością nie jest to najbardziej wydajne podejście, ale interesuje mnie, jak dobrze działa naiwny filtr według wartości.
To powiedziawszy, nadal można wprowadzić pewne ulepszenia przy użyciu tej metody.
Umieść w pliku o nazwie
main.icl
lub zmień górny wiersz namodule <your_file_name_here>
.Kompiluj z
clm -h 1500m -s 50m -fusion -t -IL Dynamics -IL StdEnv -IL Platform main
.Możesz uzyskać wersję używaną przez TIO (i mnie) z linku w nagłówku lub nowszą z tego miejsca .
źródło
s
? W pytaniu mówisz „ Dla danego n kod powinien wypisać odpowiedź dla wszystkich wartości od 1 do 9.”