Wdrożyłem kolejną metodę 'Fireworks'.
Teraz pracuję nad metodą 'Pętle SK'.

email: darw32@poczta.onet.pl

Sudoku - Techniki Rozwiązywania

Prawie Ryba (Finned Fish)

Prawie Ryba to struktura przypominająca Rybę jednak występuje w niej element lub elementy dodatkowe (tak zwane fin co można tłumaczyć jako dodatkową płętwę) psujące strukturę ryby. Gdyby nie te dodatkowe elementy otrzymalibyśmy klasyczną rybę (skrzydlicę/miecznika/meduzę).

Omówione zostaną także prawie ryby wariant sashimi (zredukowany lub niepełny). Jest to taki wariant prawie ryby, w którym pomijając dodatkowy/e element/y otrzymalibyśmy pojedyńczą pozycję w wierszu lub w kolumnie albo strukturę ryby niższego rzędu (przykładowo mamy prawie miecznika, jeżeli pomijając dodatkowy/e element/y otrzymamy pojedyńczą pozycję lub strukturę skrzydlicy to jest to wariant sashimi).

Opis powyższy oczywiście bez przykładów niewiele nam powie. Poniżej przedstawione zostaną przykłady prawie ryb dla wartości "X" z wytłumaczeniem, gdzie mogą znajdować się dodatkowe pozycje oraz z jakich pozycji można usunąć wartość "x".

Prawie Skrzydlica

Prawie Skrzydlica (ang. Finned X-Wing) w rzędach/kolumnach dla wartości "x" występuje wtedy, gdy:

  • z jednego i drugiego rzędu/kolumny można wybrać po dwie takie kandydujące pozycje dla wartości "x", które leżą w dwóch tych samych kolumnach/wierszach
  • pozostałe pola, które nie należą do skrzydlicy, tzw. dodatkowe pozycje, leżą tylko w jednym wierszu/kolumnie oraz w tym samym bloku 3x3
  • jeśli powyższe warunki są spełnione to mamy układ prawie skrzydlicy w wierszach/kolumnach dla wartości "x" i wówczas możemy usunąć kandydata "x" z wszystkich takich pozycji, które należą jednocześnie do tego samego bloku 3x3 co elementy dodatkowe oraz do tych samych kolumn/wierszy co pozycje tworzące Skrzydlicę (oczywiście nie usuwamy wartości "x" z Pozycji należących do Skrzydlicy oraz z Pozycji Dodatkowych).

Prawie Skrzydlica jest subtelnym rozszerzeniem techniki skrzydlicy, którą to technikę starałem się w miarę precyzyjnie zdefiniować. Oczywiście, żeby to zrozumieć potrzebne są przykłady.

Spójrz na następujący diagram:
Kandydujące pozycje dla wartości "7" w wierszach "3" i "7" tworzą układ prawie skrzydlicy bo:
- pozycje wyróżnione na żółto tworzą układ skrzydlicy
- dodatkowe pozycje (wyróżnione szarym kolorem) leży w jednym wierszu numer "7" oraz w bloku 3x3 o początku w punkcie [7,7] i końcu w punkcie [9,9]
- pozycje, z których można usunąć wartość "7" muszą należeć do tego samego bloku 3x3 co pozycje dodatkowe oraz do tych kolumn na których leżą pozycje skrzydlicy (kolumny "6" i "9") - w naszym przypadku będą to pozycje [8,9] i [9,9], pozycja [9,9] jest już wypełniona, więc usuwamy wartość "7" z pozycji [8,9].

Przeanalizujmy wszystkie pozycje z wiersza "7", które mogą przyjąć wartość "7":
- jeżeli pozycja [7,6] przyjmie wartość "7", wówczas z pozycji [3,6] usuwamy kandydata "7", tak więc pozycja [3,9] musiałaby przyjąć wartość "7", więc pozycja [8,9] nie może mięć wartość "7"
- jeżeli dowolna z pozycji [7,7], [7,8], [7,9] przyjmie wartość "7" to w tym przypadku także pozycja [8,9] z tego samego bloku 3x3 nie będzie mogła przyjąć wartości "7". Zatem niezależnie od tego, która pozycja w wierszu 7-mym przyjmie wartość "7", pozycja [8,9] nie może przyjąć wartości "7".

