Arkadaşınızın Android telefona şifresini girdiğini görelim. Deseni nasıl yaptıklarını hatırlamıyorsun ama desenin nasıl göründüğünü hatırlıyorsun. Endişeli arkadaş olduğunuzda, şifrelerinin ne kadar güvenli olduğunu bilmek istersiniz. İşiniz, belirli bir modelin yapılabilecek tüm yollarını hesaplamaktır.
Android kalıpları nasıl çalışır?
Desenler 3x3 düğüm ızgarasına çizilir. Bir düzende, parmaklarını ekrandan kaldırmadan bir dizi düğüm ziyaret edilir. Ziyaret ettikleri her düğüm önceki düğüme bir kenar ile bağlanır. Akılda tutulması gereken iki kural vardır.
Herhangi bir düğümü bir kereden fazla ziyaret edemezsiniz
Bir kenar görünmeyen bir düğümden geçemez
Gerçek android kilit kombinasyonlarında genellikle çok zor ve dolayısıyla çok yaygın olmamakla birlikte, şövalye gibi hareket etmenin mümkün olduğunu unutmayın . Yani, bir taraftan bitişik olmayan bir köşeye veya başka bir yöne hareket etmek mümkündür. İşte böyle bir hareket kullanan iki kalıp örneği:
İşte gerçekleştirilen animasyonlu bir GIF .
Bir model çözme
Tipik bir model şöyle bir şeye benzeyebilir:
Bunun gibi basit bir desenle, iki deseni çizmenin iki yolu vardır. İki gevşek ucun herhangi birinden başlayabilir ve vurgulanan düğümlerden diğerine geçebilirsiniz. Bu, çoğu insan için geçerli olsa da, özellikle insanların tipik olarak kullandığılar, bu tüm modeller için doğru değildir.
Aşağıdaki modeli göz önünde bulundurun:
Hemen fark edilebilir iki çözüm var. Sol üstte başlayan bir kişi:
Ve bir tanesi alt ortada başlıyor:
Bununla birlikte, bir çizginin zaten seçildikten sonra bir noktadan geçmesine izin verildiğinden, üst ortada başlayan ek bir desen vardır:
Bu belirli modelin 3 çözümü vardır, ancak modeller 1 ile 4 arasında bir çözüme sahip olabilir [kaynak belirtilmeli] .
İşte her birinin bazı örnekleri:
1.
2.
3.
4.
I / O
Bir düğüm sıfır ila dokuz dahil tam sayılar, dize eşdeğerleri veya a ila i (veya A ila I) karakterleri olarak temsil edilebilir. Her düğüm, bu kümelerden birinin benzersiz bir temsiline sahip olmalıdır.
Bir çözüm, düğüm temsillerini içeren sıralı bir kap ile temsil edilecektir. Düğümlerin, geçirildikleri sırayla sipariş edilmesi gerekir.
Bir düzen sırasız düğüm çiftleri kabı ile temsil edilecektir. Her bir çift, çiftin iki noktasını birbirine bağlayan bir kenarı temsil eder. Desen gösterimleri benzersiz değil.
Standart girdi yöntemleri ile girdi olarak bir model gösterimi alacak ve aynı modeli oluşturan tüm olası çözümleri standart çıktı yöntemleri ile çıkartacaksınız.
Her girişin en az bir çözüme sahip olacağını ve en az 4 düğüm bağlayacağını varsayabilirsiniz.
Dil seçimine zorlanmak veya istemek zorunda kalırsanız, sıralanmamış bir kabın yerine sipariş edilen bir kap kullanmayı tercih edebilirsiniz.
Test Kılıfları
Aşağıdaki düzende düzenlenmiş düğümlerle:
0 1 2
3 4 5
6 7 8
{...}
Sırasız bir konteyner, [...]
düzenli bir konteyner olalım ve (...)
bir çift olsun.
Aşağıdaki girişler ve çıkışlar eşleşmelidir
{(1,4),(3,5),(5,8)} -> {[1,4,3,5,8]}
{(1,4),(3,4),(5,4),(8,5)} -> {[1,4,3,5,8]}
{(0,4),(4,5),(5,8),(7,8)} -> {[0,4,5,8,7],[7,8,5,4,0]}
{(0,2),(2,4),(4,7)} -> {[0,1,2,4,7],[1,0,2,4,7],[7,4,2,1,0]}
{(0,2),(2,6),(6,8)} -> {[0,1,2,4,6,7,8],[1,0,2,4,6,7,8],[8,7,6,4,2,1,0],[7,8,6,4,2,1,0]}
{(2,3),(3,7),(7,8)} -> {[2,3,7,8],[8,7,3,2]}
{(0,7),(1,2),(1,4),(2,7)} -> {[0,7,2,1,4],[4,1,2,7,0]}
{(0,4),(0,7),(1,3),(2,6),(2,8),(3,4),(5,7)} -> {[1,3,4,0,7,5,8,2,6]}
{(1,3),(5,8)} -> {}
Tüm test vakalarının imgur albümü resim olarak burada bulunabilir . Desenler kırmızı mavi renkte çözümler.
puanlama
Bu kod golfü. En az bayt kazanır.