Określenie dowolnej dowolnej siatki 9x9 wymaga podania pozycji i wartości każdego kwadratu. Naiwne kodowanie tego może dać 81 (x, y, wartość) trypletów, wymagając 4 bitów dla każdego x, y i wartości (1-9 = 9 wartości = 4 bity) w sumie 81x4x3 = 972 bitów. Numerując każdy kwadrat, można zmniejszyć informację o położeniu do 7 bitów, upuszczając nieco bit dla każdego kwadratu i łącznie 891 bitów. Określając z góry ustaloną kolejność, można drastycznie zredukować ją do zaledwie 4 bitów dla każdej wartości, co daje w sumie 324 bity. Jednak w sudoku może brakować liczb. Daje to możliwość zmniejszenia liczby liczb, które należy podać, ale może wymagać dodatkowych bitów do wskazywania pozycji. Używając naszego 11-bitowego kodowania (pozycja, wartość), możemy określić układankę z wskazówkami z bitów, np. Minimalna (17) łamigłówka wymaga 187 bitów. Najlepszym kodowaniem, o jakim do tej pory myślałem, jest użycie jednego bitu dla każdego miejsca, aby wskazać, czy jest ono wypełnione, a jeśli tak, to kolejne 4 bity kodują liczbę. Wymaga to bitów, 149 dla minimalnej układanki ( ). Czy istnieje bardziej wydajne kodowanie, najlepiej bez bazy danych każdej prawidłowej konfiguracji sudoku? (Punkty za adresowanie ogólny z logiczne)
Właśnie przyszło mi do głowy, że wiele łamigłówek będzie rotacją kolejnej lub będzie miało zwykłą kombinację cyfr. Być może może to pomóc w zmniejszeniu wymaganych bitów.
Według Wikipedii ,
Liczba klasycznych siatek rozwiązań 9 × 9 wynosi 66 690 903 752 021,072,936,960 (sekwencja A107739 w OEIS) lub około .
Jeśli poprawnie wykonałem matematykę ( ), uzyskam 73 (72.498) bitów informacji dla tabeli odnośników.
Ale:
Wykazano, że liczba zasadniczo różnych rozwiązań, biorąc pod uwagę symetrie, takie jak obrót, odbicie, permutacja i znakowanie, wynosi zaledwie 5 472 730 538 [15] (sekwencja A109741 w OEIS).
Daje to 33 (32,35) bitów, więc możliwe jest, że sprytna metoda wskazania, która permutacja może spaść poniżej pełnych 73 bitów.