给定一个表示长度列表的模式,以及一个表示这些长度的字符串,它们匹配吗?
对于感兴趣的人来说,这等同于验证Nonogram的行或列是否正确。但是,我省略了与非图相关的所有语言,以使那些不熟悉这些谜题的人感到困惑。
输入值
两行数据,由换行符分隔。
第一行将是一个由空格分隔的整数列表,例如:
3 6 1 4 6
该行描述的填充模式的大小等于整数列表,并由第二行必须匹配的,未知长度,正长度的空白空间分隔。匹配的字符串的开头和结尾处也可能有空格。
第二行将是可能与第一行中的模式不匹配的行。它完全由
#
,x
和_
。这条线被保证为至少只要在第一行中的整数的总和,再加上不同整数的数目减1,并且可以更长。因此,在这种情况下,第二行保证至少为(3+6+1+4+6) + (5) - 1
或24个字符长。这是与第一行中的模式匹配的示例24个字符行:###_######_#_####_######
符号的含义:
#
这代表一个填充的盒子x
这表示一个标记为“保证为空”的框_
这表示一个未知/未标记的框。
目标
这个想法是:
- 验证第二行可能是符合第一行模式的有效行。
ERROR
如果未知空格不能用#
或x
匹配第一个,则必须打印明确的错误消息(选择方式由您决定;下面的示例编写,但不必是这5个字符)线。
- 打印已完全放置在行中,以空格分隔的整数的零索引索引。如果有歧义,请勿打印索引。
例子:
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.
规则:
您可以编写一个程序或函数,该程序或函数以换行符分隔的字符串或从STDIN(或最接近的替代方案)接收输入,并以空格分隔的String 返回输出或将其打印到STDOUT(或最接近的替代方案)。您可以选择在输出中包含单个尾随换行符。
此外,这不再是滑稽标准的漏洞被禁止。
1
这是用于解决非图的,对吗?提及非字母词可能会有所帮助,因为这会使解决它们的人立即面临挑战。
—
xnor
@ jimmy23013编辑作为回应。
—
durron597