To wyzwanie jest częściowo wyzwaniem algorytmów, częściowo wyzwaniem optymalizacji, a częściowo po prostu najszybszym wyzwaniem kodu.
Macierz AT jest w pełni określona przez pierwszy wiersz r
i pierwszą kolumnę c
. Każdy pozostały element macierzy jest tylko kopią elementu, który jest ukośnie w górę i w lewo. Że jest M[i,j] = M[i-1,j-1]
. Dopuszczamy macierze T, które nie są kwadratowe. Zawsze jednak zakładamy, że liczba wierszy jest nie większa niż liczba kolumn. Na przykład rozważmy następującą macierz 3 na 5 T.
10111
11011
11101
Mówimy, że macierz ma właściwość X, jeśli zawiera dwa niepuste zbiory kolumn o nieidentycznych indeksach, które mają tę samą (wektorową) sumę. Suma wektorowa jednej lub więcej kolumn jest po prostu elementarnym sumowaniem ich kolumn. To jest suma dwóch lub więcej kolumn zawierających x
elementy, z których każda jest inną kolumną zawierającą x
elementy. Suma jednej kolumny jest trywialnie samą kolumną.
Powyższa macierz w sposób trywialny ma właściwość X, ponieważ pierwsza i ostatnia kolumna są takie same. Matryca tożsamości nigdy nie ma właściwości X.
Jeśli po prostu usuniemy ostatnią kolumnę macierzy powyżej, otrzymamy przykład, który nie ma właściwości X i dałby wynik 4/3.
1011
1101
1110
Zadanie
Zadanie polega na napisaniu kodu w celu znalezienia macierzy T o najwyższym wyniku z wpisami binarnymi, która nie ma właściwości X. Dla jasności macierz z wpisami binarnymi ma właściwość polegającą na tym, że każdy z jej wpisów ma wartość 0 lub 1.
Wynik
Twój wynik będzie liczbą kolumn podzieloną przez liczbę wierszy w najlepszej macierzy punktacji.
Tie Breaker
Jeśli dwie odpowiedzi mają ten sam wynik, wygrywa ten, który przesłał pierwszy.
W (bardzo) mało prawdopodobnym przypadku, gdy ktoś znajdzie sposób na uzyskanie nieograniczonej liczby punktów, zostanie zaakceptowany pierwszy ważny dowód takiego rozwiązania. W jeszcze bardziej mało prawdopodobnym przypadku, w którym można znaleźć dowód na optymalizację skończonej macierzy, oczywiście przyznam również zwycięstwo.
Wskazówka
Wszystkie odpowiedzi w Znajdź macierz najwyższych wyników bez właściwości X są tutaj ważne, ale nie są optymalne. Istnieją macierze T bez właściwości X, które nie są cykliczne.
Na przykład istnieje matryca 7 na 12 T bez właściwości X, ale nie ma takiej macierzy cyklicznej.
21/11 przebije wszystkie obecne odpowiedzi z tego i poprzedniego wyzwania.
Języki i biblioteki
Możesz używać dowolnego języka, który ma swobodnie dostępny kompilator / tłumacz / etc. dla systemu Linux i dowolnych bibliotek, które są również bezpłatnie dostępne dla systemu Linux.
Bonus Pierwsza odpowiedź z wynikiem większym niż 2 otrzymuje natychmiastową nagrodę w wysokości 200 punktów . Ton Hospel już to osiągnął!
Obecna tablica wyników
- C ++ . Ocena 31/15 przez Ton Hospel
- Java . Ocena 36/19 przez Peter Taylor
- Haskell . Ocena 14/8 przyznana przez Alexander-brett
źródło
Odpowiedzi:
C ++, wynik
23/1225/1327/1428/1431/15Wreszcie wynik o stosunku> 2:
Całkowicie zbadałem od 1 do 14 rzędów. 15 zajęłoby zbyt dużo czasu, aby całkowicie odkryć. Wyniki są następujące:
Podany poniżej kod jest starszą wersją programu. Najnowsza wersja znajduje się na https://github.com/thospel/personal-propertyX .
źródło
Haskell 14/8 = 1,75
Poprzednio 9/6 = 1,5
Napisałem to, a potem spojrzałem na odpowiedzi na inne pytanie i byłem ... zniechęcony.
źródło
main
, liczba (w tym przypadku8
) jest wysokością macierzy, a program iteruje przez szerokości[1..]
. Dla każdej kombinacji wysokości / szerokości drukuje tablicę kolumn prawidłowej macierzy.do
Oto odpowiedź, która działa i jest znacznie bardziej wydajna pod względem pamięci niż Haskell. Niestety, mój komputer wciąż jest zbyt wolny, aby osiągnąć lepszy wynik niż 14/8 w rozsądnym czasie.
Spróbuj skompilować
gcc -std=c99 -O2 -fopenmp -o matrices.exe matrices.c
i uruchomić zmatrices.exe width height
lub podobnym. Dane wyjściowe są liczbami całkowitymi, których bity stanowią podstawę omawianej macierzy, na przykład:Następnie, ponieważ
1650223 = 0b110010010111000101111
omawiana macierz jest:Jeśli ktoś z 8 rdzeniami i czasem w rękach chce to uruchomić, myślę, że może to przynieść dobre rzeczy :)
źródło
valid i: 7481
. W python bin (7481) jest 0b1110100111001, co nie jest wystarczająco długie. Masz pomysł, co się dzieje?