Na diagramie obok mamy także prawie skrzydlicę (wariant sashimi) w wierszach "2" i "5" dla wartości "7" (w wariancie tym, pomijając dodatkowy/e element/y, otrzymalibyśmy pojedyńczą pozycję w wierszu lub w kolumnie albo strukturę ryby niższego rzędu), naszym przypadku, pomijając elementy dodatkowe z pozycji [2,2] oraz [2,3] otrzymalibyśmy pojedyńczą pozycję w 2-gim wierszu dla wartości "7". Pole [2,1] jest wypełnione, ale jest traktowane jakby należało do prawie skrzydlicy. Wariant sashimi, traktujemy tak samo jak prawie skrzydlicę.

Analizując tak jak w poprzednim przypadku wszystkie pozycje z wiersza "2", które mogą przyjąć wartość "7" mamy:
- jeżeli pozycja [2,4] przyjmie wartość "7", wówczas z pozycji [5,4] usuwamy kandydata "7", tak więc pozycja [5,1] musiałaby przyjąć wartość "7", więc pozycje [1,1] i [3,1] nie mogłyby mięć wartości "7"
- jeżeli dowolna z pozycji [2,2], [2,3] przyjmie wartość "7" to w tym przypadku także w punktach [1,1] i [3,1] z tego samego bloku 3x3 nie będzie mogła wystąpić wartość "7"
- tak więc niezależnie od tego, która pozycja w 2-gim wierszu przyjmie wartość "7", pozycje [1,1] i [3,1] nie mogą przyjąć wartości "7" (w naszym przypadku usuwamy wartość "7" z punktu [3,1]).

Prawie Miecznik

Prawie Miecznik (ang. Finned Swordfish) w rzędach/kolumnach dla wartości "x" występuje wtedy, gdy:

  • z tych trzech rzędów/kolumn można wybrać takie pozycje dla danej kandydującej wartości "x", które tworzą miecznik
  • pozostałe pola, które nie należą do miecznika, tzw. dodatkowe pozycje, leżą tylko w jednym wierszu/kolumnie oraz w tym samym bloku 3x3
  • jeśli powyższe warunki są spełnione to mamy układ prawie miecznika w wierszach/kolumnach dla wartości "x" i wówczas możemy usunąć kandydata "x" z wszystkich takich pozycji, które należą jednocześnie do tego samego bloku 3x3 co elementy dodatkowe oraz do tych samych kolumn/wierszy co pozycje tworzące miecznik (oczywiście nie usuwamy wartości "x" z pozycji należących do miecznika oraz z pozycji dodatkowych).

Prawie miecznik jest rozszerzeniem techniki miecznika, którą postaram się wytłumaczyć na przykładach.

Spójrz na następujący diagram:
Kandydujące pozycje dla wartości "2" w wierszach "1", "7" i "9" tworzą układ prawie miecznika bo:
- pozycje wyróżnione na żółto tworzą układ miecznika
- dodatkowa pozycja (wyróżnione szarym kolorem) leży w wierszu numer 1 oraz w bloku 3x3 o o początku w punkcie [1,4] i końcu w punkcie [3,6]
- pozycje, z których można usunąć wartość "2" muszą należeć do tego samego bloku 3x3 co pozycja dodatkowa oraz do tych kolumn, na których leżą pozycje miecznika (kolumny "2", "4" i "9"). W naszym przypadku będą to pozycje [2,4] i [3,4], pozycja [2,4] jest już wypełniona, więc usuwamy wartość "2" z pozycji [3,4].

Przeanalizujmy wszystkie pozycje z wiersza "1", które mogą przyjąć wartość "2":
- jeżeli dowolna z pozycji [1,4], [1,6] przyjmie wartość "2" to w tym przypadku pozycja [3,4] z tego samego bloku 3x3 nie będzie mogła przyjąć wartości "2"
- jeżeli pozycja [1,9] przyjmie wartość "2", wówczas z pozycji [9,9] usuwamy kandydata "2", tak więc pozycja [2,9] musiałaby przyjąć wartość "2" co powoduje usunięcie kandydata z pozycji [7,2] a to powoduje, że pozycja [7,4] przyjełaby wartość "2", tak więc i w tym wypadku w punkcie [3,4] nie mogłaby wystąpić wartość "2"
- także niezależnie od tego, która z pozycji [1,4], [1,6], [1,9] przyjmie wartość "2", to wówczas pozycja [3,4] z tego samego bloku 3x3 nie będzie mogła przyjąć wartości "2" (czyli w każdym przypadku).

