長さのリストを表すパターンと、それらの長さを表す文字列が与えられた場合、それらは一致しますか?
興味のある人にとって、これは、ノノグラムの行または列が正しいかどうかを検証することと同等の質問です。ただし、これらのパズルになじみのない人にとって質問の混乱を少なくするために、Nonogramsに関連するすべての言語を省略しました。
入力
改行で区切られた2行のデータ。
最初の行は、スペースで区切られた整数のリストです。例:
3 6 1 4 6
この行は、2番目の行が一致しなければならない正の長さの不明な空のスペースで区切られた、整数リストに等しいサイズの塗りつぶされたスペースのパターンを示しています。一致した文字列の先頭と末尾に空のスペースが存在する場合もあります。
2行目は、1行目のパターンと一致する場合と一致しない場合があります。それは完全で構成され
#
、x
と_
。この行の長さは、少なくとも最初の行の整数の合計と、異なる整数の数から1を引いた長さであることが保証されており、これより長くすることもできます。したがって、この場合の2行目は、少なくとも24文字、または24文字の長さが保証されています。最初の行のパターンと一致する24文字の行の例を次に示します。(3+6+1+4+6) + (5) - 1
###_######_#_####_######
記号の意味:
#
これは塗りつぶされたボックスを表しますx
これは、「空であることが保証されている」とマークされたボックスを表します_
これは、不明/マークされていないボックスを表します。
ゴール
アイデアは次のとおりです。
- 2行目が最初の行のパターンを満たす有効な行である可能性があることを検証します。
ERROR
不明なスペースを埋めることができない場合、#
またはx
最初のものと一致させることができない場合は、明確なエラーメッセージを印刷する必要があります(これを選択する方法はあなた次第です。以下の例では、5文字である必要はありません)ライン。
- 行に完全に配置され、スペースで区切られた整数のゼロインデックスのインデックスを出力します。あいまいさがある場合は、indexを出力しないでください。
例:
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.
ルール:
入力を改行で区切られたStringまたはSTDIN(または最も近い代替)として受け取り、出力をスペースで区切られたStringとして返すか、STDOUT(または最も近い代替)に出力するプログラムまたは関数を作成できます。オプションで、出力に単一の末尾の改行を含めることができます。
さらに、もはや面白くない標準的な抜け穴は禁止されています。