Son zamanlarda, standart stratejiler kullanılarak çözülemeyen gerçekten zor Sudoku'nun üreten yeni bir Sudoku uygulamasına sahibim. Bu yüzden birkaç yenisini öğrenmek zorunda kaldım. Bu stratejilerden biri Y-Kanat Stratejisidir . "Zor Stratejiler" altındadır, ama aslında o kadar da zor değildir.
Misal
Bu strateji için sadece 4 hücre önemlidir. Bu yüzden görüntülerdeki diğer tüm hücreleri görmezden geldim.
Her hücre için tüm adaylara bakıyoruz. Aşağıdaki örnekte adaylarla bir hücremiz var 3 7
(bu , adayları zaten reddettiğimiz anlamına geliyor 1 2 4 5 6 8 9
, örneğin 1
, aynı satırda bir 2
, aynı 3x3 kutusunda bir, ...), adaylarla bir hücre 6 7
, adaylar 3 6
ile bir hücre ve adaylar ile bir hücre 2 6
. Y-Wing stratejisi 6
, düpedüz hücrenin adaylarından çıkarılabileceğini, sadece 2
doldurabileceğiniz bir aday olarak bırakılacağını önerecektir . Bu yüzden doğru bir sayı bulduk ve tüm Sudoku'yu çözmede bir adım daha yakınız.
Neden 6
kaldırılabilir?
açıklama
Diyelim ki 6
düpedüz hücre için doğru sayı. Şimdi 6
bu sütunda bir var, bu yüzden 6
sağ üst hücrenin adaylarından kaldırabiliriz, sadece 7
doldurabileceğimiz bir a bırakabiliriz. Aynı şey sol sol hücre ile olur. 'İ kaldırabilir 6
ve doldurabiliriz 3
. Şimdi sol üst hücreye bakarsak bir çelişki yaşarız. Şimdi zaten var çünkü 7
aynı satırda ve bir 3
Kaldırabileceğimiz böylece, aynı sütunda 7
ve 3
tüm hiçbir aday bırakarak adayların. Bu açıkça mümkün değil. Bu nedenle 6 doğru dümen hücresinin doğru sayısı olamaz.
Daha kesin olarak: Adaylarla [A B] [A C] [C D] [B C]
(bu sırayla veya dairesel olarak döndürülmüş) 4 hücremiz varsa ve hücreler bir daireye (aynı satır, aynı sütun veya aynı 3x3 kutu ile) bağlanırsa (Hücre 1, Hücre 2'ye bağlanır. Kaldırabileceğiniz daha) 1 hücre bağlanır 4 hücreye bağlanır hücre 3, bağlı C
gelen [C D]
hücre. Üç hücreleri olduğu, çok önemlidir [A B]
, [A C]
ve [B C]
sadece iki aday her içerirler. Farklı [C D]
olarak daha fazla veya daha az içerebilen hücre ( D
sıfır, bir veya daha fazla aday olabilir).
Her iki şekilde de bağlanabildiklerini açıkça söyledim. Bir sonraki örnekte, tekrar uygulanan stratejiyi görebilirsiniz. Ancak bu sefer 4 hücre bir dikdörtgen oluşturmuyor. Aşağı sol ve dümdüz hücreler basitçe bağlanır, çünkü aynı 3x3 kutusundadırlar. Y-Wing, 1
sol üst hücrenin adayı olarak kaldırabileceğimizi söylüyor . Bu sefer bu hücrede hala 2 aday kaldı, bu yüzden yeni bir doğru sayı bulamadık. Ancak yine de 1
kutunun kaldırılması farklı stratejilere kapı açabilir.
Strateji hakkında daha fazla bilgi veya birkaç örnek daha istiyorsanız sudokuwiki.org adresini ziyaret edin .
Zorluk Özellikleri
Hücrelerin adaylarını temsil eden giriş olarak 4 liste alacaksınız. Dört hücre bir daire gibi bağlanır (Hücre 1, Hücre 1'e bağlı olan Hücre 4'e bağlı olan Hücre 3'e bağlı olan Hücre 2'ye bağlanır). Her listenin artan sırada sıralandığını varsayabilirsiniz.
İşiniz bir adayı (Y-Wing stratejisini uygulayarak) kaldırmak ve elde edilen aday listelerini aynı sırayla döndürmektir. Stratejiyi uygulayamıyorsanız, aynı aday listelerini döndürmeniz yeterlidir.
İki olası çözüm varsa (B hücresinin A'sını veya D hücresinin C'sini çıkarabilirsiniz), yalnızca bir çözüm döndürün. Hangisinin önemi yok.
Giriş, herhangi bir yerel liste veya dizi biçiminde olabilir. Ayrıca bir liste listesi veya benzer bir şey kullanabilirsiniz. Girişi STDIN, komut satırı argümanı, komut istemi veya işlev argümanı ile alabilir ve çıktıyı dönüş değeriyle veya sadece STDOUT'a yazdırarak döndürebilirsiniz.
Bu kod golfü. En kısa kod (bayt cinsinden) kazanır.
Test Durumları
[3 7] [6 7] [2 6] [3 6] => [3 7] [6 7] [2] [3 6] # Example 1
[6 7] [2 6] [3 6] [3 7] => [6 7] [2] [3 6] [3 7] # Example 1, different order
[2 6] [3 6] [3 7] [6 7] => [2] [3 6] [3 7] [6 7] # Example 1, different order
[3 6] [3 7] [6 7] [2 6] => [3 6] [3 7] [6 7] [2] # Example 1, different order
[1 2 8] [1 8] [8 9] [1 9] => [2 8] [1 8] [8 9] [1 9] # Example 2
[3 8] [4 8] [3 4 8] [3 4] => [3 8] [4 8] [3 8] [3 4]
[1 3 6 7 8] [3 8] [3 4] [4 8] => [1 3 6 7] [3 8] [3 4] [4 8]
[7 8] [7 8] [4 7] [4 8] => [7 8] [8] [4 7] [4 8] or [7] [7 8] [4 7] [4 8]
[4 7] [7 8] [4 8] [4] => [4 7] [7 8] [4 8] [] # Fictional example
[3 7] [2 6] [6 7] [3 6] => [3 7] [2 6] [6 7] [3 6] # Y-Wing can't be applied here
[4 7] [2 7 8] [4 8] [1 4] => [4 7] [2 7 8] [4 8] [1 4] # -||-
7 8
birinci ve ikinci hücre adaylarıdır. Y-Wing stratejisi hala uygulanabilir.