Oyun
Son zamanlarda, zamanımın çoğu, telefonumdaki Logic Dots adlı bir bağımlılık yapıcı oyun tarafından ele geçirildi ve bu bana bu zorluğu yazmam için ilham verdi. Size oyun ekranını gösterirsem kuralları açıklamak daha kolaydır, bu yüzden çözülmemiş ve çözülmüş bir bulmacanın ekran görüntüsü:
Şimdi burada dikkat edilmesi gereken üç ana şey var.
- Oyun tahtası (merkezdeki 4x4 kareler ızgarası)
- Tüm çizgiler veya
a
1 dikdörtgenle gerekli şekiller (üstten ikinci çubukta, puan ve menü altında vb.) Bağlantılı noktalar - Bir çözüm için sütunlarda kaç noktanın olması gerektiğini gösteren satır ve sütunların üzerindeki sayılar
Oyunun amacı gerekli şekilleri ızgaraya sığdırmaktır. Şekilleri döndürebilirsiniz, ancak çapraz olarak giremezler.
Çözümde, tüm şekillerin tam olarak bir kez oluşturulduğuna dikkat edin (çünkü sadece bir kez gerekli şekillerde bulunurlar) ve bu durumda hepsi yataydır, ancak dikey olabilirler. Karelerle doldurulmuş pembe, kullanılmayan kareleri gösterir.
İşte daha büyük ve biraz daha karmaşık bir tablo:
Çözülmemiş yapboz, zaten silik meydanlarda dolu birkaç kare var olduğunu Bildirimi o kareler bloke delalet CAN NOT üstünde bir nokta koyun. Kuyruklu noktalar size bir noktanın o noktada olduğunu söyler ve kuyruk yönünde en az bir noktaya bağlanır, ancak başka bir yönde değil (zıt yön dahil).
Gösterim
Bu yazının geri kalanı için, aşağıdaki sembolleri kullanarak panoya başvuracağım:
- <,>, ^, v - Kuyruk noktası yönünde uzanan önceden yerleştirilmiş bir noktayı belirtir
- * - Bir noktayı belirtir. Çözülmemiş bir ızgarada (giriş) verilirse, ayrı bir şekildir. Çıkışta ise, etrafındaki noktalara bağlanır.
- # - Engellenen ızgara karesini belirtir (nokta yerleştiremeyeceğiniz yer)
- -, | (kısa çizgi ve çubuk) - Sağ ve sol kuyruklu bir noktayı ve sırasıyla yukarı ve aşağı kuyruklu bir noktayı belirtin
- ** (boşluk karakteri) - ** Boş bir alanı belirtir
Bu sembolleri kullanarak, ikinci örnek olay (çözülmemiş) aşağıdaki gibi temsil edilebilir:
<
#
^ #
Ve çözüm şu şekilde temsil edilebilir:
*< * *
*
*
* *
* *#*
^ # *
Hiçbir şeklin yatay, dikey veya çapraz olarak dokunamayacağını unutmayın , bu nedenle aşağıdaki durum geçerli değildir:
***
**
**
Meydan okuma
Senin meydan okuma 4x4 9x9 dahil, herhangi bir mantık nokta bulmaca çözmek için. Dört giriş satırı, daha sonra oyun tahtası alacaksınız. Çizgiler aşağıdaki gibi olacaktır:
- 1. satır, Şekiller - Her biri formda verilen
sizexquantity
(örneğin3x2
, üç uzunluklu iki şekil için) bulunan ve bir boşlukla ayrılmış bulunan şekiller. Örnek çizgi:3x1 2x1 1x1
- 2. satır, Sütunlar - Her sütun için gereken nokta sayısının boşlukla ayrılmış bir listesi. Örnek çizgi:
1 1 2 2
- 3. satır, Satırlar - Her satır için gereken nokta sayısının boşlukla ayrılmış bir listesi. Örnek çizgi:
3 0 3 0
- 4. satır, Kart boyutu - Tek bir tam sayı, kart boyutu,
B
Daha sonra tahta verilir ve B
yukarıda belirtilen notasyonu kullanarak tahtayı temsil eden girdi hatlarıdır. Örneğin, ikinci örnek vaka için tam girdi aşağıdaki gibidir:
4x1 3x1 2x2 1x2
1 4 0 3 0 5
4 1 1 2 3 2
6
<
#
^ #
Programınız daha sonra aynı gösterimde çözülmüş anakartı çıkarır. Yukarıdaki giriş için eşleşen çıkış aşağıdaki gibidir:
** * *
*
*
* *
* *#*
* # *
Bir oyun tahtasının birden fazla çözümü olabileceğini unutmayın. Bu durumda, sadece geçerli bir çözüm üretin. Ayrıca, programınızın karmaşık bir 10x10 ızgarası için makul bir masaüstü bilgisayarda 10 saniye içinde doğru bir çözüm üretmesi gerekir.
Bu kod golf, yani en az bayt kazanır.
Test Durumları
Giriş 1
3x2 1x4
2 2 3 1 2
4 0 3 0 3
5
#
#
*
Çıktı 1
*** *
***#
#
* * *
Giriş 2
3x1 1x6
2 0 4 0 3
3 1 2 1 2
5
*
#
Çıktı 2
* * *
*
* *
* #
* *
Giriş 3
5x1 4x1 2x1 1x2
1 2 3 3 2 2
0 5 0 4 0 4
6
#
-
#
<
Çıkış 3
#
*****
****
#
* ** *
t no two shapes can touch horizontally, vertically or diagonally
(bu başlangıçta olmalı, neredeyse sonuna kadar kaybetmemeli, ama yine de ...)