Bir uzunluk listesini temsil eden bir desen ve bu uzunlukları temsil eden bir dize verildiğinde, bunlar eşleşir mi?
İlgilenenler için bu, Nonogram'ın bir satırının veya sütununun doğru olup olmadığını doğrulamaya eşdeğer bir sorudur . Ancak, bu bulmacalara aşina olmayanlar için soruyu daha az kafa karıştırıcı yapmak için Nonogram'larla ilgili tüm dilleri atladım.
Giriş
Yeni satırla ayrılmış iki veri satırı.
İlk satır, boşlukla ayrılmış bir tamsayı listesi olacaktır, örnek:
3 6 1 4 6
Bu çizgi , ikinci satırın eşleşmesi gereken bilinmeyen , pozitif uzunlukta boş boşluklarla ayrılmış, tamsayı listesine eşit boyutta doldurulmuş boşlukların bir desenini tanımlar . Eşleşen dizenin başında ve sonunda boş alanlar da olabilir.
İkinci satır, birinci satırdaki desenle eşleşebilen veya eşleşmeyebilen bir satır olacaktır. Tamamen oluşur
#
,x
ve_
. Bu satırın en azından ilk satırdaki tamsayıların toplamı artı ayrı tamsayıların sayısı eksi 1 olduğu sürece garanti edilir ve daha uzun olabilir. Bu durumda, bu durumda ikinci satırın en az veya 24 karakter uzunluğunda olması garanti edilir . İlk satırdaki desenle eşleşen 24 karakterlik bir örnek:(3+6+1+4+6) + (5) - 1
###_######_#_####_######
Sembollerin anlamı:
#
Bu doldurulmuş bir kutuyu temsil ederx
Bu, "boş olması garantili" olarak işaretlenmiş bir kutuyu temsil eder_
Bu, bilinmeyen / işaretlenmemiş bir kutuyu temsil eder.
Hedef
Fikir:
- İkinci satırın, ilk satırın desenini karşılayan geçerli bir satır olabileceğini doğrulayın.
ERROR
Bilinmeyen boşlukların ikisiyle doldurulması#
veyax
ilkiyle eşleşmemesi durumunda, kesin bir hata mesajı yazdırmalısınız (bunu nasıl seçeceğiniz size bağlıdır; aşağıdaki örnekler yazılır, ancak bu 5 karakter olması gerekmez) hat.
- Tamamen sıraya yerleştirilmiş , boşlukla ayrılmış tamsayıların sıfır indeksli indekslerini yazdırın . Belirsizlik varsa, yok indeksi yazdırmak .
Örnekler:
Input: | Output: | Reason:
--------------------------------------------------------------------------
3 6 1 4 6 | 0 1 2 3 4 | This is a complete string that
###x######x#x####x###### | | matches perfectly.
--------------------------------------------------------------------------
1 2 1 | 0 1 2 | There is no ambiguity which filled cells
#____xx___##__x_# | | correspond to which parts of the pattern.
--------------------------------------------------------------------------
1 2 1 | | I don't know whether the filled block is
____#___x | | part of the 1, 2, or 1, so output nothing.
--------------------------------------------------------------------------
1 2 1 | ERROR | The first unknown cell will create a block that
#_#x_# | | matches either 1 1 or 3, but not 1 2.
--------------------------------------------------------------------------
1 2 1 | 0 2 | Even though we know where all the filled cells
#____# | | must be, only 0 and 2 are actually filled here.
--------------------------------------------------------------------------
1 1 1 1 | | There are so many possible ways to do fill this,
__#_______#____ | | we don't know which indices are actually matched.
--------------------------------------------------------------------------
4 4 | | Again, we don't know WHICH 4 is matched here,
______x####________ | | so output nothing.
--------------------------------------------------------------------------
4 4 | 0 | However, here, there's no room for a previous 4,
__x####________ | | so the displayed 4 must be index 0.
--------------------------------------------------------------------------
3 | ERROR | We can't fit a 3 into a space before or after
__x__ | | the x, so this is impossible to match.
--------------------------------------------------------------------------
5 1 3 | 0 | While we can match the 5, we don't know whether
x#####x____#____ | | the single block matches the 1 or the 3.
--------------------------------------------------------------------------
3 2 3 | 1 | The two has been completely placed,
____##x##____ | | even though we don't know which it is.
Kurallar:
Girişi yeni satırla ayrılmış bir Dize veya STDIN'den (veya en yakın alternatif) alan ve çıktıyı boşlukla ayrılmış bir Dize olarak döndüren veya STDOUT'a (veya en yakın alternatife) basan bir program veya işlev yazabilirsiniz . İsteğe bağlı olarak, çıktıya tek bir sondaki yeni satır ekleyebilirsiniz.
Ayrıca, komik artık standart boşluklar vardır yasaklandı .