Na diagramie obok mamy także prawie miecznik (wariant sashimi) w wierszach "1", "4" i "5" dla wartości "7" (nie biorąc pod uwagę pól dadatkowych w 1-szym wierszu otrzymamy pojedyńczą pozycję dla wartości "7" - pozycja [1,4]). Pole [1,6] traktujemy tak jakby należała do miecznika (pozycja sashimi - pozycja jest wypełniona albo nie ma kandydata o wartości "7").<.P>

Analizując tak jak w poprzednim przypadku wszystkie pozycje z wiersza "1", które mogą przyjąć wartość "7" mamy:
- jeżeli dowolna z pozycji [1,4] oraz [1,5] przyjmie wartość "7" to w tym przypadku w punktach [2,6] i [3,6] z tego samego bloku 3x3 nie będzie mogła wystąpić wartość "7"
- jeżeli pozycja [1,7] przyjmie wartość "7", wówczas z pozycji [4,7] usuwamy kandydata "7", tak więc pozycja [4,1] musiałaby przyjąć wartość "7" co powoduje usunięcie kandydata z pozycji [5,1] a to powoduje, że pozycja [5,6] przyjełaby wartość "7", tak więc i w tym wypadku w punktach [2,6] i [3,6] nie mogłaby wystąpić wartość "7"
- tak więc niezależnie od tego, która pozycja w "1"-szym wierszu przyjmie wartość "7" w pozycjach [2,6] i [3,6] nie będzie mogła wystąpić wartość "7" (w naszym przypadku usuwamy kandydata "7" z punktu [2,6]).

Prawie Meduza

Prawie Meduza (ang. Finned Jellyfish) w rzędach/kolumnach dla wartości "x" występuje wtedy, gdy:

  • z tych czterech rzędów/kolumn można wybrać takie pozycje dla danej kandydującej wartości "x", które tworzą meduzę
  • pozostałe pola, które nie należą do meduzy, tzw. dodatkowe pozycje, leżą tylko w jednym wierszu/kolumnie oraz w tym samym bloku 3x3
  • jeśli powyższe warunki są spełnione to mamy układ prawie meduzy w wierszach/kolumnach dla wartości "x" i wówczas możemy usunąć kandydata "x" z wszystkich takich pozycji, które należą jednocześnie do tego samego bloku 3x3 co elementy dodatkowe oraz do tych samych kolumn/wierszy co pozycje tworzące meduzę (oczywiście nie usuwamy wartości "x" z pozycji należących do meduzy oraz z pozycji dodatkowych).

Prawie Meduza to rozszerzenie techniki meduzy Meduzy. Po analizie przykładów powinno stać się to jasne.

Spójrz na następujący diagram:
Kandydujące pozycje dla wartości "1" w wierszach "2", "4", "5" i "9" tworzą układ prawie meduzy bo:
- pozycje wyróżnione na żółto tworzą układ meduzy
- dodatkowa pozycja (wyróżnione szarym kolorem) leży w wierszu numer 2 oraz w bloku 3x3 o o początku w punkcie [1,1] i końcu w punkcie [3,3]
- pozycje, z których można usunąć wartość "1" muszą należeć do tego samego bloku 3x3 co pozycja dodatkowa oraz do tych kolumn, na których leżą pozycje meduzy (kolumny "1", "3", "8" i "9") - w naszym przypadku będą to pozycje [1,1], [1,3] i [3,1].

