Myślałeś, że zwykłe sudoku jest trudne, teraz wypróbuj Killer Sudoku !
W grze Killer Sudoku nie otrzymujesz żadnych liczb. Zamiast tego otrzymujesz regiony, o których mówi się, że sumują się do określonej liczby. Rozważ następujący przykład z Wikipedii:
I jego rozwiązanie:
Program, który napiszesz, przyjmie format składający się z sekwencji 81 liter reprezentujących regiony, a następnie sekwencji cyfr. Następnie każda liczba w sekwencji reprezentuje sumę liczb w każdym obszarze literowym, zaczynając od „A”, „B” itp.
Następnie wyświetli sekwencję 81 cyfr reprezentujących rozwiązanie.
Na przykład powyższa łamigłówka zawiera następujące dane wejściowe:
AABBBCDEFGGHHCCDEFGGIICJKKFLMMINJKOFLPPQNJOORSPTQNUVVRSTTQWUUXXSYZWWaaXXSYZWbbbcc
3 15 22 4 16 15 25 17 9 8 20 6 14 17 17 13 20 12 27 6 20 6 10 14 8 16 15 13 17
Wynikowy wynik to:
215647398368952174794381652586274931142593867973816425821739546659428713437165289
Możesz założyć, że dane wejściowe są prawidłowe i że regiony zawsze będą wyświetlane w kolejności według A, B, ..., Y, Z, a, b, ..., z.
(Wygrywa najkrótszy działający kod).
źródło
Odpowiedzi:
R - 378 znaków
Zarozumiały
378 znaków:
na moim skromnym komputerze zajmuje około godziny, aby osiągnąć oczekiwane rozwiązanie po 2 964 690 iteracjach.
Gra w golfa:
źródło
GolfScript, 138 znaków
To jest solver zabójcy sudoku w GolfScript. Oczekuje danych wejściowych STDIN w dwóch wierszach, jak podano w powyższym przykładzie.
Uwaga: Ponieważ opis łamigłówki nie nakłada żadnych ograniczeń na czas wykonania, wolałem mały rozmiar kodu niż szybkość. Kod testuje wszystkie konfiguracje siatki 9 ^ 81 pod kątem rozwiązania, które może zająć trochę czasu na wolnym komputerze ;-)
źródło
AABBCADEFFDDGGGG
6 7 4 8 2 3 10
Ruby, 970 znaków
Powyższy kod ruby jest przeciwny do mojej subskrypcji GolfScript. Jest dość długi (i jeszcze nie w pełni golfowy), ale zoptymalizowany pod kątem prędkości. Podane powyżej zabójcze sudoku zostało rozwiązane w niecałą sekundę (w mojej oryginalnej wersji Java było to zaledwie kilka milisekund). Sam solver jest podstawową implementacją algorytmu Knuth DLX.
Dane wejściowe muszą być podane jako dwa wiersze na STDIN. Przykład ( online ):
źródło