Przeanalizujmy wszystkie pozycje z wiersza "2", które mogą przyjąć wartość "1":
- jeżeli pozycja [2,2] bądź [2,3] przyjmie wartość "1" to można usunąć wartość "1" z wszystkich pozycji należących do tego samego bloku 3x3 co pozycje [2,2] i [2,3] wyłączając te pozycje, a więc z pozycji [1,1], [1,3] oraz [3,1]
- jeżeli komórka [2,7] przyjmie wartość "1" wówczas możemy wyeliminować wartość "1" z wszystkich komórek znajdujących się w 2-gim wierszu i 7-mej kolumnie. Pozostałe komórki kandydujące z wierszy "4", "5" oraz "9" będą tworzyły miecznik (komórki: [4,1], [4,3], [4,8], [5,1], [5,3], [5,8], [9,1], [9,3] i [9,8]), a jak wiemy w mieczniku wartość "1" może wystąpić tylko na przecięciu wierszy i kolumn należących do miecznika czyli możemy usunąć kandydata "1" z kolumn "1", "3" i "8", które nie należą do miecznika, a więc także z pozycji [1,1], [1,3] oraz [3,1]
- podobnie jeżeli komórka [2,8] przyjmie wartość "1" wówczas możemy wyeliminować wartość "1" z wszystkich komórek znajdujących się w 2-gim wierszu i 8-mej kolumnie. Pozostałe komórki kandydujące z wierszy "4", "5" oraz "9" będą tworzyły miecznik (komórki: [4,1], [4,3], [4,7], [5,1], [5,3], [5,7], [9,1], [9,3] i [9,7]). W mieczniku wartość "1" może wystąpić tylko na przecięciu wierszy i kolumn należących do miecznika czyli możemy usunąć kandydata "1" z kolumn "1", "3" i "7", które nie należą do miecznika, a więc także z pozycji [1,1], [1,3] oraz [3,1]
- także niezależnie od tego, która z pozycji w wierszu "2" przyjmie wartość "1", na pozycjach [1,1], [1,3] oraz [3,1] nie może wystąpić wartość "1", więc możemy usunąć je z tych pozycji.

Na diagramie obok mamy także prawie meduzę (wariant sashimi) w wierszach "1", "4", "6" i "9" dla wartości "7" (nie biorąc pod uwagę pól dadatkowych w 9-tym wierszu otrzymamy pojedyńczą pozycję dla wartości "7" - pozycja [9,9]). Pole [9,1] traktujemy tak jakby należało do meduzy (pozycja sashimi - pozycja jest wypełniona albo nie ma kandydata o wartości "7").<.P>

Spójrz na następujący diagram:
Kandydujące pozycje dla wartości "7" w wierszach "1", "4", "6" i "9" tworzą układ prawie meduzy bo:
- pozycje wyróżnione na żółto tworzą układ meduzy
- doodatkowa pozycja (wyróżniona kolorem szarym) leży w wierszu numer 9 oraz w bloku 3x3 o o początku w punkcie [7,1] i końcu w punkcie [9,3]
- pozycje, z których można usunąć wartość "7" muszą należeć do tego samego bloku 3x3 co pozycja dodatkowa oraz do tych kolumn, na których leżą pozycje meduzy (kolumny "1", "2", "8" i "9") - w naszym przypadku będą to pozycje [7,1], [7,2], [8,1] i [8,2].

Przeanalizujmy wszystkie pozycje z wiersza "9", które mogą przyjąć wartość "9":
- jeżeli komórka [9,9] przyjmie wartość "7" wówczas możemy wyeliminować wartość "7" z wszystkich komórek znajdujących się w 9-tym wierszu i 9-tej kolumnie. Pozostałe komórki kandydujące z wierszy "1", "4" oraz "6" będą tworzyły miecznik (komórki: [1,1], [1,2], [1,8], [4,1], [4,8], [6,1] i [6,2]), a jak wiemy w mieczniku wartość "7" może wystąpić tylko na przecięciu wierszy i kolumn należących do miecznika czyli możemy usunąć kandydata "7" z kolumn "1", "2" i "8", które nie należą do miecznika, a więc także z pozycji [7,1], [7,2], [8,1] oraz [8,2]
- jeżeli pozycja [9,3] przyjmie wartość "7" to i w tym przypadku z pozycji [7,1], [7,2], [8,1] i [8,2] można usunąć kandydata "7" bo są one z tego samego bloku 3x3 co pozycja [9,3]
- także niezależnie od tego, która z pozycji [9,3] bądź [9,9] w wierszu "9" przyjmie wartość "7", na pozycjach [7,1], [7,2], [8,1] oraz [8,2] nie może wystąpić wartość "7", więc możemy usunąć je z tych pozycji.